リモート スクリプトから tailf コマンドを終了した後もセッションを維持する方法

リモート スクリプトから tailf コマンドを終了した後もセッションを維持する方法

次のコマンドを実行する PowerShell スクリプトがあります。putty.exe -ssh user@srv -pw password -m Execute_Command_File -t

スクリプトの実行中、tailf /dir/log/コマンドは Execute_Command_File に書き込まれます。スクリプトの実行後、要求されたセッションが開かれ、tailf動作します。

問題は、(ctrl+C)で終了しようとするとtailf、ターミナルが閉じてしまうことです。

/bin/bashの末尾に追加しようとしましたがExecute_Command_File、役に立ちませんでした。そしてもちろん も試しましたがtail -f/F、機能しませんでした...

何か案は?

答え1

tailCTRL+C が原因で が終了し、それが親に (SINGINT) 送信されることがありますbash。デフォルトでは、bash はこのようなシグナルを受信すると終了するため、 がそれを受信したときのデフォルトの動作を置き換える必要がありますbash

使用トラップこれを変更するには、組み込みコマンドを使用しますbash(1)

次のスクリプトtailf-ctrl.sh はデモであり、答えを示しています。

#!/bin/bash
function finish {
    echo "CTRL-C pressed!"
}

F=testfile

echo hello > $F
# set custom action
trap finish SIGINT # comment this to see the problem
tail -f $F
# reset default action
trap - SIGINT

echo "Hello after" > after
cat after

ご了承ください:

  1. シギントCTRL+Cに関連する信号です
  2. 初めトラップSIGINTシグナルに関連するカスタムアクションをインストールする
  3. 2番トラップSIGINTシグナルのデフォルトの動作をリセットする

スクリプトの出力は次のとおりです。

$ bash tailf-ctrl.sh 
hello
^CCTRL-C pressed!
Hello after

tailこれは、 が原因で が終了したときにスクリプトの終わりに到達するように 2 番目のファイルが書き込まれていることを示していますCTRL-C

最初のトラップ コマンドをコメント アウトすると、問題が発生します。bash はすぐに終了し、出力は次のようになります。

$ bash tailf-ctrl.sh 
hello
^C
$

関連情報