命令替换bash脚本中的交互式命令

时间:2011-10-20 21:15:49

标签: bash scripting

我正在编写一个shell脚本,要求输入一个值,并根据输入的值返回一个值。想象一下,它被称为“启示”并包含类似

的内容
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 个答案:

答案 0 :(得分:3)

如果您真的需要它是互动的,那么您可以在 stderr 上打印消息。

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

答案 1 :(得分:1)

除非您使用的是旧版shell,read应该有-p选项才能提供提示。它会自动将提示发送到stderr而不是stdout,并跳过换行符(因此响应与提示符在同一行):

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

答案 2 :(得分:1)

使用/dev/tty强制写入终端并从终端读取。

在您的示例中,这将是:

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

我使用了echo -e ... \c,因此不会打印换行符,并且您的输入也会输入到同一行。