0

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

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

我通过 subshel​​ls 和 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,同时仍然sleep 1000使用不同的 $HOME 和工作目录调用?

4

2 回答 2

2

尝试

pushd
VAR=value command [args...]
popd

例如

pushd ~/foo/bar/bin
HOME=~/foo/bar ./sleepcmd
popd
于 2012-12-13T08:24:31.013 回答
0

您可以尝试在包含新环境和命令的文件(例如“myscript”)上使用“source”命令,例如

source myscript

或者

. myscript

并在 myscript 顶部设置新环境。但是,您必须在 myscript 结束时将环境设置回原来的状态,否则它将在您的主脚本中继续。

于 2012-12-13T10:50:08.053 回答