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
循环中删除 -r
但 curl
语句创建了一个 '$HOME'
目录,这不是我想要做的,我希望命令以我的 /home/.\+/
目录为目标。
由于这是一个奇怪的问题,此时您可能会想知道(我当然会想),所以这不是 XY 问题。我花了相当多的时间来设计这个软件,并且确信我 需要 将这些命令存储在一个文件中以便我的程序运行,我不会考虑这样做,除非这是事实证明绝对不可能。另外,我不会自己扩展 $HOME
,因为我希望这些命令可以在其他用户的计算机上运行。
有什么想法吗?提前致谢!
正在将评论转为答案。
你能用:
sh -c "$line"
或:
eval $line
通常 eval
被认为是危险的,但我不确定 sh -c
有多大不同。想一想,为什么不直接执行存储命令的文件呢?
sh "$file"
您可以使用 sh -e "$file"
停止未检查的错误,并添加 -x
查看正在执行的内容。
我将命令存储在一个文件中,以便 运行 由 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
循环中删除 -r
但 curl
语句创建了一个 '$HOME'
目录,这不是我想要做的,我希望命令以我的 /home/.\+/
目录为目标。
由于这是一个奇怪的问题,此时您可能会想知道(我当然会想),所以这不是 XY 问题。我花了相当多的时间来设计这个软件,并且确信我 需要 将这些命令存储在一个文件中以便我的程序运行,我不会考虑这样做,除非这是事实证明绝对不可能。另外,我不会自己扩展 $HOME
,因为我希望这些命令可以在其他用户的计算机上运行。
有什么想法吗?提前致谢!
正在将评论转为答案。
你能用:
sh -c "$line"
或:
eval $line
通常 eval
被认为是危险的,但我不确定 sh -c
有多大不同。想一想,为什么不直接执行存储命令的文件呢?
sh "$file"
您可以使用 sh -e "$file"
停止未检查的错误,并添加 -x
查看正在执行的内容。