我正在努力改变“主机名--瞬时“对于一些使用变量进行 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