【问题标题】:How to pass the output of a script as an argument to a ssh command?如何将脚本的输出作为参数传递给 ssh 命令?
【发布时间】:2016-10-03 23:17:17
【问题描述】:

我有一个脚本,可以显示我正在运行的 AWS 上的所有实例:

$/home/scripts/show_instances.sh
i-f66d2de0  running 10.148.17.40
i-fxxdbbe0  running 10.148.20.60
(...)

我想做的是获取第一个 IP,通过管道连接到 ssh 并自动连接到服务器。我试过这个:

$/home/scripts/show_instances.sh | tail -1 | awk '{print $3}' | xargs ssh

但不工作:它连接到服务器,但在我输入的第一个命令(即 ls)之后,终端似乎只是在等待某些事情并且没有任何反应(我在 mac 上连接到 Unix),所以我必须用 ctrl+c 退出实例。有什么建议吗?

【问题讨论】:

  • 不确定xargs 在这种情况下是否会向您购买任何东西。如果您的标题确实是您的 Q,那么 ssh $(..../show_instances.sh | awk 'NR==1{print $3}') ..other ssh stuff ...(使用 cmd-substitution $(...))应该可以解决您的问题。 (不需要尾巴)。否则,您的 Q 似乎是关于“我如何使用xargs)。祝你好运。
  • 通常你可以使用反引号(或 $( ) )来获得这个(我不能告诉你反引号是如何工作的,因为它们在 StackOverflow 网站上用于格式化目的)。
  • 哇!天才!它现在正在工作!我确实喜欢这样:ssh /home/scripts/show_instances.sh | tail -1 | awk '{print $3}' 谢谢!
  • 解释得更好,两种方式都有效,就像你说的那样。 ssh(反引号)/home/scripts/show_instances.sh |尾-1 | awk '{print $3}'(反引号)或使用 $(..) ssh "$(/home/scripts/show_instances.sh | tail -1 | awk '{print $3}')" 谢谢!
  • 加入 90 年代初并使用 $(... cmds sub ) ;-) .. 如果您使用不支持 $(..) 的古老系统卡住,反引号是您的备份。另外,请阅读awk 内部变量NR,在这种情况下您不需要tail。祝你好运。

标签: bash unix ssh


【解决方案1】:

使用命令替换,并在其中运行一次 awk 以从第一行获取所需的 IP,然后执行 ssh

ssh "$(/home/scripts/show_instances.sh | awk 'NR==1{print $NF; exit}')"

如果你想坚持使用管道和xargs 之一,那么分配伪 TTY (-t) 应该让你进入并以交互方式运行:

/home/scripts/show_instances.sh | awk 'NR==1{print $NF; exit}' | xargs ssh -tt

对于最后一行,执行:

ssh "$(/home/scripts/show_instances.sh | awk 'END{print $NF}')"
/home/scripts/show_instances.sh | awk 'END{print $NF}' | xargs ssh -tt

【讨论】:

  • 成功了!我确实喜欢这样:ssh "$(/home/scripts/show_instances.sh | tail -1 | awk '{print $3}')" 谢谢!
  • @ArthurAccioly 检查我的编辑。你不需要tail,你可以单独使用awk
  • 哇!甚至更好!像这样对吗? ssh "$(/home/scripts/show_instances.sh | awk 'END{print $NF}')" 我不太擅长 awk。为什么 NF 准确获取 IP?顺便说一句,使用 ssh -tt 的第二个选项不起作用,我遇到了同样的终端问题,即在任何命令之后等待某些东西,比如“ls”。但是,无论如何,我对这个命令很满意。
  • @ArthurAccioly NF 得到字段的数量,$NF 得到预期的最后一个字段的值。
猜你喜欢
  • 2022-12-08
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 2019-07-13
  • 2013-10-11
  • 2013-08-03
  • 2016-01-30
相关资源
最近更新 更多