通过 ssh 执行脚本时在 bash 中设置环境变量
set env variable in bash when executing script over ssh
我有一个简单的 bash 脚本,其中包含一个名为服务器的关联数组。服务器名称是键,IP 地址是值。当我想在我的所有服务器上 运行 一些一次性脚本时,我会使用它。
for server in ${!servers[@]}; do
echo ""
echo -e "\e[93mConnecting to $server...\e[0m"
ssh $user@${servers[$server]} 'sudo /bin/bash -s' < | while read line; do echo -e "\e[92m[$server]\e[0m $line"; done
done
当我 运行 它以交互方式读取并从 stdout 读取时,这工作正常,但现在我想 运行 它自动从 cron 并在服务器上有 运行s 的脚本使用 curl 有条件地将数据发送到 hipchat。
不幸的是,许多服务器没有设置有意义的主机名,我无法轻易更改主机名,因为其中一些网站已有数十年历史 php 使用主机名来确定它们的环境 运行ning 并设置数据库凭据等...我不想为此审核数十个甚至数百个网站。
我可以将 $server 的值作为环境变量发送到服务器上生成的 bash shell 吗?脚本在向 hipchat 或电子邮件发送消息时可以使用该环境变量?我尝试在 /bin/bash 之前只执行 SERVER=$server 但这似乎没有用。
我明白了。我只需要从对 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 < | while read line; do echo -e "\e[92m[$server]\e[0m $line"; done
done
我有一个简单的 bash 脚本,其中包含一个名为服务器的关联数组。服务器名称是键,IP 地址是值。当我想在我的所有服务器上 运行 一些一次性脚本时,我会使用它。
for server in ${!servers[@]}; do
echo ""
echo -e "\e[93mConnecting to $server...\e[0m"
ssh $user@${servers[$server]} 'sudo /bin/bash -s' < | while read line; do echo -e "\e[92m[$server]\e[0m $line"; done
done
当我 运行 它以交互方式读取并从 stdout 读取时,这工作正常,但现在我想 运行 它自动从 cron 并在服务器上有 运行s 的脚本使用 curl 有条件地将数据发送到 hipchat。
不幸的是,许多服务器没有设置有意义的主机名,我无法轻易更改主机名,因为其中一些网站已有数十年历史 php 使用主机名来确定它们的环境 运行ning 并设置数据库凭据等...我不想为此审核数十个甚至数百个网站。
我可以将 $server 的值作为环境变量发送到服务器上生成的 bash shell 吗?脚本在向 hipchat 或电子邮件发送消息时可以使用该环境变量?我尝试在 /bin/bash 之前只执行 SERVER=$server 但这似乎没有用。
我明白了。我只需要从对 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 < | while read line; do echo -e "\e[92m[$server]\e[0m $line"; done
done