web-dev-qa-db-ja.com

DOSのpauseコマンドに相当するbashとは何ですか?

続行する前に警告を表示するには、シェルスクリプトを一時停止する必要があります。たとえば、DOSでは次のようになります。

doit.bat:

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

Bashでこれを行うにはどうすればよいですか?現時点では、スリープコマンドはトリックを実行するように思われ、十分に単純ですが、正確なアイデアではありません。

doit.sh

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

線に沿って何か

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

read -p "Press any key to continue or CTRL-C to abort"は、スクリプトの14.04で正常に動作します。 @Lekensteynが上記のコメントで述べたように、これは12.04.4以降のケースであるようです。 「ヘルプを読む」ページの状態:

-p Prompt   output the string Prompt without a trailing newline before
            attempting to read
2
Elder Geek

私のお気に入りの使用法は、デフォルトのタイムアウトを設定することです。これにより、スクリプトを無人で実行することもできます。

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

どこ:

  • -n1は、任意の1文字を受け入れるように読み取りに指示します
  • -t5は、入力を最大5秒待つように指示します

私はCentOSでBashとほぼ独占的に仕事をしているので、他のLinuxバリアントでのこの仕事を保証することはできませんが、Bashなので、うまくいくと思います。もしそうなら確実に知りたい! :)

1
John Landells

スクリプトを停止するための単純な待機は、スクリプトからkill -STOP $$を呼び出すことです。一時停止後、スクリプトは-CONTシグナルを受信した後、作業を​​続行します。

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