我有一个简单的bash脚本,其中包含一个名为servers的关联数组。服务器名称是密钥,IP地址是值。当我想在我的所有服务器上运行一些脚本时,我使用它。
for server in ${!servers[@]}; do
echo ""
echo -e "\e[93mConnecting to $server...\e[0m"
ssh $user@${servers[$server]} 'sudo /bin/bash -s' < $1 | while read line; do echo -e "\e[92m[$server]\e[0m $line"; done
done
当我以交互方式运行它并从stdout读取时,这很好用但是现在我想从cron自动运行它并让服务器上运行的脚本有条件地使用curl将数据发送到hipchat。
不幸的是,许多服务器没有设置有意义的主机名,我不能轻易更改主机名,因为有些数十年的php网站使用主机名来确定它们运行的环境并设置数据库凭据等。 ..我不想为此审核几十个甚至百个以上的网站。
我可以将$ server的值发送到服务器上的生成的bash shell,作为脚本在向hipchat或email发送消息时可以使用的环境变量吗?我尝试在/ bin / bash之前做SERVER = $ server,但这似乎不起作用。
答案 0 :(得分:0)
我明白了。我只需要从调用bash shell的地方删除单引号。然后添加SERVER = $ server工作。
for server in ${!servers[@]}; do
echo ""
echo -e "\e[93mConnecting to $server...\e[0m"
ssh $user@${servers[$server]} sudo SERVER=$server /bin/bash -s < $1 | while read line; do echo -e "\e[92m[$server]\e[0m $line"; done
done