Qual é o equivalente do bash do comando de pausa do DOS?

13

Preciso de uma pausa em um script de shell para mostrar um aviso antes de continuar. Por exemplo, no DOS, é assim:

doit.bat:

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

Como posso fazer isso no bash? No momento, um comando de suspensão parece fazer o truque e é bastante simples, mas não é exatamente a idéia:

doit.sh

[...]
echo 'Are you sure? Press Ctrl-C to abort.'
sleep 3
[...]
th3pr0ph3t
fonte
Possível duplicata de Qual é o equivalente do Linux à pausa do DOS?
MiFreidgeim pare de ser mau

Respostas:

10

algo ao longo das linhas de

echo -n "prompt"  #'-n' means do not add \n to end of string
read              # No arg means dump next line of input
Huckle
fonte
14
No Bash, isso pode ser reduzido para read -p "prompt". Mais detalhes sobre os built-ins do shell podem ser recuperados com o helpcomando, por exemplo help read.
Lekensteyn
@Lekensteyn - Isso sem uma nova linha no final.
Matt H
@MattH Assim como echo -ne printf. Se você pressionar Enter, receberá uma nova linha.
precisa saber é o seguinte
isso não funcionar para o Ubuntu 12.04 - leitura requer argumenst
ses
@ses No 12.04.4, bashnão é necessário que a leitura tenha um argumento. O uso sh(que geralmente é chamado bashno shmodo compatível) readrequer um argumento. Se você iniciar seu script #!/bin/sh, verá o último comportamento
Huckle 15/05
2

read -p "Press any key to continue or CTRL-C to abort"funciona bem sob 14.04 nos meus scripts. Como @Lekensteyn afirmou no comentário acima, parece que esse tem sido o caso desde 12.04.4. A página 'ajuda de leitura' indica:

-p prompt   output the string PROMPT without a trailing newline before
            attempting to read
Elder Geek
fonte
1

Meu uso favorito disso é definir um tempo limite padrão, para que o script também possa executar autônomo:

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

Onde:

  • -n1 diz à leitura para aceitar qualquer caractere único
  • -t5 manda esperar no máximo 5 segundos pela entrada

Eu trabalho quase exclusivamente com o Bash no CentOS, então não posso garantir isso em outras variantes do Linux, mas como é o Bash, espero que funcione. Eu adoraria saber com certeza se isso acontece! :)

John Landells
fonte
0

A simples espera para interromper o script é chamar a kill -STOP $$partir do script: Após uma pausa, o script continuará seu trabalho após receber o sinal -CONT.

#!/bin/bash
echo "$0 stopping now"
kill -STOP $$
echo "$0 continues its work"
ptwolny
fonte
Como alguém envia o CONTsinal para o 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"

coloque essas 3 linhas em um arquivo .sh e execute-o

Então Enok
fonte
1
-1 O que isso deve fazer e por quê? Por que a saída do último echocomando não apareceu e o que isso tem a ver com a velocidade do computador?
David Foerster