GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Immettere automaticamente l'input nella riga di comando?

Sto eseguendo uno script che richiede di inserire 'y' su ogni operazione, sto cercando una soluzione come $ ./script < echo 'yyyyyyyyyyyyyy' per passare tutti i miei input in una volta.

Migliore risposta

C'è un comando creato appositamente per quel caso:yes

$ yes | ./script

Ciò che fa è collegare l'output di yes all'input di ./script . Quindi quando ./script richiede l'input dell'utente riceverà invece l'output di yes . L'output di yes è un flusso infinito di y seguito da una nuova riga. Quindi praticamente come se l'utente stesse inserendo y per ogni domanda di ./script .

Se vuoi dire di no (n ) invece di sì (y ) puoi farlo in questo modo:

$ yes n | ./script

Nota che alcuni strumenti hanno un'opzione per assumere sempre yes come risposta. Vedi qui per esempio:ignora il prompt sì/no in 'apt-get upgrade'

Altri metodi per inserire l'input:

Se sai esattamente quanti y il tuo script si aspetta che tu possa farlo in questo modo:

$ printf 'ynynyn' | ./script

Le nuove righe (n ) sono i tasti di invio.

Usando printf invece di yes hai un controllo più dettagliato dell'input:

$ printf 'yesnnonmayben' | ./script

Si noti che in alcuni rari casi il comando non richiede all'utente di premere Invio dopo il carattere. in tal caso lascia fuori le nuove righe:

$ printf 'yyy' | ./script

Per completezza puoi anche usare un documento qui:

$ ./script << EOF
y
y
y
EOF

O se la tua shell lo supporta, una stringa here:

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

Oppure puoi creare un file con un input per riga:

$ ./script < inputfile

Se il comando è sufficientemente complesso e i metodi precedenti non sono più sufficienti, puoi utilizzare attend.

Ecco un esempio di uno script di attesa super semplice:

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

Pignolo tecnico:

L'ipotetica chiamata al comando che hai fornito nella tua domanda non funziona:

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

Questo perché la grammatica della shell consente un operatore di reindirizzamento in qualsiasi punto della riga di comando. Per quanto riguarda la shell, la tua ipotetica riga di comando è la stessa di questa riga:

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

Ciò significa ./script verrà chiamato con l'argomento 'yyyyyyyyyyyyyy' e lo stdin riceverà input da un file chiamato echo . E bash si lamenta poiché il file non esiste.

Correlati:come eseguire il debug della sospensione in Ubuntu?
Ubuntu
  1. Richiamare un componente aggiuntivo di Firefox utilizzando un comando?

  2. Accesso agli appunti della riga di comando?

  3. Script Bash - Come leggere l'input dell'utente

  4. Cosa fa la riga '!/bin/sh -e'?

  5. ./configure :/bin/sh^M :pessimo interprete

Trova la posizione geografica del server Ubuntu tramite la riga di comando

Lettori audio a riga di comando?

Trova la riga di comando?

Opzioni della riga di comando di Thunar?

matlab esegue lo script dalla riga di comando linux

l'uso di < /dev/null &nella riga di comando