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.
tput bel
sonst höre ich keine Glocke. gibt es also keine generische lösung für kitt?read()
Die libc-Funktion hat nichts mit der zu tunread
Shell-Befehl. Was sudo betrifft,export SUDO_PROMPT=$'\aEnter sudo password: '
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.tput
. Aber ich habe diese Frage gestellt und vermutet, dass jemand einen einfacheren Weg hat. Vielen Dank.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 deinerPS1
.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.quelle