在循环中定义zsh函数会重新分配pre

时间:2012-04-13 05:00:27

标签: zsh zshrc

我正在尝试创建一个基于某些命名目录在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]}并根据它在定义时所具有的环境进行替换,以便它可以随每个定义而变化。

1 个答案:

答案 0 :(得分:0)

除非你在当前工作目录中有一个名为'$ HOME'的目录,否则听起来不像真正的目录。

发生的事情是文件内容没有发生环境替换(即翻译$ HOME-&gt; / 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" | ...