我正在运行一个 shell script.sh
,它应该打开终端,然后在这个打开的终端中运行一些命令。发生的事情是终端启动了,但以下命令未在此终端中执行。如果有人可以告诉我如何在通过这个打开终端后script.sh
在其中运行其他命令。这是我的script.sh
文件:
#!/bin/bash
gksu -u userA /usr/bin/gnome-terminal PACKAGE_PATH=/home/userA/package1; cd /home/userA/scripts
因此第一个命令gksu -u userA /usr/bin/gnome-terminal
打开一个终端实例,我想问如何运行以下两个命令PACKAGE_PATH=/home/userA/package1
,并cd /home/userA/scripts
在这个打开的终端实例中使用script.sh
编辑:
在采纳了 muru 的建议后,我使用了以下方法:
gnome-terminal -x sudo -u userA bash -c 'PPACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATH; cd /home/userA/scripts; source varset.sh; bash'
但它并没有按照我放置的顺序运行。
终端中出现的第一行是在variables.sh中找到的一条消息(尽管这应该是第三个要运行的命令),另一件事是,没有设置任何应该使用它来设置的变量varset.sh
,例如当我使用echo $var1(在variables.sh中找到)时没有显示任何内容,这意味着没有设置变量,variables.sh中唯一起作用的是显示的echo消息。
目录中出现的第二行是设置为的终端工作目录/home/userA/scripts
。
第三件事是PACKAGE_PATH=PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATH
设置 $PACKAGE_PATH 变量的这个命令不起作用。
因此,如果有人可以建议如何按此顺序运行此命令以及如何在第一个命令和varset.sh
shell 文件中的变量上设置变量。
答案1
我建议采取以下方法来保持 shell 开放:
gnome-terminal -x sudo -u userA bash -c 'PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATH; \
cd /home/userA/scripts; \
source varset.sh; \
bash'
但是,如果未导出,最后一个将不会受到或bash
的分配的影响。$PACKAGE_PATH
source varset.sh
所以:
gnome-terminal -x sudo -u userA bash -c 'export PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATH; \
cd /home/userA/scripts; \
source varset.sh; \
bash'
使用varset.sh
导出应该可以解决问题。