Bash 使用For循环时SSH会话挂起
我想通过SSH连接到服务器列表,以自动方式收集数据 现在,我的会话以msg“由于stdin不是终端,因此不会分配伪终端”开始,并在从未连接到远程服务器的情况下继续 如果我从SSH行中删除'-n',它将连接到远程服务器并停止脚本执行,直到SSH会话断开为止Bash 使用For循环时SSH会话挂起,bash,Bash,我想通过SSH连接到服务器列表,以自动方式收集数据 现在,我的会话以msg“由于stdin不是终端,因此不会分配伪终端”开始,并在从未连接到远程服务器的情况下继续 如果我从SSH行中删除'-n',它将连接到远程服务器并停止脚本执行,直到SSH会话断开为止 for host in $(cat host_list); do ssh -n -o stricthostkeychecking=no $host var1=$(awk -F '.' '{print $
for host in $(cat host_list);
do
ssh -n -o stricthostkeychecking=no $host
var1=$(awk -F '.' '{print $1}' some_file )
var2=$(some_command $var1)
echo $var2
done
原始帖子(如果需要,可用于上下文):
看起来您想要的是从远程文件中获取信息,然后进行一些处理。您需要做的是从ssh执行
awk
命令,如:
cmd=“awk-F.”“{print$1}”一些文件”
对于主机,单位为美元(cat主机列表);做
var1=$(ssh-o stricthostkeychecking=no$host$cmd)
var2=$(某些命令$var1)
echo$var2
完成
您有
改用while
循环。另外,不要忘记在awk
程序中转义美元符号,您希望远程运行该程序以避免在本地扩展:-
while read host
do
ssh -n -o StrictHostKeyChecking=no $host "awk -F'.' '{ print \$1 }' some_file"
done < host_list
读取主机时
做
ssh-n-o strichostkeychecking=no$host“awk-F”。“{print\$1}”一些_文件”
已完成<主机列表
我有点搞不清楚这个脚本要做什么。您想在远程计算机上执行$()
中的命令吗?是的,这是正确的。请暂时忘记循环,告诉我们您想在远程主机上运行什么命令;同时告诉我们some_文件
和some_命令
驻留在哪里。。。本地或远程主机上的所有环路(SSH后)都将执行,并存在于远程服务器上。host_list是脚本本身之外唯一一个本地存在的文件。要解决“不会分配伪终端…”问题,请尝试ssh-t-t-t-n-o…
(是的,实际上是多个-t
s;-)。祝你好运。你为什么把命令放在变量里?如果没有正确的引号或转义,cmd
中的值将包含当前脚本中$1
的值,而不是Awk脚本中的文本字符串$1
,这可能是语法错误。一般来说,你需要复习