我有以下bash脚本,另存为script.sh
:
echo "Do that? [Y,n]"
read input
if [[ $input == "Y" || $input == "y" ]]; then
echo "do that"
else
echo "don't do that"
fi
在终端上,我想在一行中将脚本和输入一起运行。我尝试过
./trial.sh < y
但是,我收到以下输出
bash: y: No such file or directory
我该如何解决?
答案 0 :(得分:2)
使用<
的重定向需要一个文件名来读取标准输入。你可以
使用此处文档:
./trial.sh <<'EOF'
y
EOF
使用此处字符串:
./trial.sh <<< y
打印y
并使用管道将其发送到标准输入:
printf 'y' | ./trial.sh
或使用yes
工具,其功能完全相同:
yes | ./trial.sh
yes
也可以发送其他字符串:yes n
打印n
而不是y
。
旁注:您的脚本可以缩短为
read -rp "Do that? [Y,n] " input
if [[ $input == [Yy] ]]; then
echo "do that"
else
echo "don't do that"
fi
答案 1 :(得分:1)
当您使用<
重定向标准输入时,命令行上的下一个标记应该是文件名-因此出现错误消息...
相反,尝试将输入字符串“ y”“插入”到您的命令中,如下所示:
echo "y" | ./script.sh