将 bash 循环输出重定向到可变的特定文件

4 linux shell scripting bash shell-script

这对我来说应该是显而易见的,但我已经被困了一段时间。

我正在尝试编写一个非常简单的 bash 循环来获取服务器列表,从中检索一些特定信息,并将输出保存到基于启动机器上的主机地址的文件中。

代码目前看起来像:

#!/bin/bash

SERVER_LIST=/path/to/hosts

while read REMOTE_SERVER
do
    {
    ssh user@$REMOTE_SERVER 'show_stat_from_shell_command' 
} > "$REMOTE_SERVER"
done < $SERVER_LIST
Run Code Online (Sandbox Code Playgroud)

上面的结果只为我列表中的第一个主机生成一个输出文件,然后退出。

为了阻止一些更明显的解决方案,Ansible 等不是一种选择,因为这是一个非常受限制的环境。出于同样的原因,使用多 shell 或 tmux 也不是一种选择(我一次只能从我的主机登录一个系统)。

所以,如果有人能确切地告诉我我是如何搞砸的,我将不胜感激!

Cyr*_*rus 6

代替

ssh user@$REMOTE_SERVER 'show_stat_from_shell_command'
Run Code Online (Sandbox Code Playgroud)

经过

ssh user@$REMOTE_SERVER 'show_stat_from_shell_command' </dev/null
Run Code Online (Sandbox Code Playgroud)

也防止从 stdin ( $SERVER_LIST) 进行ssh 读取。或者使用ssh的选项-n


-n: 从 /dev/null 重定向标准输入(实际上,阻止从标准输入读取)。