【问题标题】:Ssh to multiple hosts and run command based on hostnamesSSH 到多个主机并根据主机名运行命令
【发布时间】:2019-08-09 19:48:35
【问题描述】:

我正在尝试 ssh 到多台服务器并创建一个新文件夹,其名称为我正在 ssh-ing 的主机名。

我正在使用以下 ksh 脚本:

#!/usr/bin/ksh
for i in `cat $1`
do
ssh $i "sudo mkdir $i"
done

当运行 ./myscript 主机名列表时,这会叫 Usage: mkdir [-p] [-e] [-m mode] Directory ...

我很确定这与 $i 变量有关,但不知道如何使用它。

【问题讨论】:

  • 调试怎么样?例如。 ksh -xv ./myscript
  • 您的 hostnameList 文件来自 WinDos,不是吗?您必须删除 CR(\x0d 或 \r)字符。
  • 您能否edit您的问题包括一个产生此错误的示例输入文件?

标签: shell ssh ksh aix


【解决方案1】:

我认为它在 for 循环中缺少 do

试试看:

#!/usr/bin/ksh
for i in `cat $1`; do
    ssh $i "sudo mkdir $i"
done

https://www.cyberciti.biz/faq/ksh-for-loop/

还要确保您使用双引号,如您的示例所示。

【讨论】:

  • 问题中有do
  • 所以包含输入文件很重要。也许您正试图在不存在的目录中创建一个目录。例如:mkdir /tmp/test1/test2 如果 test1 不存在,则需要在 mkdir 命令中包含 -p 参数。试试:#!/usr/bin/ksh for i in cat $1; do ssh $i "sudo mkdir -p $i" done -p, --parents 如果存在没有错误,根据需要创建父目录
猜你喜欢
  • 1970-01-01
  • 2020-07-05
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多