【发布时间】:2014-07-30 02:11:42
【问题描述】:
我正在保存通过 ssh 在远程执行的一个命令的输出,但我也执行了一些回显。为了在屏幕上看到消息而不是将它们保存到我想重定向它们的变量中。 我尝试过 >&1 和 >&2 但在每种情况下都会创建一个名称为“1”或“2”的文件 这是扩展引号或转义字符的问题吗?
OUTPUT=$(sshpass -p password ssh user@ip 'echo "Message1" >&2 ;
su -lc "./rootscript.sh" >&2;
echo "$?" ')
echo "su output is: $OUTPUT"
输出:
屏幕上什么都没有,一个名为“2”的文件,其中包含文本“Password”(假设消息 1 已被覆盖)程序仍然等待密码,即使没有提示,所以当我输入它时输出很好:
su output is: 0
如何让我的消息显示在屏幕上?
【问题讨论】:
-
我不希望
OUTPUT包含除退出状态之外的任何内容;su的输出被重定向到标准错误,因此不会被命令替换捕获。不过,>&2似乎被解释为>2的事实确实难倒我。 -
无论如何,我强烈建议使用公钥认证而不是
sshpass。 -
机器
ip上的user的默认shell 实际上是C shell——还是其他一些非POSIX shell? -
@natharra,如果没有
&,创建一个名为2的文件会发生什么。既然如此,我几乎想知道 sshpass 是否无法通过未修改的方式传递其参数。 -
这看起来很像 C shell 派生的。另一种调试选项:将
bash -c '...'替换为bash -xvc '...'。-x启用跟踪;-v启用详细模式,在阅读时打印“脚本”。-x输出不一定显示 I/O 重定向,但-v输出确实显示了这一点。但我怀疑尽管您尽了最大努力,但这是tcsh与bash的问题。
标签: bash redirect ssh stdout stderr