我正在研究一个bash脚本(my_script),我在其中调用了许多脚本,它们共同使工作流程自动化。
但是当我调用一个特定的(ksh / bash)脚本(master_script)时,会有许多输入和检查(而不是参数)。
它减慢了整个自动化的速度,因为每次我必须超级智能并手动输入值。
我没有选择修改或制作新脚本(工作约束)
每次问题都一样。我试图在执行master_script之前获取所有答案,除了一个答案(其值取决于执行),然后在正确的时间将其提供给master_script。
有没有办法可以在my_script执行期间将值传递给master_script。 ./master_script<< EOF .. EOF无济于事,因为我必须自己输入一个答案。
下面只是一个例子和我的创作,但描述了我的要求究竟是什么。
示例代码
#! /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,因为我必须输入一个 在执行中自己回答。
答案 0 :(得分:1)
有一个解决方案,使用 here documents 并重定向输入:
./master_script "$arg1" "$arg2" << ENDINPUT
$proceed1
$uname
$uid
$bla1
$selection1
ENDINPUT
备注1:最终ENDINPUT必须开始行,不要缩进!见Man bash
备注2:某些脚本或程序检查输入是否来自实际终端(调用isatty()
),例如输入密码时。它仍然可以自动化条目,但它更棘手。