2011-10-20 146 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所以没有换行打印和您的输入被输入在同一条线上。