Etwas von einer TMUX-Sitzung an die Basissitzung zurücksenden

Etwas von einer TMUX-Sitzung an die Basissitzung zurücksenden

Ich habe ein Skript mit diesem Code:

#!/bin/bash
tmux new-session -d bash
    sleep 1d
    echo 1 day passed
    tmux kill-session

Soweit ich weiß, wird das Echo nach 24 Stunden in der Standardausgabe der Tmux-Sitzung angezeigt, jedoch nicht in meiner grundlegenden Bash-Sitzung (der Sitzung, die ich nach dem Booten meines Betriebssystems habe).

Wie kann ich sicherstellen, dass das Echo der Tmux-Sitzung (die natürlich eine Ebene über meiner grundlegenden Bash-Sitzung liegt) in meiner grundlegenden Sitzung gedruckt wird?

Ziel ist es, die sleepZeitphase zu nutzenin einem anderenSitzung, sondern um die Ausgabe aller Befehle zu erhalten, die unter sie fallenin meinemSitzung.

Natürlich kann ich den Ruhezustand in meiner Basissitzung nicht verwenden, da dies die Sitzung unbrauchbar oder „schläfrig“ machen würde.

Antwort1

Das Echo erscheint nach 24 Stunden im tmuxStandardout der Sitzung.

Wenn Sie sich auf die tmuxSitzung beziehen, die Sie vom Skript aus starten, dann ist dies nicht wahr. bashDer Prozess, der das Skript ausführt, wartet auf tmux new-session -d bashdessen Beendigung, dann wird es ausgeführt sleep 1dund so weiter. Beachten Sie, dass tmux new-session -d bashes fast sofort beendet wird, weil -d(das andere bashinnerhalb der neu erstellten tmuxSitzung nicht beendet wird, aber das ist jetzt irrelevant).

Ändern Sie die Verzögerung in sleep 10und führen Sie das Skript aus. Warten Sie eine Weile und Sie werden sehen, dass es echozu IhremaktuellTerminal. Rufen Sie es als Nächstes auf, tmux lsum zu sehen, dass eine neue, nutzlose Sitzung zurückgeblieben ist. Sie können sich daran anschließen und überprüfen, ob echodort nichts mit -ed versehen wurde.


Ich kann es nicht sleepin meiner Basissitzung verwenden, da dies die Sitzung unbrauchbar machen würde

Dasselbe gilt für Ihr Skript, wenn es im Vordergrund ausgeführt wird. Wie wäre es mit einem Hintergrundjob? Sie brauchen das tmuxüberhaupt nicht:

(sleep 20s; echo surprise) &

Im Allgemeinendürfenauf ein anderes Terminal schreiben, wenn Sie die entsprechenden Berechtigungen haben. Folgendes kann ich in meinem Debian tun. Nehmen wir an, ich möchte aus Sitzung B schreiben, damit der Text in bashSitzung A sichtbar ist. Zuerst muss ich wissen, welches Gerät das stdoutvon A eigentlich ist:

readlink /proc/$pid_of_bash_A/fd/1

Innerhalb von bashA ist dies dank $$spezieller Parameter einfacher:

readlink /proc/$$/fd/1

Die Ausgabe ist /dev/pts/3in meinem Fall. Dann in der Sitzung B:

echo Hello World! > /dev/pts/3

verwandte Informationen