Linux BashでWinCMDスタイルを一時停止する正式な方法は何ですか?

Linux BashでWinCMDスタイルを一時停止する正式な方法は何ですか?

存在するWindowsバッチ/ CMD - 使用可能なスクリプトの実行を一時停止します。

echo 'This is before pause.'
pause
echo 'The key was pressed, continuing...'

bashこのような標準端末を使用してzshこれを達成するにはどうすればよいですか(ただし、他の端末もできるだけ機能する必要があります)。もちろん簡単なアプリを書くこともできますが、私が探しているC標準的な方法がないとは思いません。sleep

私は以下を使用してこれらの簡単な方法を見つけました。読む:

  • read -p 'Press [Enter] key to start backup...'
  • read -p 'Press any key to resume ...'
  • read -s -n 1 -p 'Press any key to continue . . .' 関数の内部

しかし、彼らは私にそれぞれXXX.sh: 4: read: arg count最初の23: read: Illegal option -nつを与えました。私はbashを使用しています4.4.19(1)-release

答え1

readコマンドが機能しない主な理由は、bashコマンドが意図されていますがsh

これ引用記事説明する、

Unixシリーズオペレーティングシステムでは、シェルreadに組み込まれているコマンドです。bash

これは、使用中のシェルを含む他の多くのシェルにも組み込まれたコマンドですが、shinの構文ははるかに豊富です。readsh

#!/bin/bash
...
read -p 'Press [Enter] key to continue: '
...

ファイルを実行可能にし、プログラムで実行することを忘れないでください。

# Assume the script is called "demo"
chmod a+x demo
./demo

答え2

簡単に言えば、シングルキーを押すのを待つ簡単な方法はありません。Enterユーザーが行を入力するのを待つ簡単な方法があるため、ユーザーに押すように求める方が簡単です。

組み込みreadコマンドは1行を読み込みます。その行を使用する予定がない場合でも、その行の内容を保存するには変数名を指定する必要があります。

echo 'Press Enter to continue.'
read -r line
echo 'Continuing.'

#!/usr/bin/env bashスクリプトがまたは同等のもので始まる場合は、#!/usr/bin/env zshシングルreadキーを押すのを待つようにする追加のオプションがあります。どのキーが「すべてのキー」と見なされ、どのキーがそうでないかをユーザーに教えることは苦労する価値がないと思います。

Unixシリーズでは、端末なしで無人でスクリプトを実行するのが一般的です。一般的なサーバーには、ほとんどの場合、コンソールにログインした人はいません。そのため、ユーザーに確認を求める場合は非常にまれです。

答え3

read_a_key() (
  exec </dev/tty
  t=$(stty -g)
  trap 'stty "$t"; return' EXIT INT QUIT TERM 
  stty raw -echo isig
  dd count=1 2>/dev/null
)

printf '%s ' 'Press ANY KEY to continue ... '
key=$(read_a_key)
echo OK, continuing

read_a_key >/dev/nullユーザーがどのキーを押したか気にしないように使用してください。

これは、次のコマンドにfalseまたは文字を残すF1bashとは異なり、複数の文字(たとえば)に変換されるキーにも機能します;-)read -n1OP[[A

答え4

あなたは正しい道を行っています:

read -p 'press Enter ...'

しかし、arg_countエラーが発生した場合は、bash以外のシェルを使用しています。修正:次のパラメータを追加するだけです。

read -p 'press Enter ...' x

これでシェルで実行する必要があります。追加のパラメータはダミー名またはユーザーの回答を保存するために使用できます。例:

echo You answered: $x

関連情報