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?

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.


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.


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

3
Powszechnym, choć ironicznym zastosowaniem jest yes nna przykład:yes n | mv -i * somewhere/
Sam Watkins
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.