
まず、質問です。ユーザーが閉じるボタンをクリックし、ターミナル自体 (およびその中で実行されているプロセス) がコマンド ラインから開始されたときに、スクリプトが実行中であることをユーザーに警告するにはどうすればよいでしょうか。
スクリプトが終了する前にユーザーが元に戻したいアクションを実行するスクリプトがあります。ユーザーが [Enter] キーを押すまでプロセスを一時停止する読み取りステートメントがあります。しかし、不運なユーザーは、右上隅にある閉じるボタン [x] をクリックすることがあります。閉じるボタンをキャッチするトラップは見つかりませんでしたが、警告は有効です。gnome-terminal は必要な警告を提供します。
しかしただし、gnome-terminal がスクリプト (Thunar カスタム アクションなど) から起動された場合、この機能は動作しません。明確にするために、次のスクリプトを検討してください。
gnome-terminal --command="sh readx.sh"
readx.shには次の1行が含まれます: read x
右上の [x] ボタンをクリックすると、この方法で起動されたターミナルは、スクリプトがまだアクティブな間は警告なしに閉じられます。
私にとっては、罠や警告のためのどんな方法も有効です。
答え1
はい。zenity プロンプトを含めるとうまく機能します。スクリプトが nohup で実行され、zenity プロンプトが含まれている場合、スレッドは希望どおりにブロックされます。
答え2
実際に、実行中のプロセスをreadx.sh
ターミナル ウィンドウから切り離すことができるので、gnome-terminal ウィンドウを閉じても、バックグラウンドで実行が継続され、実行すべき作業が完了します。これを行うには、コマンドを使用する必要があります。このnohup
コマンドは、プロセスをターミナルから切断し、その出力を nohup.out にリダイレクトして、 から保護しますSIGHUP
。
次のコマンドでテストしました:gnome-terminal -e "nohup bash ./123.sh"
スクリプト123.sh
には のみが含まれていますsleep 7 && ls -a > 1.txt
。したがって、前のコマンドを実行して gnome-terminal のウィンドウを閉じると、ファイル 1.txt が作成されます。
答え3
問題を解決するためにこのコマンドを試しました。
Exec=mate-terminal -e "bash -i -c 'ssh my.server';bash"
このコマンドはmate-terminal
ではなくでのみテストされていますgnome-terminal
。
私のmate-terminal
バージョンは CentOS7 の 1.16.3 です。