Shell: 从常规文件展开 $HOME

Shell: Expand $HOME from regular file

我将命令存储在一个文件中,以便 运行 由 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 subshell 并从 read 循环中删除 -rcurl 语句创建了一个 '$HOME' 目录,这不是我想要做的,我希望命令以我的 /home/.\+/ 目录为目标。

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

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

正在将评论转为答案。

你能用:

sh -c "$line"

或:

eval $line

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

sh "$file"

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