我现在已经多次遇到过这个问题,我想找到一种方法来自动化/编写涉及改变身份或环境的事情(我不确定如何准确地称呼它)。
一个简单的例子是,一个脚本的一部分必须用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,否则你将无法与它交互。