Apa setara dengan bash dari perintah jeda DOS?


13

Saya perlu jeda pada skrip shell untuk menampilkan peringatan sebelum melanjutkan. Sebagai contoh, pada DOS seperti ini:

doit.bat:

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

Bagaimana saya bisa melakukan ini di bash? Untuk saat ini perintah tidur tampaknya melakukan trik dan cukup sederhana tetapi tidak persis ide:

doit.sh

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

Jawaban:


10

sesuatu di sepanjang garis

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

14
Di Bash, ini bisa disingkat menjadi read -p "prompt". Rincian lebih lanjut tentang built-in shell dapat diambil dengan helpperintah, misalnya help read.
Lekensteyn

@Lekensteyn - Itu tanpa baris baru.
Matt H

@MattH Sama seperti echo -ndan printf. Jika Anda menekan Enter, Anda akan mendapatkan baris baru.
Lekensteyn

yang tidak berfungsi untuk ubuntu 12.04 - baca membutuhkan argumenst
ses

@ses Pada 12.04.4 menggunakan bashtidak ada persyaratan bahwa membaca memiliki argumen. Menggunakan sh(yang sering dipanggil bashdalam shmode yang kompatibel) readmembutuhkan argumen. Jika Anda memulai skrip dengan #!/bin/shAnda, Anda akan melihat perilaku yang terakhir
Huckle

2

read -p "Press any key to continue or CTRL-C to abort"berfungsi dengan baik di bawah 14,04 dalam skrip saya. Sebagai @Lekensteyn dinyatakan dalam komentar di atas tampaknya ini telah menjadi kasus sejak 12.04.4. Halaman 'help read' menyatakan:

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

1

Penggunaan favorit saya adalah mengatur batas waktu default, sehingga skrip juga dapat berjalan tanpa pengawasan:

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

dimana:

  • -n1 memberitahu baca untuk menerima karakter tunggal
  • -t5 memintanya untuk menunggu maksimal 5 detik untuk input

Saya bekerja hampir secara eksklusif dengan Bash di bawah CentOS, jadi saya tidak dapat menjamin ini bekerja pada varian Linux lainnya, tetapi karena itu Bash, saya berharap itu bekerja. Saya ingin tahu pasti jika itu terjadi! :)


0

Simples menunggu untuk menghentikan skrip adalah untuk memanggil kill -STOP $$dari skrip: Setelah jeda skrip akan melanjutkan kerjanya setelah menerima sinyal -CONT.

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

Bagaimana cara mengirim CONTsinyal ke skrip?
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"

letakkan 3 baris ini dalam file .sh dan jalankan


1
-1 Apa yang seharusnya dilakukan dan mengapa? Mengapa output dari echoperintah terakhir tidak muncul dan apa hubungannya dengan kecepatan komputer?
David Foerster
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.