向使用“read”而不是 $# 的 bash 脚本提供参数

向使用“read”而不是 $# 的 bash 脚本提供参数

系统管理员为我提供了一个 bash 脚本,要求我输入三个值。这些值是使用“read”读取的,而不是直接从命令行读取。

echo "Enter value:"
read myValue
echo "Enter value 2:"
read myOtherValue

我要输入的三个值是可预测的,并且我需要频繁运行这个脚本,所以我想使其自动运行;但是,仅在命令行中使用参数执行脚本不起作用。

./script.sh myValue myOtherValue

如果我回显它然后将其通过管道传输到脚本,我可以提供第一个值,但这仅适用于第一个参数。我不知道如何以这种方式传递其余的值。

echo "myValue" | ./script.sh

我没有权限修改脚本而只是读取参数。

有任何想法吗?

答案1

如果您确实无法将此脚本复制到您的主文件夹并进行修改以满足您的需要,您应该研究一下 expect。Expect 可以自动读取/写入程序的 stdin/stdout。

本指南看起来不错: http://www.ftlinuxcourse.com/FTLinuxCourse_Complete-2004/FTLinuxCourse/en/sysadm/chap5_3.html

答案2

如果输入的数量是静态的,您可以使用此处的文档:

cat <<FIN | ./script.sh
value1
value2
FIN

答案3

echo -e "MyValue\nMyOtherValue" | ./script.sh

答案4

如同杰拉德·康布斯' 回答,您可以使用进程替换和重定向:

./script.sh < <(echo -e "myValue\nmyOtherValue")

或者

./script.sh < <(echo "myValue
myOtherValue")

或者

./script.sh < <(cat <<EOF
myValue
myOtherValue
EOF
)

甚至:

./script.sh < <(echo "myValue"; echo "myOtherValue")

其中,您可能有两个不同的命令来产生输入脚本所需的输出,而不是两个“回声”。

相关内容