我正在尝试创建一个启动另一个脚本并直接将其作为子项的脚本。我的目标是:
我通过subhells和exec实现了前两个目标,但我还没有管理第三个目标。有人能帮助我吗?
以下是详细信息。为了便于描述,我将调用第一个脚本run
和另一个程序sleepcmd
。这是sleepcmd脚本的内容
echo $HOME && exec sleep 1000
这是运行脚本的内容
(HOME=~/foo/bar && cd $HOME/bin && ./sleepcmd)
在./sleepcmd调用之前添加一个exec,即
(HOME=~/foo/bar && cd $HOME/bin && exec ./sleepcmd)
与直接运行sleepcmd(或sleep)相比,只需要一个额外的shell。
我怎样才能做得更好,摆脱()子shell,同时仍然使用不同的$ HOME和工作目录调用sleep 1000
?
答案 0 :(得分:2)
试
pushd
VAR=value command [args...]
popd
e.g。
pushd ~/foo/bar/bin
HOME=~/foo/bar ./sleepcmd
popd
答案 1 :(得分:0)
您可以尝试在包含新环境和命令的文件(例如“myscript”)上使用“source”命令,例如
source myscript
或
. myscript
并在myscript的顶部设置新环境。但是,您必须将环境设置回myscript末尾之前的状态,否则它将在主脚本中继续。