91013


移動先のパスを書いたファイルをtempフォルダに生成して、移動先のパスをcatで取ってきてcdするみたいなプログラムを書いています。同じ関数をBashでも書いておりそちらは正常に動作しています。

試している環境は、vscodeのcodespacesでubuntu22.04です。

[code]

    function my_cmd(){
      temp_path="/tmp_path/to/_my_app.$$"
      my_app "${temp_path}"
      path=`cat "${temp_path}"`
      cd "${path}" || return
    }
    
[/code]

`my_cmd`を実行すると一度目はちゃんと動くのですが、それ以降実行すると下記のようなエラーが出ます。

[code]

    my_cmd:3: command not found: my_app
    my_cmd:4: command not found: cat
    
[/code]

(まれに`my_cmd:3 permission denied: my_app`となる時もあります)

`my_cmd`実行後、`cd`や`pwd`は実行できますが、パッケージマネージャや`ls`等のコマンドは`command not found`
となります。

zshを強制終了して開きなおすと、一度目だけ動いて再度`command not found`を吐くようになります。


CC BY-SA 4.0
2022-09-09T09:21:08.267
91012
2022-09-09T09:55:20.960
52746
question
shellscript zsh
Zshのshell関数の中で自作のmy_appを一度動かしたら、その後my_appやcatやls、パッケージマネージャのコマンドなどが使えなくなるのを改善したい


現状の書き方だと、既存の path の内容を上書きしてしまうので、各種コマンドが見つからない状態になってしまうのだと思います。

>
[code]

>     path=`cat "${temp_path}"`
>  
[/code]

変わりに、例えば以下のような記述で既存の path に追加してみてください。

[code]

    path=(${path} ${temp_path})
    
[/code]


CC BY-SA 4.0
2022-09-09T09:55:20.960
91013
2022-09-09T09:55:20.960
3060
91012
answer