2011-10-20 161 views
1

我正在編寫一個shell腳本,要求輸入值並根據輸入的值返回一個值。想象一下,這就是所謂的「REVE」,幷包含類似命令替換bash腳本中的交互式命令

read fname 
rev << EOF 
$fname 
EOF 

那麼,如果我有一個名爲「file.txt的」文件和我做

vi `./reve` 

然後等待用戶輸入。如果我輸入「txt.elif」vi打開「file.txt」。正確到現在。但問題是,當腳本是像下面

echo "Enter inverted file name" 
read fname 
rev << EOF 
$fname 
EOF 

,然後嘗試打開一個名爲「倒輸入文件名」的文件。

是否有可能要求與文本的值,然後才使用返回的值?

在此先感謝。

回答

3

如果你真的需要它是互動的,那麼你可以在標準錯誤打印的消息代替。

echo "Enter inverted file name" > /dev/stderr 
read fname 
rev << EOF 
$fname 
EOF 
1

除非您使用的是真正的老貝,read應該有一個-p選項提供一個提示。它自動發送提示到stderr代替stdout和跳過換行(所以響應是在同一行作爲提示):

read -p "Enter inverted file name: " fname 
rev << EOF 
$fname 
EOF 
1

力寫入,並且使用從/dev/tty,終端讀取。

在您的例子,這將是:

echo -e "Enter inverted file name: \c" > /dev/tty 
read fname < /dev/tty 
rev << EOF 
$fname 
EOF 

我用echo -e ... \c所以沒有換行打印和您的輸入被輸入在同一條線上。