Shell:从常规文件展开$HOME



我将命令存储在一个文件中,由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子shell并从read循环中删除-r,但curl语句创建了一个'$HOME'目录,这不是我想要做的,我希望命令针对我的/home/.+/目录。

由于这是一个奇怪的问题,你可能会在这一点上想知道(我当然会(,这不是一个XY问题。我花了相当长的时间来设计这一软件,我确信我需要将这些命令存储在一个文件中,以便我的程序运行,除非证明这是绝对不可能的,否则我不会考虑其他方式。此外,我不会自己扩展$HOME,因为我希望这些命令能在其他用户的计算机上运行。

有什么想法吗?提前感谢!

将注释转换为答案

你能使用吗:

sh -c "$line"

或者:

eval $line

通常eval被认为是危险的,但我不确定sh -c有多大不同。仔细想想,为什么不简单地执行存储命令的文件呢?

sh "$file"

您可以使用sh -e "$file"来停止未检查的错误,并添加-x来查看正在执行的内容。

最新更新