1

いくつかの名前付きディレクトリに基づいて、zsh で関数を定義するツールを作成しようとしています。現在、私はこれを持っています:

while read line; do
    p=( `echo $line | egrep -o -e "[^ ]+"` )
    alias go${p[1]}="cd ${p[2]}"
    put${p[1]}()
    {
        mv $1 ${p[2]}
    }
done < "$HOME/.pro_targets"

これはエイリアスに対して機能しますが、コマンドラインで put[target] と入力すると、

mv: cannot mv 'wol.sh' to '$HOME/work/tagfs/fuse-tutorial/src': No such file or directory

の最後の値を参照します$p${p[2]}変数を閉じて、定義されたときの環境に基づいて置換する関数が必要だと思います。これにより、定義ごとに変化する可能性があります。

4

1 に答える 1

0

現在の作業ディレクトリに文字通り「$HOME」という名前のディレクトリがない限り、それは実際のディレクトリのようには聞こえません。

何が起こったかというと、環境置換 (つまり、$HOME-> /home/username の変換) がファイルの内容に対して行われていないということです。

試す:

envsubst < "$HOME/.pro_targets" | \
  while read line; do
      p=( `echo $line | egrep -o -e "[^ ]+"` )
      alias go${p[1]}="cd ${p[2]}"
      put${p[1]}()
      {
          mv $1 ${p[2]}
      }
  done

$HOME のみを機能させたい場合は、試してください

env -i HOME="$HOME" envsubst < "$HOME/.pro_targets" | ...
于 2012-04-13T05:09:36.580 に答える