我通过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"用文字"密码"在内部(假设消息1被覆盖)程序仍然等待密码,即使没有提示,所以当我输入它时输出是好的:
su output is: 0
如何在屏幕上显示我的消息?
答案 0 :(得分:1)
@JonathanLeffler马上发现了问题 - 你没有使用bash,而是使用tcsh。
tcsh有自己的语法与bash不兼容。
尽管如此:由于ssh
和sshpass
会返回远程命令的退出代码,因此您应该这样做:
if sshpass -p password ssh user@ip 'echo "Message1"; su -lc "./rootscript.sh"'
then
echo "The command succeeded (exit code $?)"
else
echo "The command failed (exit code $?)"
fi
如果你真的想在远程shell上使用bash运行某些东西,你可以使用Charles Duffy的代码进行微小改动:
# v-- shell specified here
output=$(sshpass -p password ssh user@ip bash << 'EOF'
echo "Message1" >&2
su -lc "./rootscript.sh" >&2
echo "$?"
EOF
)