【问题标题】:Run commands in subshell在子shell中运行命令
【发布时间】:2014-06-26 06:50:09
【问题描述】:

我想自动执行一项我经常执行的重复任务。那就是为不同的架构创建 rpm。要编译代码并创建 rpm,我需要设置项目环境。设置环境后,我将为当前架构创建 rpm,我应该再次通过设置环境为其他架构构建 rpm。

我正在尝试自动化这个过程。问题是一旦设置了环境,我将成为新的 shell,所以我的脚本在子 shell 中不可见。如何自动化?

这是我尝试过的。

cd $project_dir
setenv.sh x86      #creates new sub shell
make clean
make rpm
cp *rpm ~/

exit              #exit from the sub shell

setenv.sh x86_64     #creates new shell
make clean
make rpm
cp *.rpm ~/

exit

将 env 设置为 x86 后,下一个命令不会被执行。

【问题讨论】:

  • setenv.sh 到底是做什么的?脚本的下一行,make clean,在setenv.sh 返回之前不会运行,并且不会在任何子shell 中运行;它将运行与setenv.sh 相同的shell。
  • setenv.sh 将在新的 shell 中设置编译环境。
  • 这是什么意思?你只是设置一些环境变量吗?如果是这样,这些更改只会持续到setenv.sh 退出,即之前 make clean 运行。

标签: bash shell automation sh subshell


【解决方案1】:

您可以像这样强制 2 个部分在子 shell 中执行:

cd "$project_dir"

(. setenv.sh x86
make clean
make rpm
cp *rpm ~/)

(. setenv.sh x86_64
make clean
make rpm
cp *.rpm ~/)

【讨论】:

  • 我试过了。 ( ) 将创建子 shell,但在该子 shell 中 setenv.sh 将再创建一个 shell。所以这些 make 命令在那个 shell 中是不可见的。
  • 我试过了。但现在我无法设置环境。我收到错误setenv.sh: line 464: svnenvopts.source: No such file or directory。那是什么'。做 ??我想我这样做之后就迷路了。
  • 我无法访问setenv.sh,所以我猜不出为什么会出现这个错误。
猜你喜欢
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
  • 2014-04-30
  • 2015-10-05
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多