Przygotuj odpowiedzi na pytania polecenia

14

Powiedzmy, że chcę napisać skrypt powłoki, który wykonuje tylko jedno polecenie. Ale to polecenie jest źle zaprojektowane. Nie oferuje żadnych opcji wiersza poleceń; zamiast tego zadaje pytania i czeka na dane wejściowe użytkownika.

Czy istnieje sposób na przygotowanie tego wkładu w skrypcie, więc odpowiedzi na pytania są udzielane automatycznie?

Tmuecksch
źródło

Odpowiedzi:

16

Jeśli polecenie nie jest zbyt wybredne, powinno działać z czymś takim:

command > /dev/null << EOF
<answer 1>
<answer 2>
<answer 3>
EOF

Wymaga to wcześniejszej znajomości dokładnych odpowiedzi.

Bjorn Munch
źródło
Powyższej odpowiedzi można użyć do zaprojektowania skryptu opakowywania. Nowy skrypt powinien nasłuchiwać parametrów i wywoływać starą komendę przy użyciu powyższej metody.
Walter A
Znany również jako dokument TUTAJ, aby uzyskać więcej informacji, możesz spróbować tutaj Wikipedia definicja dokumentu
OldTimer
15

Spodziewaj się, że to zrobi. Ze strony internetowej Expect :

Expect to narzędzie do automatyzacji interaktywnych aplikacji, takich jak telnet, ftp, passwd, fsck, rlogin, tip itp. Expect naprawdę sprawia, że ​​te rzeczy są trywialne. Spodziewaj się również przydatny do testowania tych samych aplikacji [...] ”

Pochodzi z dużą pomocą, taką jak autoekspozycja .

Znów ze strony internetowej Expect

autoexpect obserwuje interakcje z innym programem i tworzy skrypt Expect, który odtwarza twoje interakcje. W przypadku skryptów prostych autoexpect pozwala zaoszczędzić sporo czasu na pisaniu skryptów ręcznie.

Krzysztof
źródło
Dziękuję za Twoją odpowiedź. Ponieważ moje potrzeby są bardzo niskie, w moim przypadku Oczekiwanie to przesada. Odpowiedź Bjornsa idealnie odpowiada moim potrzebom. Proponuję jednak zachować odpowiedź dla innych, którzy potrzebują bardziej złożonego rozwiązania.
tmuecksch
+1, ponieważ nie wiedziałem, że istnieje automatyczne oczekiwanie i doszedłem do wniosku, że krzywa uczenia się jest zbyt stroma, żebym się tym przejmował. Spojrzę jeszcze raz.
Joe
7

Jeśli skrypt oczekuje na odpowiedź na jedno pytanie lub na kilka pytań, w których możesz udzielić tej samej odpowiedzi, to yes:

NAME
       yes - output a string repeatedly until killed

SYNOPSIS
       yes [STRING]...
       yes OPTION

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or `y'.

Użyj tego w ten sposób:

yes Me | give_a_hug.sh
unperson325680
źródło
3
Powszechnym, choć ironicznym zastosowaniem jest yes nna przykład:yes n | mv -i * somewhere/
Sam Watkins