shell 文件打开终端并按特定顺序运行一系列命令

shell 文件打开终端并按特定顺序运行一系列命令

我以前的做法是:

  1. 手动打开终端实例运行以下命令和 shell 文件

  2. 跑步

    PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PAT‌​H
    
  3. 跑步:

    cd /home/userA/scripts
    
  4. 跑步:

    varset.sh
    

    导出并设置一些变量。

  5. 跑步:

    source ff.sh $input $output
    
  6. 跑步:

    bb.sh
    

    它要求我在执行过程中输入一个数字。

  7. 跑步

    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_PAT‌​H

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

相关内容