まず、問題は、ユーザーが閉じるボタンをクリックし、端末自体(および端末で実行されているプロセス)がコマンドラインから起動したときにスクリプトが実行中であることをユーザーに通知する方法です。
スクリプトが終了する前にユーザーが元に戻す操作を実行するスクリプトがあります。ユーザーが[enter]を押すまでプロセスを一時停止する読み取りステートメントがあります。しかし、不運なユーザーは時々右上の閉じるボタン[x]をクリックすることがあります。閉じるボタンをつかむトラップが見つかりませんでしたが、警告は問題ありません。 gnome 端末は必要な警告を提供します。
しかし、、この機能は、gnome-terminalがスクリプト(Thunarカスタムタスクなど)で実行されている場合は機能しません。これを明確にするには、次のスクリプトを検討してください。
gnome-terminal --command="sh readx.sh"
ここで readx.sh には 1 行が含まれます: read x
右上の[x]ボタンをクリックすると、このように実行された端末は、スクリプトがアクティブな間に警告なしに閉じます。
トラッピングや警告方法はすべて私にとって効果的です。
答え1
はい! zenityのヒントを含めると私にうまくいきます。 nohupを使用してzenityプロンプトを含むスクリプトを実行すると、必要に応じてスレッドがブロックされます。
答え2
実際に実行されているプロセスをターミナルウィンドウから切り離すことができるので、readx.sh
gnomeターミナルウィンドウを閉じてもバックグラウンドで実行され続け、期待されるタスクを実行します。これを行うには、nohup
コマンドを使用する必要があります。端末からプロセスを切断し、出力をnohup.outにリダイレクトしてマスクしますSIGHUP
。
次のコマンドを使用してテストしました。gnome-terminal -e "nohup bash ./123.sh"
スクリプトには123.sh
.txtのみが含まれているため、前のコマンドを実行して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です。