2013-04-01 6 views
11

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 

スクリプトは、このようなものですターミナルに)それは正常に動作します。 Enterキーが押されるのを待ちます(一時停止のように)。

答えて

14

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

readに存在することが保証される機能のリストについては、the relevant standards documentを参照してください。

この場合、あなたはおそらく2行、印刷を行うものをしたいと思いますし、他の読み取りを行う:

printf 'press [ENTER] to continue deleting...' 
read _ 
+0

私はチェックして、$ SHELLはbashでした。 so/bin/shはbashを起動します。私が間違っている? –

+1

@mohammadhmontazeri '/ bin/sh'は、' $ SHELL'ではなく、 '/ bin/sh'のシェルを起動します。さらに、 '/ bin/sh'が('/bin/sh 'が 'bash'へのシンボリックリンクである場合)' bash 'を開始すると、多くの機能が無効になります。 –

+1

@mohammadhmontazeri詳細については、http://mywiki.wooledge.org/BashGuide/Practices#Choose_Your_Shellを参照してください。 –

0

あなたはechoコマンドであまりにも!:

echo "press [ENTER] to continue deleting line" 
    read continue 
これを行うことができます
+0

あなたのシェルが 'sh'の場合、これは実際に問題を解決しません。 Dashでは、変数の名前なしで 'read'を呼び出すことはできません。 – tripleee

+0

'echo'を使って(オプションの機能シェルである' -n'をサポートしていない限り)、この方法では余分な改行がありますが、これは元の 'read -p 'コード。 –

-1
read -p " Ici mon texte " continue 

これはraspbianで動作します

+0

全く役に立たない。 – Dagrooms

関連する問題