Jak napisać odpowiedź „tak” w przypadku instalowania programów?


114

Pracuję z instancjami Amazon Linux i mam kilka skryptów do wypełniania danych i instalowania wszystkich programów, z którymi pracuję, ale kilka programów pyta:

Do you want to continue [Y/n]?

i wstrzymaj instalację. Chcę automatycznie odpowiadać „Y” we wszystkich przypadkach, teraz jestem pewien, jak to zrobić.


3
Menedżer pakietów może mieć flagę --nopromptlub, --noconfirmktórej możesz użyć.
Blender

Odpowiedzi:


209

Polecenie „tak” będzie powtarzać „y” (lub cokolwiek o to poprosisz) w nieskończoność. Użyj go jako:

yes | command-that-asks-for-input

lub, jeśli wymagane jest wielkie „Y”:

yes Y | command-that-asks-for-input

czy to działa tylko z niektórymi poleceniami obsługującymi używanie danych wejściowych z tak, prawda? Próbowałem spojrzeć z OpenStack i to nie działa, myślę, że oczekiwanie jest bardziej precyzyjne w każdych okolicznościach
HVNSweeting

1
//, A co jeśli musisz wpisać całe słowo „tak”?
Nathan Basanese

1
Uważaj, yesponieważ wiadomo, że maksymalne wykorzystanie procesora. stackoverflow.com/a/18164007/720665
David Salamon

Miły. To właśnie znacznie ułatwiło mi życie. :RE. Również szukanie -yw Google skryptów basha było TRUDNE.
Nathan Smith

1
@DavidSalamon ma to miejsce tylko wtedy, gdy pisze do czegoś bez ograniczeń, na przykład /dev/nulllub STDOUT. Po przesłaniu potokiem do polecenia, zapisze tylko jedną linię do potoku za każdym razem, gdy polecenie odbierające odczyta jeden, i będzie czekać w przeciwnym razie.
Walf,

68

echo y | command powinno działać.

Ponadto niektóre instalatory mają flagę „auto-tak”. To -ydla apt-getUbuntu.


Próbuję wykonać echo "giturl nie" | Rejestr jspm utwórz nazwę_rejestru jspm-git w moim skrypcie powłoki. ale ciągle zawodzi. podczas wchodzenia do giurla. Dowolny pomysł?
manismku

Inny przykład: w docker-compose jest flaga -f( --force), która działa jako „auto-yes” dla poleceń, które coś usuwają
luke

Jak rekurencyjnie powtarzać „echo Y” w przypadku, gdy monit prosi o potwierdzenie więcej niż raz?
Safak Ozkan,

18

Możesz nie mieć możliwości zainstalowania programu Expect na serwerze docelowym. Dzieje się tak często, gdy pisze się, powiedzmy, pracę Jenkinsa.

Jeśli tak, rozważałbym odpowiedź na pytanie na askubuntu.com:

/ubuntu/338857/automatically-enter-input-in-command-line

printf 'y\nyes\nno\nmaybe\n' | ./script_that_needs_user_input

Zauważ, że w rzadkich przypadkach polecenie nie wymaga od użytkownika naciskania klawisza Enter po znaku. w takim przypadku zostaw znaki nowej linii:

printf 'yyy' | ./script_that_needs_user_input

W trosce o kompletność możesz również skorzystać z dokumentu tutaj:

./script_that_needs_user_input << EOF
y
y
y
EOF

Lub jeśli twoja powłoka obsługuje to ciąg znaków tutaj:

./script <<< "y
y
y
"

Lub możesz utworzyć plik z jednym wejściem w każdym wierszu:

./script < inputfile

Ponownie, cała zasługa tej odpowiedzi należy do autora odpowiedzi na askubuntu.com , lesmana.


//, Pamiętaj, aby zagłosować za użytkownikiem askubuntu.com @lesmana, jeśli podoba Ci się ta odpowiedź.
Nathan Basanese

6

Chociaż może to być bardziej skomplikowane / cięższe niż chcesz, jednym z bardzo elastycznych sposobów jest użycie czegoś takiego jak Expect (lub jednej z pochodnych w innym języku programowania).

Expect to język zaprojektowany specjalnie do sterowania aplikacjami tekstowymi, co jest dokładnie tym, czego szukasz. Jeśli w końcu będziesz musiał zrobić coś bardziej skomplikowanego (na przykład z logiką, aby faktycznie zdecydować, co zrobić / odpowiedzieć dalej), oczekiwanie jest drogą do zrobienia.


6

Wystarczy -yzainstalować za pomocą polecenia instalacji.

Na przykład: yum install <package_to_install> -y


3

Jeśli chcesz po prostu zaakceptować wartości domyślne, możesz użyć:

\n | ./shell_being_run

//, Jak to oznacza, że ​​akceptujesz wartości domyślne?
Nathan Basanese

2
W bash, sha większość z nich systemu, co wiem, trzeba by echow \nprzeciwnym razie nie byłby być odprowadzone do następnego polecenia.
2i3r
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.