使用 for 循环使用变量更改主机名

使用 for 循环使用变量更改主机名

我正在努力改变“主机名--瞬时“对于一些使用变量进行 for 循环的计算机。我希望它收集“主机名-f“从服务器本身,并使用变量自动更改它。当我运行它时,它告诉我”参数数量无效。

命令:

for i in `cat /tmp/serverlist`; do
    echo "Hostname in $i"
    ssh -o StrictHostKeyChecking=no root@$i "hostname=$(hostname -f); hostnamectl --transient set-hostname $hostname"
done

答案1

因为您使用的是双引号,所以$hostname在启动之前,该变量正在本地计算机上展开ssh,因此它可能是空的。您可以通过以下方式得到相同的错误:

$ hostnamectl --transient set-hostname 
Too few arguments.

由于您希望在远程主机上扩展它们,因此请使用单引号(还修复了其他一些不良做法):

while IFS= read -r i; do
   ssh -o StrictHostKeyChecking=no "root@$i" 'hostnamectl --transient set-hostname "$(hostname -f)"'
done

相关内容