2008-12-30 11 views
11

Mam skrypt, który wywołuje aplikację wymagającą wprowadzenia danych przez użytkownika, np. uruchom aplikację, która wymaga od użytkownika wpisania "Y" lub "N".
W jaki sposób można uzyskać, aby skrypt powłoki nie pytał użytkownika o dane wejściowe, ale raczej używał wartości ze wstępnie zdefiniowanej zmiennej w skrypcie?Dane wejściowe z poziomu skryptu powłoki

W moim przypadku będą dwa pytania wymagające wkładu.

Odpowiedz

14

Możesz potokować dowolny tekst na stdin i będzie taki sam, jak sam użytkownik. Dla przykładu do symulowania typowania „Y” po prostu używać:

echo "Y" | myapp 

lub z zastosowaniem zmiennej powłoki:

echo $ANSWER | myapp 

Istnieje także polecenia UNIX zwane „Tak”, który wysyła ciągły strumień „Y” dla aplikacji, które zadają wiele pytań, na które chcesz odpowiedzieć twierdząco.

+0

Echo jest tym, czego potrzebuję, ale z wieloma parametrami ... –

+3

W takim przypadku spróbuj użyć polecenia "printf" zamiast echa i dodaj znaki nowej linii do łańcucha. Więc jeśli chcesz odpowiedzieć "Y", to użyj "N": printf "Y \ nN \ n" | myapp –

2

Polecenie oczekiwać w bardziej skomplikowanych sytuacjach, system powinien go mieć. Nie używałem go zbyt wiele, ale podejrzewam, że to, czego szukasz.

$ man expect 

http://oreilly.com/catalog/expect/chapter/ch03.html

+0

Wygląda na to, że nie "oczekujesz" tutaj - działa na HPUX11 –

+0

Zainstaluj go. Oczekiwanie jest nieocenionym narzędziem. – PEZ

2

Jeśli aplikacja odczytuje ze standardowego wejścia (w odróżnieniu od/dev/tty, jak na przykład program passwd robi), a następnie wejście wielowierszowego jest idealnym kandydatem na tu-dokumentu.

#!/bin/sh 

the_app [app options here] <<EOF 
Yes 
No 
Maybe 
Do it with $SHELL 
Quit 
EOF 

Jak widać, dokumenty tutaj pozwalają nawet na zamianę parametrów. Jeśli nie chcesz tego, użyj <<'EOF'.

+1

Awans do rozwiązania wielowierszowego – Pankrates

0

wolę ten sposób: Jeśli chcesz wiele wejść ... można umieścić w wielu instrukcji echo jak tak:

{ echo Y; Y; } | sh install.sh >> install.out 

W powyższym przykładzie ... ja karmię dwa wejścia do install.sh scenariusz. Następnie ... na końcu wysyłam plik wyjściowy skryptu do pliku dziennika, aby go zarchiwizować i obejrzeć na później.

Powiązane problemy