So bleiben Sie in der Sitzung, nachdem Sie den tailf-Befehl aus einem Remote-Skript beendet haben

So bleiben Sie in der Sitzung, nachdem Sie den tailf-Befehl aus einem Remote-Skript beendet haben

Habe ein PowerShell-Skript, aus dem ich den folgenden Befehl ausführe:putty.exe -ssh user@srv -pw password -m Execute_Command_File -t

Während des Skripts tailf /dir/log/wird der Befehl in Execute_Command_File geschrieben. Nach der Ausführung des Skripts wird die angeforderte Sitzung geöffnet und tailffunktioniert.

Das Problem: Wenn ich versuche, das Programm zu beenden tailf(Strg+C), wird das Terminal geschlossen.

/bin/bashHabe versucht , am Ende hinzuzufügen Execute_Command_File, hat nicht geholfen. Und natürlich versucht tail -f/F, hat auch nicht funktioniert ...

Irgendwelche Ideen?

Antwort1

Es kommt vor, dass tailBash aufgrund von STRG+C abbricht, aber es wird auch (SINGINT) an das übergeordnete Element gesendet. bashDa Bash standardmäßig abbricht, wenn ein solches Signal empfangen wird, müssen Sie das Standardverhalten ändern, bashwenn es empfangen wird.

Verwendenfangenintegrierter Befehl, um bash(1)dies zu ändern.

Das folgende Skript tailf-ctrl.sh ist eine Demo und zeigt die Antwort:

#!/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

beachten Sie, dass:

  1. ZEICHENist das Signal, das mit STRG+C zusammenhängt
  2. ErstefangenInstallieren Sie eine benutzerdefinierte Aktion im Zusammenhang mit dem SIGINT-Signal
  3. zweitefangenStandardverhalten des SIGINT-Signals zurücksetzen

Die Ausgabe des Skripts lautet:

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

das zeigt, dass die zweite Datei so geschrieben wird, dass das Ende des Skripts erreicht ist, wenn tailes aufgrund von abbricht CTRL-C.

Wenn Sie den ersten Trap-Befehl auskommentieren, sehen Sie, dass Ihr Problem auftritt: Bash wird sofort beendet und die Ausgabe sollte wie folgt aussehen:

$ bash tailf-ctrl.sh 
hello
^C
$

verwandte Informationen