2013-04-01 129 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/sh而非#!/bin/bash開始,你不能保證有bash的擴展名(如read -p)可用,只能在符合標準的功能依賴。

請參閱the relevant standards document以獲取保證存在於read中的功能列表。

在這種情況下,你可能會想兩條線,一個做印刷,另做讀:

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

我檢查了我的$ SHELL是bash。所以/ bin/sh會啓動bash。我錯了嗎? –

+1

@mohammadhmontazeri'/ bin/sh'啓動無論哪個shell,'/ bin/sh' - 不是你的'$ SHELL'。而且,啓動bash作爲'/ bin/sh'(在'/ bin/sh'是'bash'的符號鏈接的情況下)會禁用很多功能。 –

+1

@mohammadhmontazeri有關更多信息,請參閱http://mywiki.wooledge.org/BashGuide/Practices#Choose_Your_Shell。 –

0

你可以用echo命令太!:

echo "press [ENTER] to continue deleting line" 
    read continue 
做到這一點
+0

如果你的shell是'sh',這並不能真正解決問題,因爲例如Dash不允許你在沒有變量名稱的情況下調用'read'。 – tripleee

+0

使用'echo'(除非你有一個支持'-n',這是一個可選功能的shell不需要實現),你會得到一個額外的換行符,這與原來的'read -p '代碼。 –

-1
read -p " Ici mon texte " continue 

它適用於raspbian

+0

完全沒有幫助。 – Dagrooms