bash - 自动将命令的输出提供给提示符
问题描述
我有一个脚本,它读取一个文本文件,其中列出了所有节点:
node1
node2
node3
.
.
.
这是我的脚本:
#!/bin/bash
while read f; do
ssh-copy-id myusername@"$f"
ssh username@master.icinga.test.com
icinga2 pki ticket --cn '$f'
done < linux-list.txt
while read f; do
ssh myusername@"$f" '
yum install -y epel-release
wget --no-check-certificate https://packages.icinga.org/epel/7/release/noarch/icinga-rpm-release-7-1.el7.centos.noarch.rpm
yum install icinga-rpm-release-7-1.el7.centos.noarch.rpm
yum install -y icinga2 nagios-plugins-all
chown -R icinga:icinga /etc/icinga2 /var/lib/icinga2 /var/log/icinga2' </dev/null
ssh myusername@master.icinga.test.com icinga2 pki ticket --cn "$f" |
ssh myusername@"$f" 'cat >/tmp/pkicode'
scp ./zones.conf myusername@"$f":/etc/icinga2/zones.conf
done < linux-list.txt
1) 脚本应该登录到 Icinga 主机并icinga2 pki ticket --cn '$f'
为在该文件上找到的每个节点运行一个命令,linux-list.txt
并为每个主机生成一个票证
2)然后将这个生成的代码发送到每个节点($f)
完成上述所有命令后,脚本需要运行命令 icinga2 节点向导,该向导将启动问题/答案提示,并需要有人键入答案,如下所示。
Icinga master 的 FQDN 是master.icinga.test.com
,它的 IP 是10.20.20.1
. PKI 票证是我们之前在 Icinga 主机上生成的,并且对于每个主机都不同。
有什么办法可以自动化吗?
Y
Enter
master.icinga.test.com
Y
10.20.20.1
N
Y
[PKI Ticket created earlier on the Icinga master]
Enter
Enter
Y
Y
Enter
Enter
N
N
谢谢
解决方案
将来,尝试创建一个Minimal, Complete, and Verifiable example,因为那太长了,无法阅读。
但是,您似乎只想将一系列输入传递给提示。你可以用 a 来做到这一点heredoc
,就像这样
PKI="some text whatever ticket thing blahblahblah"
somecmd << EOF
Y
Enter
master.icinga.test.com
Y
10.20.20.1
N
Y
$PKI
Enter
Enter
Y
Y
Enter
Enter
N
N
EOF
heredoc
s 可以做变量扩展。凉爽的。
推荐阅读
- ios - 如何在 Visual Studio for Mac 上更改 iOS 模拟器
- idris - 为什么变量 x 可以(并且必须)在函数定义的左侧出现两次?还有什么意义?
- c# - 如何更改选择性列的 GridView 标题样式颜色
- javascript - 在没有导航道具/外部组件的情况下无法访问反应导航(v5)
- r - 如何在 R 的罚球区外画一个角和半圆?
- python - 如何在后台运行任务直到用户输入?
- grant - 如何在 mysql 数据库中通过 root 将 XA_RECOVER_ADMIN 授予新用户
- c# - 有没有办法在任务不冻结 UI 的情况下处理任务引发的异常?
- python - Python plotly express scatter_3d:如何将纵横比设置为 1
- c# - C# 中的 XmlStar 用法