Ich möchte ein Programm über ein Bash-Skript deinstallieren. Nachdem ich den Befehl ausgeführt habe, fragt mich das Terminal, ob ich sicher bin, dass ich ihn deinstallieren möchte. Also muss ich antworten y
. Ich möchte es automatisch tun und y
nach einer Verzögerung von 10 Sekunden antworten .
Ich habe dieses Beispiel gemacht, aber es funktioniert nicht -
#!/usr/bin
/opt/MNG/MNGVIEWHP/fe/uninstall
sleep 10
echo "y"
Irgendeine Idee? Centos 7.2
#! /bin/bash -
anstelle von#!/usr/bin
uninstall
Programm Parameter oder ein Konfigurationsskript akzeptiert oder nicht. Auf diese Weise wird es einfacheruninstall
und warten Sie, bis es beendet wird. Dann schlafen Sie 10 Sekunden. Dann Echoy\n
zu stdout (das immer noch mit dem Terminal verbunden ist, nicht zu stdin eines Programms)Antworten:
Dafür ist der
yes
Befehl da. Es gibty
eine pro Zeile auf unbestimmte Zeit aus, sodass es an Befehle weitergeleitet werden kann, die Ja / Nein-Fragen stellen.Das beantwortet
y
alle Fragen. Umn
alle Fragen zu beantworten , ersetzen Sieyes
durchyes n
. Für eine vordefinierte Mischung ausy
undn
können Sie ersetzenyes
durch:Oder führen Sie es aus als:
Wenn die Antwort nicht vor 10 Sekunden zum Lesen verfügbar sein muss, tun Sie Folgendes:
Aber das wäre wahrscheinlich nicht notwendig, wenn wir
y
an die Pipe schreiben , wird sie da sein, um sieuninstall
zu lesen, wann immer sie sie lesen möchte. Es ist unwahrscheinlich, dass Sie warten müssen, bis sie bereit ist, sie zu lesen. Die Ausnahme wäre, wennuninstall
entschieden wird, die Eingabe zu leeren, bevor die Frage gestellt wird.Alle diese gehen davon aus, dass der
uninstall
Befehl jede Antwort nur als eine Eingabezeile von ihrer Standardeingabe liest.Für komplexere Fälle, in denen der Befehl die Antworten direkt aus dem tty - Gerät liest oder in denen Sie bedingt Feed Antworten (zum Beispiel auf dem, was die Befehlsausgaben), das ist , wo man Dinge wie benutzen würde
expect
oderzsh
‚szpty
.Beachten Sie, dass viele interaktive Programme in einen nicht interaktiven Modus wechseln können, wenn eine Option übergeben wird. Möglicherweise möchten Sie zuerst das Handbuch überprüfen, bevor Sie sich zu sehr um das Problem kümmern.
quelle
echo "y"
schreiben wir jedes Mal,y<newline>
indem wir simulieren, dass Sie drücken,y
gefolgt von Enter. Wenn Sie simulieren möchten, dass Sie nur die Eingabetaste drücken, wird eine leere Zeile eingegebenprintf '%s\n' y n '' 2 3
(also wo''
ist die leere Zeile).