Bel in PuTTYwenn es auf eine Eingabe wartet?


3

Ich muss oft große Projekte herunterladen, aktualisieren und erstellen, da zwischen zwei Befehlen eine lange Wartezeit liegt. Die Projekte werden auf einem Linux-Computer gespeichert und verwendet, und ich verbinde mich remote mit ihm Kitt .

Auf der Suche nach einem Weg zu sein alarmiert Wenn ein Befehl ausgeführt wird, während ich weiter an etwas anderem arbeite.

ich bin nicht Erwarten Sie den folgenden Ansatz, da der Befehl selbst auf die Eingabe warten kann.

<command> && tput bel

Vielen Dank.

Antworten:


1

PuTTY weiß nicht, wann ein Remote-Befehl auf Eingabe wartet. Was das Endgerät (oder den SSH-Client) betrifft, so kann Eingabe erfolgen immer gesendet werden. (Selbst das Erraten anhand des angezeigten Texts ist zwecklos, da viele Fortschrittsanzeigen von Eingabeaufforderungen für einen Computer nicht zu unterscheiden sind.)

Angesichts Ihrer Anforderungen ist die einzige Option, die mir in den Sinn kommt, eine LD_PRELOAD Bibliothek, die eine Glocke druckt, wenn ein Programm versucht, von einem tty-Gerät zu lesen. So etwas wie:

#define _GNU_SOURCE
#include <dlfcn.h>
#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count) {
    static ssize_t (*real_read)(int fd, void *buf, size_t count);

    if (isatty(fd))
        write(fd, "\a", 1);

    if (!real_read)
        real_read = dlsym(RTLD_NEXT, "read");

    return real_read(fd, buf, count);
}

(Nun, es funktioniert nicht für statisch verknüpfte Binärdateien, aber nahe genug.)

Wenn ein Befehl auf eine Eingabe wartet, ist dies wiederum per Definition der Fall nicht durchgeführt Die Anforderungen sind also etwas widersprüchlich.


Ich denke, Sie haben eine Art Proxy-Funktion für den Lesebefehl geschrieben. Der Befehl ist eigentlich ein Build-Skript, und wenn ich ihn ausführe, fragt er zwischendurch nach der Erlaubnis von sudo, wenn ich das Passwort eingeben muss. Außerdem muss ich jedes Mal, wenn ein Befehl ausgeführt wird, sicherstellen, dass ich ihn beende tput bel sonst höre ich keine Glocke. gibt es also keine generische lösung für kitt?
wolfram77

Das read() Die libc-Funktion hat nichts mit der zu tun read Shell-Befehl. Was sudo betrifft, export SUDO_PROMPT=$'\aEnter sudo password: '
grawity

Ich meine, mein Schlechtes read() Nur libc-Funktion. Aber ich bin überrascht, dass es nicht möglich ist. (Viele Fortschrittsanzeigen sind für einen Computer nicht von Eingabeaufforderungen zu unterscheiden.) Stimmt es nicht, dass ein Programm, das auf eine Eingabe wartet, auf einen Lesevorgang von stdin in seinem Hauptthread wartet? Linux sollte wissen können, dass das Programm tatsächlich auf Eingaben wartet und keine Verarbeitung durchführt. Wenn dies möglich ist, sollte es auch möglich sein, diese Informationen an PuTTY weiterzuleiten.
wolfram77

Vielleicht wird das alles so kompliziert und ich sollte mich daran halten tput. Aber ich habe diese Frage gestellt und vermutet, dass jemand einen einfacheren Weg hat. Vielen Dank.
wolfram77

0

Als 90% ige Lösung können Sie Ihrer Shell anweisen, nach Abschluss eines Befehls eine Glocke zu ertönen. In bash zum Beispiel einfach include \a in deiner PS1.

Wenn Sie eine Klingel wünschen, wenn der Befehl stoppt, um eine Eingabe anzufordern, ist eine 99% -Lösung in Nicht-Linux-Unixen verfügbar: drücke Strg-Y nachdem Sie Ihren Befehl ausgeführt haben. Versuchen Sie jedoch, nach programmspezifischen Konfigurationen zu suchen, da dies nicht unterstützt wird. In Vim können Sie beispielsweise hinzufügen norm \ zu deinem .vimrc eine Glocke zu wiederholen, wenn es gestartet wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.