2

次のコードを bash から対話的に実行すると、正常に動作します。

cleartool setview $myview
cleartool lsbl

しかし、それらをスクリプトに入れてスクリプトを実行しようとすると、最初の cleartool コマンドから戻ることはありません。

インタラクティブなケースでは、最初の cleartool コマンドが実行する新しい bash を開き、新しいシェルから 2 番目のコマンドを実行すると正常に動作するようです。ただし、スクリプトの場合、新しいシェルが表示されないため、コマンドから返されないようです。

cleartool コマンドを実行元と同じ bash シェルに保持する方法はありますか?

4

2 に答える 2

8

このcleartool setviewコマンドは、新しいインタラクティブ シェルを開きます。そのシェルでは、2 番目のコマンドを手で入力すると実行されます。両方の行をスクリプトに入れると、setviewは入力を待機するシェルを実行します。2 番目のコマンドは、そのシェルを終了するとすぐに実行されます。もちろん、2 番目のコマンドは のコンテキストでは実行されません$myview

もう少しわかりやすくするために、次のようにします。 シェルでcleartool setview $myview5 回実行します。それぞれのecho $$後に入力しますsetview。これにより、現在のシェルのプロセス ID が得られます。数が増えます。次にexit、各シェルを入力します。echo $$各 の後にもう一度行いますexit。古い番号が降順で表示されます。6exit秒後に端末を閉じる必要があります。

以上が説明でした。問題の解決策は、次のコマンドの-execオプションである可能性があります。setview

cleartool setview $myview -exec "cleartool lsbl"

トリックを行う必要があります。

于 2011-09-30T21:13:54.880 に答える
5

質問に直接答えるものではありませんが、次のようにすると、あなたが望むことができるかもしれません。最初のコマンドが開いたサブシェルで 2 番目のコマンドを実行します。

cleartool setview $myview << EOF
cleartool lsbl
EOF
于 2011-09-30T21:15:38.063 に答える