gpt4 book ai didi

linux - 从 shell 脚本动态地为调用脚本提供默认输入

转载 作者:太空宇宙 更新时间:2023-11-04 11:01:06 24 4
gpt4 key购买 nike

我有一个 shell 脚本 main_script.sh,它将调用 3 个其他脚本(a1.sh、a2.sh、a3.sh)。现在在执行 a1.sh/a2.sh/a3.sh 时,我需要用 Y/N 回答一些冗长的问题。

我知道每个 a1.sh/a2.sh/a3.sh 都需要 2 Y/N。

如何实现 main_script.sh,以便在执行时不必回答 Y/N 请求?

最佳答案

这取决于脚本的编写方式。您提到每个脚本需要两个 Y。我假设每个 Y 后面都需要一个回车键(换行符)。在这种情况下,它可以像对 main_script.sh 使用以下命令一样简单:

#!/bin/bash
echo $'Y\nY\n' | bash a1.sh
echo $'Y\nY\n' | bash a2.sh
echo $'Y\nY\n' | bash a3.sh

上面,echo 命令向每个脚本发送两个 Y 和换行符。您可以根据需要进行调整。

一些脚本会坚持交互输入来自终端,而不是标准输入。这样的脚本更难被愚弄,但并非不可能。对于他们,使用 expect/pexpect .

更多详情

让我们更详细地了解其中一个命令:

echo $'Y\nY\n' | bash a1.sh

| 是管道符号。它将 echo 命令的标准输出连接到 a1.sh 命令的标准输入。如果 a1.sh 是可行的,这可能允许我们预先回答 a1.sh 提出的任何和所有问题。

在这种情况下,echo 命令的输出是 $'Y\nY\n'。这是一个 bash shell 语法,意思是 Y,后跟换行符,用 \n 表示,然后是 Y,然后是换行符,\n。换行符与 enterreturn 键生成的相同。

使用期望

如果您的脚本不接受 stdin 上的输入,则 expect 可用于自动化与脚本的交互。例如:

#!/bin/sh

expect <<EOF1
spawn a1.sh
expect "?"
send "Y\r"
expect "?"
send "Y\r"
sleep 1
EOF1

expect <<EOF2
spawn a2.sh
expect "?"
send "Y\r"
expect "?"
send "Y\r"
sleep 1
EOF2

关于linux - 从 shell 脚本动态地为调用脚本提供默认输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27011343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com