typeset -f | sshpass -e ssh -o StrictHostKeyChecking=no user@${IPADDRESS} "
$(cat);
IFERROR=$(checkscript);
echo "$IFERROR"" > ${SSHTEMPFILE} 2>&1
这一行...我无法从 ssh 中排除“用户授权”消息...IFERROR 返回我需要跟踪的值,而且“!!! AUTHORIZED USE ONLY !!!”来自 ssh 的可怕消息...已经尝试过类似的操作,但它不起作用:
typeset -f | sshpass -e ssh -o StrictHostKeyChecking=no user@${IPADDRESS} "
$(cat);
IFERROR=$(checkscript);
echo "$IFERROR"" | grep -v "AUTHORIZED" > ${SSHTEMPFILE} 2>&1
答案1
您尝试排除的消息可能是 ssh 横幅。这个显示在 上stderr
,这就是为什么grep -v
不能在您的脚本中工作的原因。
只是尝试重定向stderr
到stdin
前这grep
。它应该有效。我不太明白你的命令,但它看起来像这样:
typeset -f | sshpass -e ssh -o StrictHostKeyChecking=no user@${IPADDRESS} "$(cat); IFERROR=$(checkscript); echo "$IFERROR"" 2>&1 | grep -v "AUTHORIZED" > ${SSHTEMPFILE}
PS:这样做的目的是什么$(cat)
?
答案2
我不确定你想做什么,但你的脚本中至少有一个明显的错误。你有
ssh "$(cat); …"$IFERROR"" | …
该片段$IFERROR
不在引号内,它由本地 shell 扩展以构建要执行的 SSH 命令。你想echo "$IFERROR"
在远程端执行,所以需要引用 来$
防止它在本地扩展:
typeset -f | sshpass -e ssh -o StrictHostKeyChecking=no user@${IPADDRESS} "
$(cat);
IFERROR=$(checkscript);
echo \"\$IFERROR\"" > ${SSHTEMPFILE} 2>&1
该checkscript
命令也在本地执行。如果您打算远程执行它,请更改IFERROR=$(checkscript)
为IFERROR=\$(checkscript)
.
您不需要将 的输出存储checkscript
在变量中。你可以,但这让你的生活变得更加复杂,而且没有任何好处。直接获取它的输出即可。
typeset -f |
sshpass -e ssh -o StrictHostKeyChecking=no user@${IPADDRESS} "$(cat); checkscript" > ${SSHTEMPFILE} 2>&1