![使用 for 循环使用变量更改主机名](https://linux22.com/image/225241/%E4%BD%BF%E7%94%A8%20for%20%E5%BE%AA%E7%8E%AF%E4%BD%BF%E7%94%A8%E5%8F%98%E9%87%8F%E6%9B%B4%E6%94%B9%E4%B8%BB%E6%9C%BA%E5%90%8D.png)
我正在努力改变“主机名--瞬时“对于一些使用变量进行 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