我将命令存储在要由POSIX Shell程序逐行读取和运行的文件中。看起来像这样:
curl -fLo $HOME/.antigen.zsh git.io/antigen
curl -fLo $HOME/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
vim +"so $HOME/.vimrc" +PlugInstall +qa!
我还使用这个小的函数体来遍历它并运行每一行:
while read -r line; do
$line
done < file
简单的东西。而且有效!但是,我在扩展$HOME
到主目录时遇到了麻烦(~
因此)。我尝试使用exec
子外壳并-r
从read
循环中删除,但是curl
语句创建'$HOME'
目录,这不是我想要的,我希望命令以我的/home/.\+/
目录为目标。
既然这是一个奇怪的问题,并且您可能会想知道(我当然会),所以这不是XY问题。我花了相当多的时间设计该软件,并确定我需要将这些命令存储在文件中以使程序正常工作,除非证明这是绝对不可能的,否则我不会考虑这样做。另外,我不会扩展$HOME
自己,因为我希望这些命令可以在其他用户的计算机上使用。
有任何想法吗?提前致谢!
将评论转换为答案。
您可以使用:
sh -c "$line"
要么:
eval $line
通常eval
认为这是危险的,但是我不确定这sh -c
有很大的不同。想一想,为什么不简单地执行存储命令的文件呢?
sh "$file"
您可以sh -e "$file"
用来停止未检查的错误,并添加-x
以查看正在执行的操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句