将自动输入发送到bash中另一个脚本调用的脚本

时间:2017-03-16 21:37:21

标签: linux bash

我正在研究一个bash脚本(my_script),我在其中调用了许多脚本,它们共同使工作流程自动化。

但是当我调用一个特定的(ksh / bash)脚本(master_script)时,会有许多输入和检查(而不是参数)。

它减慢了整个自动化的速度,因为每次我必须超级智能并手动输入值。

我没有选择修改或制作新脚本(工作约束)

每次问题都一样。我试图在执行master_script之前获取所有答案,除了一个答案(其值取决于执行),然后在正确的时间将其提供给master_script。

有没有办法可以在my_script执行期间将值传递给master_script。 ./master_script<< EOF .. EOF无济于事,因为我必须自己输入一个答案。

下面只是一个例子和我的创作,但描述了我的要求究竟是什么。

示例代码

my_script

#! /bin/bash
echo "Proceeding...."
#calling master_script
/master_script $arg1 $arg2
echo "Completed.."
echo "Executing other scripts"
/other_scripts"

执行

$ sh ./my_script
Proceeding....

Started master_script..

Press Enter to Proceed MY_INPUT

Enter username to add (eg.user123) MY_UNAME

Enter preferred uid (eg.1234) MY_UID

Do you want to bla bla..(Y/n) MY_INPUT

Please select among the following
 1.option1
 2.Option2

Selection: MY_SELECTION

Please choose which extension to use
 1.ext1
 2.ext2
 3.ext3
 4.ext4

Do you want to bla bla 2..(Y/n) MY_INPUT

Ended master script
Completed..

Executing other scripts

要求

#! /bin/bash
echo "Proceeding...."
# get values for master script
read -p "Proceed(Y/n):" proceed1 
read -p "Uname:" uname
read -p "Uid:" uid
read -p "bla bla (Y/n):" bla1
read -p "Selection(1/2):" selection1
read -p "bla bla 2(Y/n):" bla2
#calling master_script
./master_script $arg1 $arg2 {all_inputs}
#Silent Execution of master_script until choosing execution...
Please choose which extension to use
 1. ext1
 2. ext2
 3. ext3
 4. ext4
#Silent Execution of master_script after choosing ext and continue with other scripts
./other_scripts
echo "Completed.."
  

我读过期待/发送组合,但我无法理解   如何使用它。任何输入都将非常有用

修改

  

我也不确定./master_script<< EOF ...... EOF,因为我必须输入一个   在执行中自己回答。

1 个答案:

答案 0 :(得分:1)

有一个解决方案,使用 here documents 并重定向输入:

./master_script "$arg1" "$arg2" << ENDINPUT
$proceed1
$uname
$uid
$bla1
$selection1
ENDINPUT

备注1:最终ENDINPUT必须开始行,不要缩进!见Man bash

备注2:某些脚本或程序检查输入是否来自实际终端(调用isatty()),例如输入密码时。它仍然可以自动化条目,但它更棘手。