GNU/Linux >> Znalost Linux >  >> Ubuntu

Automaticky zadávat vstup do příkazového řádku?

Spouštím skript, který vyžaduje zadání „y“ při každé operaci, hledám řešení jako $ ./script < echo 'yyyyyyyyyyyyyy' předat všechny své vstupy najednou.

Nejlepší odpověď

Existuje příkaz vytvořený speciálně pro tento případ:yes

$ yes | ./script

Tím se připojí výstup yes na vstup ./script . Takže když ./script požádá o vstup uživatele, místo toho dostane výstup yes . Výstup yes je nekonečný proud y následuje nový řádek. Takže v podstatě jako by uživatel zadával y pro každou otázku ./script .

Pokud chcete říct ne (n ) místo yes (y ) můžete to udělat takto:

$ yes n | ./script

Všimněte si, že některé nástroje mají možnost vždy předpokládat yes jako odpověď. Viz například zde:Vynechejte výzvu ano/ne v ‘apt-get upgrade’

Další způsoby zadávání vstupu:

Pokud přesně víte, kolik y váš skript očekává, že to můžete udělat takto:

$ printf 'ynynyn' | ./script

Nové řádky (n ) jsou klávesy Enter.

Pomocí printf místo yes máte jemnější ovládání vstupu:

$ printf 'yesnnonmayben' | ./script

V některých vzácných případech příkaz nevyžaduje, aby uživatel po znaku stiskl klávesu Enter. v tom případě vynechejte nové řádky:

$ printf 'yyy' | ./script

Pro úplnost můžete také použít dokument zde:

$ ./script << EOF
y
y
y
EOF

Nebo pokud to váš shell podporuje, řetězec zde:

$ ./script <<< "y
y
y
"

Nebo můžete vytvořit soubor s jedním vstupem na řádek:

$ ./script < inputfile

Pokud je příkaz dostatečně složitý a výše uvedené metody již nestačí, můžete použít očekávat.

Zde je příklad super jednoduchého očekávaného skriptu:

spawn ./script
expect "are you sure?"
send "yesr"
expect "are you really sure?"
send "YES!r"
expect eof

Technický hnidopich:

Hypotetické vyvolání příkazu, které jste uvedli ve své otázce, nefunguje:

$ ./script < echo 'yyyyyyyyyyyyyy'
bash: echo: No such file or directory

Je to proto, že gramatika shellu umožňuje operátor přesměrování kdekoli v příkazovém řádku. Pokud jde o shell, váš hypotetický příkazový řádek je stejný jako tento řádek:

$ ./script 'yyyyyyyyyyyyyy' < echo
bash: echo: No such file or directory

To znamená ./script bude voláno s argumentem 'yyyyyyyyyyyyyy' a stdin dostane vstup ze souboru s názvem echo . A bash si stěžuje, protože soubor neexistuje.

Související:Jak ladit pozastavení v Ubuntu?
Ubuntu
  1. Bash Script - Jak číst uživatelský vstup

  2. 6 Očekávejte příklady argumentů příkazového řádku skriptu

  3. Co dělá řádek '!/bin/sh -e'?

  1. ./configure :/bin/sh^M :špatný interpret

  2. matlab spustí skript z příkazové řádky linuxu

  3. Kdy mám použít /dev/shm/ a kdy /tmp/?

  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. Jak předat argument příkazového řádku do skriptu Shell?

  3. použití < /dev/null &v příkazovém řádku