![SSH](https://linux22.com/image/135043/SSH%20.png)
我试图在远程主机上传递脚本,而不在詹金斯控制台上获取命令输出。一个示例脚本:
ssh -o StrictHostKeyChecking=no -t -t update@dispotest bash -s 'hello' <<'END'
printf '%s world!\n' "$1"
exit
END
产生以下输出:
+ sh start_stop_jboss_remote.sh
printf '%s world!\n' "$1"
exit
[update@dispotest ~]$ printf '%s world!\n' "$1"
hello world!
[update@dispotest ~]$
[update@dispotest ~]$ exit
exit
Connection to dispotest closed.
Finished: SUCCESS
我的主要问题是两端之间的整个部分sh将在jenkins的控制台输出中发布甚至两次。我猜第一次是为了启动 ssh 会话,第二次是在 ssh 会话内。这使得找到一个看起来安静的合适地方变得很困难。所以我希望有人知道如何从控制台隐藏脚本本身。但我不想完全静音。我仍然对 ssh 会话中运行的命令的输出感兴趣。
我已经尝试过很多 > /dev/null 。但通常情况下,echo 的输出或在 shell 中执行的命令也消失了,而 id 想要保留。
我尝试过的一些例子
ssh -o StrictHostKeyChecking=no -t -t update@dispotest bash -s 'hello' <<'END'
{
printf '%s world!\n' "$1"
exit
} 2> /dev/null
END
至少输出捆绑的命令
+ sh start_stop_jboss_remote.sh
{
printf '%s world!\n' "$1"
exit
} 2> /dev/null
[update@dispotest ~]$ {
>
> printf '%s world!\n' "$1"
> exit
>
> } 2> /dev/null
hello world!
Connection to dispotest closed.
Finished: SUCCESS
实施例3
ssh -o StrictHostKeyChecking=no -t -t update@dispotest bash -s 'hello' 2> /dev/null <<'END'
printf '%s world!\n' "$1"
exit
END
输出
+ sh start_stop_jboss_remote.sh
printf '%s world!\n' "$1"
exit
[update@dispotest ~]$ printf '%s world!\n' "$1"
hello world!
[update@dispotest ~]$ exit
exit
Finished: SUCCESS
实施例4
ssh -o StrictHostKeyChecking=no -t -t update@dispotest bash -s 'hello' 2> /dev/null <<'END'
{
printf '%s world!\n' "$1"
exit
} 2> /dev/null
END
输出
+ sh start_stop_jboss_remote.sh
{
printf '%s world!\n' "$1"
exit
} 2> /dev/null
[update@dispotest ~]$ {
> printf '%s world!\n' "$1"
> exit
> } 2> /dev/null
hello world!
Finished: SUCCESS
答案1
您可以使用 调用交互式登录 shell -t -t
。从命令行中删除它们。
将参数传递给脚本的正确方法bash -s
是
bash -s "$COMMAND" "$SERVICENAME" <<'END_SCRIPT'
here goes
script that uses
"$1" and "$2"
END_SCRIPT
$COMMAND
脚本会传递和的值,并且这些值在脚本中$SERVICENAME
可以作为$1
和使用。$2
脚本本身还应该被引用,这是通过在开头引用here-document 标签来完成的。
在你的情况下:
ssh -o StrictHostKeyChecking=no "user@$SERVER" bash -s "$COMMAND" "$SERVICENAME" <<-'ENDSSH'
echo "I'd like to see this"
if [ "$1" = "stop" ]; then
...
fi
ENDSSH
请注意,ENDSSH
末尾的标记必须位于第一列(行的第一列),或者使用制表符缩进。
对我有用的例子:
ssh myhost bash -s 'hello' <<'END'
printf '%s world!\n' "$1"
END
hello world!
它在终端中生成字符串。