我以前的做法是:
手动打开终端实例运行以下命令和 shell 文件
跑步
PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATH
跑步:
cd /home/userA/scripts
跑步:
varset.sh
导出并设置一些变量。
跑步:
source ff.sh $input $output
跑步:
bb.sh
它要求我在执行过程中输入一个数字。
跑步
bc.sh 8
因此每次运行之前我都必须手动复制并粘贴这些内容到终端中。
我现在想要做的是将所有这些都放入脚本文件中,它将自动打开终端并按顺序运行它们,以便下一个命令仅在第一个命令完成时运行,这样我就不必再手动执行此操作了。
在应用了muru的建议后发现这里我仅使用下面的脚本执行步骤 1 至 4,但它无法正常工作:
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'`
它没有按照我设置的顺序运行。
这成功打开了终端,但终端中出现的第一行是在中找到的消息varset.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 变量的这个命令不起作用。
因此,如果有人可以建议如何按照要求的顺序运行这些命令和 shell 文件。
答案1
只需编写一个脚本:
#!/usr/bin/env bash
PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATH
cd /home/userA/scripts
## You need to source this script if it defines variables. Otherwise
## the variables won't be available to your main script. '.' is the same
## as 'source' but more portable to different shells.
. varset.sh &&
. ff.sh $input $output &&
bb.sh &&
bc.sh 8 &&
每个命令之后&&
都确保只有第一个命令成功退出时才会运行下一个命令。
现在您可以将脚本另存为~/scripts/foo.sh
,使其可执行(chmod 744 ~/scripts/foo.sh
)并从终端运行它:
~/scripts/foo.sh
或者,您可以.desktop
为其创建一个文件,然后按照说明双击运行它这里。只需将该Terminal=false
行更改为Terminal=true
。