1

簡単なスクリプトを書きました

#!/bin/bash
nohup $1 &
exit

を実行する'scriptName' geditと、geditを開いてから端末を閉じる必要があります。ただし、スクリプトの実行後に端末が閉じられないという問題があります。

お世話になったもの:

  • 端末の設定を確認しましたWhen command exits: Exit the terminal
  • このスクリプトを入れたい/usr/local/binので、 のような実行が使えません。./スクリプト名
  • 端末はこれの親ではないようです。これを変更するにはどうすればよいですか?
4

3 に答える 3

2

あなたが試みているアプローチは、次の理由で機能しません。

端末セッションのシェルは 1 つのプロセスです。通常、シェル スクリプトを実行すると、ターミナル セッション シェルは 2 番目のシェル プロセスを開始し、その下でスクリプトを実行します。したがってexit、スクリプトの最後で、2番目のシェルに終了するように指示します-スクリプトの最後に到達したため、とにかく実行します。2番目のシェルプロセスから最初のシェルプロセスを強制終了することもできますが($PPID他の回答のコメントを参照)、これはあまり良い形式ではありません。

スクリプトが期待どおりに動作するようにするには、ターミナル セッション シェルでスクリプト内のコマンドを実行する必要があります。これには、bash の組み込みsourceコマンド - type source /path/to/your/script gedit、または. /path/to/your/script gedit略してを使用します。

これを実行する必要がある方法のため、スクリプトを自分に置くことはPATH役に立ちません-しかし、スクリプトの実行を容易にするためにエイリアス(一連のシェルコマンドに展開される「ショートカット」)を作成できます-追加alias your_alias_name='. /path/to/your/script'あなたのような行~/.bashrc

于 2013-11-09T19:03:48.393 に答える
1

以下にサンプルスクリプトを示します。

#!/bin/bash
echo "hi" 
/bin/bash/abc.sh &
sleep 2 
#sleep is used to pause the execution temporary to see the output.
kill -25 $PPID

kill コマンドに渡す値によって動作が決まります。ここでは、さまざまな値を見つけることができます。

Kill -25 は、ターミナルを閉じて、コマンドの最後に「&」を追加するのに役立ちました。:)

于 2018-01-05T06:47:32.887 に答える
0

私はあなたが Mac を使用していると推測しています。問題は、スクリプトをどのように開始したかです。

ターミナルを起動し、ターミナルから「scriptName」を実行した場合、ターミナルはまだシェルを実行しているため、終了しません。環境設定をよく確認してください。「コマンドの終了時」ではなく、「シェルの終了時」と表示されています。

于 2013-11-09T19:02:12.387 に答える