私はaを使ってシェルスクリプトに渡していますtmpfile
。my_exe
終了tmpfile
後、内容を削除する必要があるためmy_exe
使用していますtrap "rm $tmpfile" exit
。
my_exe
端末を閉じるときも閉じることを防ぐ必要があるのでnohup my_exe $tmpfile &
。次のように進みます。$tmpfile
my_exe
#!/bin/bash
tmpfile=$(mktemp)
trap "rm $tmpfile" exit
echo "aaa" > $tmpfile
nohup my_exe $tmpfile &
trap
実際に終了を待つようにコマンドを設定するにはどうすればよいですかmy_exe
?
答え1
スクリプトの最後の行はmy_exe
バックグラウンドで呼び出されます。これは、呼び出しがmy_exe
すぐに成功コードを返すことを意味します。
あなたのスクリプトが知っている限り、my_exe
そのスクリプトが呼び出され、正常に作業を完了しました。スクリプトには実行する他のコマンドがないため、スクリプトが終了し、一時ファイル削除トラップがトリガーされます。
トラップは外部コマンドではないため、必要な方法で実行するようにトラップを構成することはできません。スクリプトを実行するシェルの内部機能です。トラップ機能が完了するのを待つには、my_exe
スクリプトがmy_exe
完了するのを待つ必要があります。
実行中に端末を閉じたいと思ったので、my_exe
コールラインから&を削除することをお勧めしますmy_exe
。スクリプトはmy_exe
一時ファイルの使用が完了するのを待ちます。代わりに&を使用してバックグラウンドでスクリプトを実行してください。
所望の方法で動作するには、いくつかの実験が必要な場合があります。プロセスを終了せずにターミナルウィンドウを閉じることができるか、一時ファイルが正しい時間に削除されることを確認するよりも、呼び出されたスクリプトバージョンで/bin/sleep 15
テストすることをお勧めします。my_exe