如何从bash脚本中的语句输入?

时间:2019-10-29 01:27:42

标签: bash input

我有以下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

我该如何解决?

2 个答案:

答案 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