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 回答