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


13

続行する前に警告を表示するには、シェルスクリプトを一時停止する必要があります。たとえば、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
[...]

回答:


10

線に沿って何か

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

14
Bashでは、これはに短縮できますread -p "prompt"。シェル組み込みの詳細は、helpコマンドで取得できますhelp read
-Lekensteyn

@Lekensteyn-末尾の改行はありませんが。
マットH

@MattHと同じようecho -nprintf。Enterキーを押すと、改行が表示されます。
-Lekensteyn

読み取りargumenst必要です-それは、12.04がUbuntuのために動作しません
SES

@ses 12.04.4ではbash、readに引数があるという要件はありません。使用するsh(多くの場合、呼び出したbashsh互換モード)はread引数が必要です。で、あなたのスクリプトを起動した場合#!/bin/sh、あなたは後者の動作が表示されます
ハックル

2

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

1

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

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

どこ:

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

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


0

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

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

どのようにCONT信号をスクリプトに送信しますか?
デビッドフォースター

-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"

これらの3行を.shファイルに配置して実行します


1
-1これは何をするもので、なぜですか?最後のechoコマンドの出力が表示されないのはなぜですか?それはコンピューターの速度と何の関係がありますか?
デビッドフォースター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.