我正在编写一个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
然后它尝试打开一个名为“输入反向文件名”的文件。
是否可以通过文本询问值,之后只使用返回的值?
提前致谢。
答案 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
,因此不会打印换行符,并且您的输入也会输入到同一行。