Chcę odinstalować jakiś program za pomocą skryptu bash. Po uruchomieniu polecenia terminal pyta mnie, czy jestem pewien, że chcę go odinstalować. Więc muszę odpowiedzieć y
. Chcę to zrobić automatycznie i odpowiedzieć y
po 10 sekundach.
Zrobiłem ten przykład, ale nie działa -
#!/usr/bin
/opt/MNG/MNGVIEWHP/fe/uninstall
sleep 10
echo "y"
Dowolny pomysł? Centos 7.2
#! /bin/bash -
zamiast#!/usr/bin
uninstall
program akceptuje parametry lub skrypt konfiguracyjny, czy nie. Tak będzie łatwiejuninstall
i poczekaj, aż zakończy działanie. Potem spij 10 sekund. Then echoy\n
na stdout (który nadal jest podłączony do terminalu, nie stdin każdego programu)Odpowiedzi:
Po to
yes
jest polecenie. Wy
nieskończoność wysyła po jednym w wierszu, dzięki czemu może być przesyłany do poleceń, które zadają pytania typu tak / nie.To odpowiedzi
y
na wszystkie pytania. Aby odpowiedziećn
na wszystkie pytania, wymieniaćyes
sięyes n
. Aby uzyskać predefiniowane połączeniey
in
, możesz zastąpićyes
:Lub uruchom jako:
Jeśli potrzebujesz, aby odpowiedź nie była dostępna do czytania przed 10 sekundami, wykonaj następujące czynności:
Ale prawdopodobnie nie byłoby to konieczne, kiedy piszemy
y
na fajce, będzie tam,uninstall
aby ją przeczytać, kiedy tylko zechce ją przeczytać, jest mało prawdopodobne, że będziesz musiał poczekać, aż będzie gotowy do przeczytania. Wyjątkiem jest sytuacja, gdyuninstall
zdecyduje się wyczyścić dane wejściowe przed zadaniem pytania.Wszyscy zakładają, że
uninstall
polecenie po prostu odczytuje każdą odpowiedź jako jeden wiersz danych wejściowych ze standardowego wejścia.W przypadku bardziej złożonych przypadkach, gdy komenda czyta odpowiedź bezpośrednio z urządzenia tty lub gdzie trzeba odpowiedziach paszowych warunkowo (na przykład na podstawie tego co wyjść poleceń), to gdzie chcesz używać rzeczy jak
expect
lubzsh
„szpty
.Zwróć uwagę, że wiele programów interaktywnych może przejść w tryb nieinteraktywny po przekazaniu opcji. Możesz najpierw sprawdzić ich instrukcję, zanim włożysz zbyt dużo wysiłku w obejście problemu.
źródło
echo "y"
każdym razem, piszemyy<newline>
, symulując naciśnięcie,y
a następnie Enter. Jeśli chcesz zasymulować naciśnięcie klawisza Enter sam, karmiłoby to pustą linię, więcprintf '%s\n' y n '' 2 3
(gdzie''
jest pusta linia).