0

新しいターミナル ウィンドウで他のシェル スクリプトを呼び出すシェル スクリプトを作成しました。私のコンピューターでは問題なく動作していました。こんな感じです

#!/bin/sh
gnome-terminal -e "sh one.sh"
zenity --info --text "exed one"
gnome-terminal -e "sh 2.sh"
zenity --info --text "exed 2"
firefox "www.aurl1.com" "www.aurl2.com"

私が理解したことによると、スクリプトは最初に端末を開いて最初のスクリプトを実行し、それが終わったらzenityを表示し、次に新しい端末で2つ実行してからそのようなzenityを表示します。しかし、同じことが別のコンピューターで実行された場合、スクリプトはこの順序に従っていません。すべての端末を並べて開くだけで、終了するのを待たずにダイアログを一緒に表示します。この問題はなぜですか?前もって感謝します。

4

2 に答える 2

1

以前は、gnome-terminal各端末を独自のプロセスで実行していました。ただしgnome-terminal、起動時にgnome-terminalプロセスが既に実行されているかどうかを確認し、実行中の場合は、既存の端末プロセスに、指定された引数で新しいウィンドウを開くように指示します。スクリプトに問題はありません。各プロセスが順番に終了するのを待っています。それは、gnome-terminalその作業を別のプロセスに渡した直後に終了しているだけです。

によるとman gnome-terminal--disable-factoryオプションを使用してこの動作を無効にし、各コマンドを独自のプロセスで実行できます。

これを試して:

gnome-terminal --disable-factory -e 'sh -c "echo hi && sleep 10"'
echo now you can run script 2
于 2012-11-12T18:57:51.610 に答える
0

次のように実行します。

gnome-terminal -e "sh one.sh" ; zenity --info --text "exed one" ; gnome-terminal -e "sh 2.sh" ; zenity --info --text "exed 2"

コンマが行うことは、最初のコマンドを実行し、それが終了するのを待ってから次のコマンドに進むようにシェルに指示することです。それ以外の場合、説明した動作は正常です。何も待たずに、行を 1 つずつ解析します。

于 2012-06-06T03:33:16.260 に答える