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