Bash 脚本:允许更改“环境/身份”

Bash 脚本:允许更改“环境/身份”

我现在已经多次遇到过这个问题,我想找到一种方法来自动化/编写涉及改变身份或环境的事情(我不确定如何准确地称呼它)。

一个简单的例子是,一个脚本的一部分必须用su. 来执行(make install例如)。要实现这一点,可以使用sudo。但是,还有其他环境更改没有这样的转义解决方案。可能众所周知的是 python virtualenv,人们可以很容易地想象一个这样的脚本

source virtEnv/bin/activate
python myScript.py

或者只是一个调用的脚本screen。现在我正在编译 gstreamer,我想在脚本中自动执行,因为我稍后必须在其他几台计算机上部署此安装

for i in gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-python gnonlin gst-ffmpeg 
do
   gst-head
   cd ./$i
   git checkout tags/1.1.1
   ./autogen.sh
   make -j7
   exit
done

gst-head加载本地 pkg_config(如果我没记错的话)并将我置于单独环境中的脚本在哪里gst-uninstalled。如果我将其放入脚本中,脚本将在那里停止执行,一旦我exit从该环境中执行,脚本就会继续执行。

答案1

脚本“放置”的那个“环境”实际上是您的 shell 的一个新实例。您不应该简单地调用不带参数的 gst-head,而应该将命令作为参数传递!您能在脚本中看到这部分吗?

# if we got a command, run it, else start a shell
if test ! -z "$1";
then
  $@
  exit $?
fi

我认为你应该尝试使用它。顺便说一句,如果你想不惜一切代价启动一个 shell,那么除非你以某种方式(独立的 expect 脚本或嵌入到 shell 脚本中)使用 expect,否则你将无法与它交互。

相关内容