bash - Bash 脚本回答交互式提示
问题描述
我想创建一个脚本,用于生成一些报告,但要做到这一点,我必须回答几个问题,这些问题由我运行的其他脚本提出。
答案可以是肯定的,否定的,对于某些我需要选择 1,2 或 3 的问题,我需要“按 [Enter] 继续:”...所以我的问题是如何以最好的方式做到这一点?
这是我现在的脚本(它不起作用它在第二个问题上停止,我需要回答为 Y)答案的顺序是:是/是/是/ENTER/2/3/1/否/否/是
#!/bin/bash
while read LINE ; do
ssh $LINE <<"EOF"
echo "$HOSTNAME"
printf '\Y \nY \nY \n \n2 \n3 \n1 \nN \nN \nY' |/tmp/script.sh
done
EOF
done < file1 >> /tmp/result.log
好的,现在我在需要选择 2/3/1 的阶段遇到问题,它没有回答 2,请参阅日志中的示例...
Choose the Veritas enterprise product family:
1@) NetBackup Family
2@) Storage Foundation and HA Solutions / InfoScale Solutions
Choose your option: [1-2,q] (1)@ Invalid input. Re-enter.
Choose your option: [1-2,q] (1)@
解决方案
您需要将换行符明确写入脚本。
printf 'Y\nY\nY\n\n2\n3\n1\nn\nn\nY\n' | /tmp/script.sh
这假定Y
对应于“是”并且n
对应于“否”。您还可以printf
对参数进行循环,以减少\n
.
printf '%s\n' Y Y Y "" 2 3 1 n n Y | /tmp/script.sh
空字符串对应于在没有任何其他输入的情况下按 Enter。
推荐阅读
- asp.net-core - 在 .Net Core razor 页面中传递路由参数
- c - 在 prolog 中解决一个简单的难题
- angular - Ag-grid:几列响应性问题
- python - Python ThreadPoolExecutor 和关闭的连接
- mule -
引用变量名是动态的变量 - c# - 如何以编程方式创建数据块?
- c++ - 放置新运算符是否禁用默认的新运算符?
- ruby-on-rails - 没有路由匹配 {:action=>"show", :controller=>"profiles", :user_id=>nil},缺少必需的键:[:user_id]
- c# - 在 uwp 中将一个网格的内容复制/克隆到另一个网格
- c - C中带有2个以上参数的大小写可变参数宏