【问题标题】:Why can I not concatenate the result of an SSH to another variable?为什么我不能将 SSH 的结果连接到另一个变量?
【发布时间】:2015-01-12 05:49:22
【问题描述】:

我正在尝试以当前登录用户的身份通过 SSH 连接到一台机器。因此:

#!/bin/bash

ip="[ip-redacted]"
currentuser=$(ssh -t -t macuser@$ip "stat -f '%Su' /dev/console")
echo $currentuser # prints "macuser"
echo "$currentuser" # same as above
echo "$currentuser""@$ip" # prints "@[ip-redacted]"

为什么当我自己打印 currentuser 时它会打印正确的用户,但是当我尝试将它附加到 ip 时它却显示为空?

【问题讨论】:

    标签: macos bash ssh


    【解决方案1】:

    由于您对ssh 使用-t 选项,因此输出在每行的末尾包含回车符和换行符(因为这是需要发送到终端的内容)。 $(...) 自动删除最后一个 LF 字符,因此 $currentuserCR 结尾。所以它打印stat 命令的输出,然后是CR,然后是@$ipCR 将光标移动到行首,然后@$ip 覆盖用户名。

    最简单的解决方案是省略-t 选项(两者——我不知道你为什么使用它两次)。您正在运行的命令不需要伪 tty。

    【讨论】:

    • 谢谢!我会尽快接受你的回答。我只有一个简单的问题——你需要一个伪 tty 做什么?我正在使用另一个命令,我想知道我是否也可以在该命令上删除它。
    • 来自 ssh 手册页:“多个 -t 选项强制分配 tty,即使 ssh 没有本地 tty。” (这并不是说为什么在这里这样做更清楚,只是两个可能有意义的原因)。
    • @TylerHou:例如,如果您尝试执行ssh ip-redacted screen -R irc 之类的操作,它将在伪 tty 终端中打开屏幕会话;通常,当您使用 SSH 登录某个地方时,您就会明白这一点。如果你只是运行一个简单的程序并收集它的输出,你就不会。
    猜你喜欢
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    相关资源
    最近更新 更多