Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用For循环时SSH会话挂起_Bash - Fatal编程技术网

Bash 使用For循环时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 $

我想通过SSH连接到服务器列表,以自动方式收集数据

现在,我的会话以msg“由于stdin不是终端,因此不会分配伪终端”开始,并在从未连接到远程服务器的情况下继续

如果我从SSH行中删除'-n',它将连接到远程服务器并停止脚本执行,直到SSH会话断开为止

 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
,这可能是语法错误。一般来说,你需要复习