Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell:从常规文件展开$HOME_Shell_Sh_Exec_Variable Expansion - Fatal编程技术网

Shell:从常规文件展开$HOME

Shell:从常规文件展开$HOME,shell,sh,exec,variable-expansion,Shell,Sh,Exec,Variable Expansion,我将命令存储在一个文件中,由POSIX外壳程序逐行读取和运行。它看起来像这样: 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

我将命令存储在一个文件中,由POSIX外壳程序逐行读取和运行。它看起来像这样:

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!
我还使用这个小函数体来遍历它并运行每一行:

读取-r行时
;做
美元线
完成<文件
简单的东西。而且它有效!但是,我在将
$HOME
扩展到我的主目录时遇到了问题(就这一点而言,
~
)。我尝试使用
exec
子shell并从
read
循环中删除
-r
,但是
curl
语句创建了一个
'$HOME'
目录,这不是我想要做的,我希望命令指向我的
/HOME/\+//code>目录

因为这是一个奇怪的问题,你可能会在这一点上感到疑惑(我当然会),这不是一个XY问题。我花了相当长的时间来设计这一段软件,并且确信我<强>需要< /St>将这些命令存储在一个文件中,以便我的程序工作,除非我证明这是绝对不可能的,否则我不会考虑做别的事情。另外,我自己也没有扩展
$HOME
,因为我希望这些命令能在其他用户的计算机上运行

有什么想法吗?提前谢谢

将评论转换为答案

你可以使用:

sh -c "$line"
或:

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

sh "$file"

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

sh-c“$line”
?或
评估$line
?通常
eval
被认为是危险的;不过,我不确定
sh-c
有多大不同。想想看,为什么不简单地执行存储命令的文件呢<代码>sh“$file”
?您可以使用
sh-e“$file”
停止未检查的错误,并添加
-x
以查看正在执行的操作。很抱歉回复太晚,非常感谢@JonathanLeffler
sh-c“$line”
完美地工作并解决了问题。请将其添加为最终答案!
sh "$file"