Wie schreibe ich eine Ja-Antwort für die Installation von Programmen?

112

Ich arbeite mit Amazon Linux-Instanzen und habe ein paar Skripte, um Daten zu füllen und alle Programme zu installieren, mit denen ich arbeite, aber einige der Programme fragen:

Do you want to continue [Y/n]?

und unterbrechen Sie die Installation. Ich möchte in allen Fällen automatisch mit "Y" antworten. Ich bin mir gerade sicher, wie es geht.

user974887
quelle
3
Der Paketmanager verfügt möglicherweise über ein --nopromptoder --noconfirmFlag, das Sie verwenden können.
Blender

Antworten:

208

Der Befehl 'yes' gibt auf unbestimmte Zeit 'y' (oder was auch immer Sie verlangen) wieder. Verwenden Sie es als:

yes | command-that-asks-for-input

oder wenn ein Großbuchstabe 'Y' erforderlich ist:

yes Y | command-that-asks-for-input
PT
quelle
funktioniert dies nur mit einem Befehl, der unterstützt wird, um Eingaben von yes zu verwenden, nicht wahr? Ich habe es mit einem Blick von OpenStack versucht und das funktioniert nicht. Ich denke, Expect ist unter allen Umständen genauer
HVNSweeting
1
//, Was ist, wenn Sie das vollständige Wort "Ja" eingeben müssen?
Nathan Basanese
1
Seien Sie vorsichtig, yesda bekannt ist, dass die CPU maximal ist. stackoverflow.com/a/18164007/720665
David Salamon
Nett. Das hat mir das Leben wesentlich erleichtert. : D. Auch -ynach Bash-Skripten zu googeln war hart.
Nathan Smith
1
@DavidSalamon das ist nur der Fall, wenn es auf etwas ohne Grenzen schreibt, wie /dev/nulloder STDOUT. An einen Befehl weitergeleitet, schreibt er jedes Mal, wenn der empfangende Befehl eine liest, nur eine Zeile in die Leitung und wartet andernfalls.
Walf
68

echo y | command sollte arbeiten.

Einige Installer haben auch ein "Auto-Ja" -Flag. Es ist -yfür apt-getunter Ubuntu.

Dennis
quelle
Ich versuche Echo "giturl no" | zu machen jspm-Registrierung Erstellen Sie den Registrierungsnamen jspm-git in meinem Shell-Skript. aber es scheitert immer wieder. beim Betreten des Giurl. Irgendeine Idee?
Manismku
Ein weiteres Beispiel: In Docker-Compose gibt es -f( --force) Flag, das als "Auto-Ja" für Befehle funktioniert, die etwas entfernen
Luke
Wie "Echo Y" rekursiv, wenn die Eingabeaufforderung mehr als einmal nach einer Bestätigung fragt?
Safak Ozkan
18

Möglicherweise können Sie Expect nicht auf dem Zielserver installieren. Dies ist häufig der Fall, wenn man beispielsweise einen Jenkins-Job schreibt.

Wenn ja, würde ich so etwas wie die Antwort auf Folgendes auf askubuntu.com in Betracht ziehen:

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

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

Beachten Sie, dass der Benutzer in einigen seltenen Fällen nicht nach dem Zeichen die Eingabetaste drücken muss. In diesem Fall lassen Sie die Zeilenumbrüche weg:

printf 'yyy' | ./script_that_needs_user_input

Der Vollständigkeit halber können Sie hier auch ein Dokument verwenden:

./script_that_needs_user_input << EOF
y
y
y
EOF

Oder wenn Ihre Shell es hier unterstützt:

./script <<< "y
y
y
"

Oder Sie können eine Datei mit einer Eingabe pro Zeile erstellen:

./script < inputfile

Wiederum geht der gesamte Kredit für diese Antwort an den Autor der Antwort auf askubuntu.com , lesmana.

Nathan Basanese
quelle
//, Bitte stimmen Sie dem askubuntu.com-Benutzer @lesmana zu, wenn Ihnen diese Antwort gefällt.
Nathan Basanese
6

Obwohl dies komplizierter / schwerer sein kann als Sie möchten, besteht eine sehr flexible Möglichkeit darin, etwas wie Expect (oder eine der Ableitungen in einer anderen Programmiersprache) zu verwenden.

Expect ist eine Sprache, die speziell für die Steuerung textbasierter Anwendungen entwickelt wurde. Genau das möchten Sie tun. Wenn Sie am Ende etwas Komplizierteres tun müssen (wie bei der Logik, um tatsächlich zu entscheiden, was als nächstes zu tun / zu beantworten ist), ist Expect der richtige Weg.

Adam Batkin
quelle
6

Sie müssen nur -yden Installationsbefehl eingeben.

Beispielsweise: yum install <package_to_install> -y

Rohan Seth
quelle
3

Wenn Sie nur Standardeinstellungen akzeptieren möchten, können Sie Folgendes verwenden:

\n | ./shell_being_run
Warhansen
quelle
//, Wie bedeutet das, dass Sie Standardeinstellungen akzeptieren würden?
Nathan Basanese
2
In bash, shund die meisten System, das ich weiß, müssen Sie echodas \nsonst wäre es nicht auf den nächsten Befehl sein verrohrt.
27.