web-dev-qa-db-ja.com

シェルファイルはターミナルを開き、特定の順序で一連のコマンドを実行します

私がやっていたことは:

  1. ターミナルインスタンスを手動で開いて、次のコマンドとシェルファイルを実行します

  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の提案を適用した後、見つかった here 手順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にあるメッセージです(ただし、これは実行する3番目のコマンドでなければなりません)。もう1つは、設定する必要のある変数がないことです。このvarset.shを使用すると、たとえば、echo $ var1(variables.shにあります)を使用すると、何も表示されません。つまり、変数が設定されていません。variables.shで機能するのは、エコーメッセージだけです。表示されます。

ディレクトリに表示される2行目は、/home/userA/scriptsに設定されている端末の作業ディレクトリです。

3つ目は、$ PACKAGE_PATH変数を設定するこのコマンドPACKAGE_PATH=PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATHが機能しないことです。

したがって、これらのコマンドとシェルファイルを要求されたシーケンスで実行する方法を誰かがアドバイスできる場合は、.

1
Tak

スクリプトを書くだけです:

#!/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に変更するだけです。

2
terdon