web-dev-qa-db-ja.com

読み取りコマンドは入力を待機しません

Bashで簡単なスクリプトを実行するのに問題があります。スクリプトは次のようになります。

#! /bin/sh

read -p 'press  [ENTER]  to continue deleting line'
Sudo sed -ie '$d' /home/hpccuser/.profile

./scriptを使用してスクリプトを実行すると、出力は次のようになります。

press  [ENTER]  to continue deleting line./script: 3: read: arg count
[Sudo] password for user

ターミナルで直接readコマンドを実行し(スクリプトからターミナルにコピーアンドペースト)、正常に動作します。 ENTERがヒットするのを待ちます(一時停止のように)。

19

スクリプトは#!/bin/shではなく#!/bin/bashで始まるため、bash拡張機能(read -pなど)が使用できるとは限らず、標準に準拠した機能のみに依存できます。

readに存在することが保証されている機能のリストについては、 関連する標準ドキュメント を参照してください。

この場合、おそらく2行が必要になります。1つは印刷を実行し、もう1つは読み取りを実行します。

printf 'press [ENTER] to continue deleting...'
read _
22
Charles Duffy

これはechoコマンドでも実行できます!:

    echo "press  [ENTER]  to continue deleting line"
    read continue
1
Pouya

パーティーに遅れているようですが、echo -n "Your Prompt" && sed 1qPOSIX準拠のシェルでトリックを実行します。これにより、プロンプトが出力され、STDINから行が取得されます。

または、その入力を変数に展開することもできます。

echo -n "Your Prompt"
YOUR_VAR=$(sed 1q)
0
hiten