使用自定义环境运行脚本。变种。没有额外的贝壳工作的dir

时间:2012-12-13 08:23:26

标签: linux bash environment-variables working-directory

我正在尝试创建一个启动另一个脚本并直接将其作为子项的脚本。我的目标是:

  • 子程序应该看到不同的$ HOME
  • 子脚本应该在与当前工作目录不同的目录中运行(即不同的pwd)
  • 没有额外的炮弹

我通过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

2 个答案:

答案 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末尾之前的状态,否则它将在主脚本中继续。