Qual è l'equivalente bash del comando pause di DOS?


13

Ho bisogno di una pausa su uno script della shell per mostrare un avviso prima di continuare. Ad esempio, su DOS va così:

doit.bat:

[...]
echo 'Are you sure? Press Ctrl-C to abort, enter to continue.'
pause
[...]

Come posso farlo su bash? Per il momento un comando di sospensione sembra fare il trucco ed è abbastanza semplice ma non è esattamente l'idea:

doit.sh

[...]
echo 'Are you sure? Press Ctrl-C to abort.'
sleep 3
[...]

Risposte:


10

qualcosa sulla falsariga di

echo -n "prompt"  #'-n' means do not add \n to end of string
read              # No arg means dump next line of input

14
In Bash, questo può essere abbreviato in read -p "prompt". Maggiori dettagli sugli incorporati della shell possono essere recuperati con il helpcomando, ad es help read.
Lekensteyn,

@Lekensteyn - Questo è senza una nuova riga finale però.
Matt H

@MattH Proprio come echo -ne printf. Se premi Invio, otterrai una nuova riga.
Lekensteyn,

che non funziona per Ubuntu 12.04 - leggi richiede argumenst
ses

@ses Su 12.04.4 utilizzando bashnon è necessario che read abbia un argomento. L'uso sh(che spesso invoca bashin shmodalità compatibile) readrichiede un argomento. Se inizi la tua sceneggiatura #!/bin/shvedrai quest'ultimo comportamento
Huckle,

2

read -p "Press any key to continue or CTRL-C to abort"funziona bene sotto 14.04 nei miei script. Come ha affermato @Lekensteyn nel commento sopra, sembra che sia stato così dal 12.04.4. La pagina 'help read' afferma:

-p prompt   output the string PROMPT without a trailing newline before
            attempting to read

1

Il mio uso preferito di questo è di impostare un timeout predefinito, in modo che lo script possa anche essere eseguito incustodito:

echo "Press any key to continue..."
read -n1 -t5 any_key

dove:

  • -n1 dice alla lettura di accettare qualsiasi singolo carattere
  • -t5 gli dice di attendere un massimo di 5 secondi per l'input

Lavoro quasi esclusivamente con Bash in CentOS, quindi non posso garantire che funzioni su altre varianti di Linux, ma dal momento che è Bash, mi aspetto che funzioni. Mi piacerebbe sapere con certezza se lo fa! :)


0

I semplici che aspettano di fermare lo script devono chiamare kill -STOP $$dallo script: dopo aver messo in pausa lo script continuerà a funzionare dopo aver ricevuto il segnale -CONT.

#!/bin/bash
echo "$0 stopping now"
kill -STOP $$
echo "$0 continues its work"

Come si invia il CONTsegnale allo script?
David Foerster,

-2
echo "press enter to continue"
read unusedVariable
echo "running these 3 lines in .sh file, this echo will never be seen, unless you have a really slow computer"

posizionare queste 3 righe in un file .sh ed eseguirlo


1
-1 Cosa dovrebbe fare questo e perché? Perché l'output dell'ultimo echocomando non viene visualizzato e cosa ha a che fare con la velocità del computer?
David Foerster,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.