循环 EOF ssh -n 无法创建文件
Loop EOF ssh -n can't create file
希望这次不是重复的。我什么也没找到。
我的代码:
#!/bin/bash
FILE=/home/user/srv.txt
TICKET=task
while read LINE; do
ssh -nT $LINE << 'EOF'
touch info.txt
hostname >> info.txt
ifconfig | grep inet | awk ' ~ "cast" {print }' >> info.txt
grep -i ^server /etc/zabbix/zabbix_agentd.conf >> info.txt
echo "- Done -" >> info.txt
EOF
ssh -nT $LINE "cat info.txt" >> $TICKET.txt
done < $FILE #End
我的问题:
- 如果我只使用
ssh $LINE
它只会在第一行通过 ssh 连接到主机并且还会显示错误 Pseudo-terminal will not be allocated because stdin is not a terminal.
- 使用
ssh -T
修复上面的错误消息,它将创建文件 info.txt
- 使用
ssh -nT
修复 ssh 只读取第一行但我收到错误消息 cat: info.txt: No such file or directory
的错误。如果我 ssh 到主机,我可以确认我的主文件夹中没有 info.txt 文件。 ssh -T
,我的主文件夹中有这个文件。
我尝试了选项 -t,也尝试了 HERE,EOF 没有' ... '但没有成功
我错过了什么吗?
谢谢你的帮助,
伊斯华伦
你有两个问题。
- 如果您在没有
-n
的情况下调用 ssh,它可能会消耗 $FILE 输入(耗尽其标准输入)
- 如果您使用
-n
调用 ssh,它不会读取其标准输入,因此 none 的命令将被执行
但是,第一个 ssh 的输入已重定向为来自 heredoc,因此它不需要 -n
。
如评论中所述,不需要第二次 ssh 调用。与其通过管道输入 info.txt 然后将其复制到本地文件,不如直接输出到本地文件:
while read LINE; do
ssh -T $LINE >>$TICKET.txt <<'EOF'
hostname
ifconfig | grep inet | awk ' ~ "cast" {print }'
grep -i ^server /etc/zabbix/zabbix_agentd.conf
echo "- Done -"
EOF
done <$FILE
希望这次不是重复的。我什么也没找到。
我的代码:
#!/bin/bash
FILE=/home/user/srv.txt
TICKET=task
while read LINE; do
ssh -nT $LINE << 'EOF'
touch info.txt
hostname >> info.txt
ifconfig | grep inet | awk ' ~ "cast" {print }' >> info.txt
grep -i ^server /etc/zabbix/zabbix_agentd.conf >> info.txt
echo "- Done -" >> info.txt
EOF
ssh -nT $LINE "cat info.txt" >> $TICKET.txt
done < $FILE #End
我的问题:
- 如果我只使用
ssh $LINE
它只会在第一行通过 ssh 连接到主机并且还会显示错误Pseudo-terminal will not be allocated because stdin is not a terminal.
- 使用
ssh -T
修复上面的错误消息,它将创建文件 info.txt - 使用
ssh -nT
修复 ssh 只读取第一行但我收到错误消息cat: info.txt: No such file or directory
的错误。如果我 ssh 到主机,我可以确认我的主文件夹中没有 info.txt 文件。ssh -T
,我的主文件夹中有这个文件。
我尝试了选项 -t,也尝试了 HERE,EOF 没有' ... '但没有成功
我错过了什么吗? 谢谢你的帮助, 伊斯华伦
你有两个问题。
- 如果您在没有
-n
的情况下调用 ssh,它可能会消耗 $FILE 输入(耗尽其标准输入) - 如果您使用
-n
调用 ssh,它不会读取其标准输入,因此 none 的命令将被执行
但是,第一个 ssh 的输入已重定向为来自 heredoc,因此它不需要 -n
。
如评论中所述,不需要第二次 ssh 调用。与其通过管道输入 info.txt 然后将其复制到本地文件,不如直接输出到本地文件:
while read LINE; do
ssh -T $LINE >>$TICKET.txt <<'EOF'
hostname
ifconfig | grep inet | awk ' ~ "cast" {print }'
grep -i ^server /etc/zabbix/zabbix_agentd.conf
echo "- Done -"
EOF
done <$FILE