4

zsh で奇妙な問題が発生しています。シェルを起動すると、関数、環境変数、エイリアスなど、すべて正常に動作します。次の関数を作成し、zsh で取得しました。

clean()
{
    path=/tmp    
    for i in ${path}/*; do
      echo $i
    done
}

ターミナルでの実行cleanは、/tmp/ 内のすべてのファイルを出力するという点で、期待どおりに機能します。ただし、後で任意のコマンド (たとえば、ls) を試すと、次のようになります。

zsh: command not found: ls

他にも問題なく動作する機能がいくつかあるため、何らかの形でそのループが問題を引き起こしていると思います。いずれにせよ、これは非常に苛立たしいことであり、コミュニティの注目に心から感謝します. ありがとう!

4

3 に答える 3

6

問題はpath変数の割り当てです。zshには(PATHに加えて)その変数が予約されているため、それを上書きすると、シェルがコマンドを見つけることができなくなります。

もちろん、正解は次以外の変数を使用することです$path

local_path=/tmp    
for i in ${local_path}/*; do
  echo $i
done
于 2010-04-27T22:37:05.443 に答える
1

pathコマンドを見つけるために使用される変数を上書きすると思います。そのため、コマンドが見つかりません。

于 2010-04-27T22:54:58.810 に答える
0

私はこれを再び見つけるために何時間も掘りました。Zsh は、PATH タイプの変数から重複を削除するための優れたトリックを提供します。これはトピックから少し外れていますが、役立つ場合があります。

typeset -T PYTHONPATH pythonpath
typeset -U pythonpath
  1. 最初の行は PYTHONPATH コロンで区切られた文字列を zsh 配列にバインドします
  2. 2番目は重複を削除します
于 2012-04-18T08:55:28.173 に答える