Chciałbym zakodować niektóre wejścia do mojego polecenia skryptu bash. Na przykład mam taki skrypt bash:
#! /bin/bash
apt-get install python
i chciałbym zatrzeć kod y
i enter
jako dane wejściowe dla apt-get
polecenie w tym skrypcie bash, ponieważ czasami użytkownik może poprosić o potwierdzenie miejsca instalacji. Wiem, że mogę to zrobić
apt-get install python <<< "y"
przekazać wejście ciągowe y
, ale czy mogę również wprowadzić specjalny format, taki jak nowa linia „n”, używając tej metody? Dzięki!
Odpowiedzi:
2 dla odpowiedzi № 1Wszystkie tutaj automatycznie kończone są przeznowa linia, więc to może nie robić tego, co chcesz. (Wiele programów sprawdza, czy ich dane wejściowe pochodzą z TTY, i zmienia, czy i jak podpowiadają wynik, inni czytają podpowiedzi, które mają pochodzić od użytkownika bezpośrednio z TTY, a więc całkowicie omijać zawartość piped, heredocs i ciągi znaków.
To powiedziawszy, za dosłowną odpowiedź na pytanie:
apt-get install python <<<$"yn"
Możesz także użyć heredoc:
apt-get install python <<EOF
y
EOF
To powiedziawszy dla konkretnego przypadku apt-get
, nie rób tego!
apt-get install -y python
... jest rzeczywiście najlepszą praktyką. (W przypadku poleceń do administrowania systemem generalnie ich twórcy przewidują użycie wsadowe lub automatyczne, więc wprowadzanie danych przez użytkowników końcowych jest rzadko wymagane - zajrzyj do dokumentacji każdego programu pod kątem argumentów, takich jak --batch
, --force
, --always
lub --yes
; zmienne środowiskowe, które określają elementy, dla których w przeciwnym razie zostanie wyświetlony monit; lub zachowania aktywowane przez brak sttyfikacji.
2 dla odpowiedzi nr 2
apt-get -y install python
jest właściwy sposób. Zgodnie z podręcznikiem:
-y, --yes, - zużyj-tak
Automatyczne tak dla monitów; Przyjmij „tak” jako odpowiedźdo wszystkich podpowiedzi i uruchom nieinteraktywnie. Jeśli jest to niepożądana sytuacja, na przykład zmiana wstrzymanego pakietu, próba zainstalowania nieuwierzytelnionego pakietu lub usunięcie niezbędny pakiet pojawia się wtedy, gdy apt-get przerwie działanie. Element konfiguracji: APT :: Get :: Assume-Yes.