SSH <<-MYTAGは、SSH接続でパイプされたスクリプトを非表示にします。

SSH <<-MYTAGは、SSH接続でパイプされたスクリプトを非表示にします。

Jenkinsコンソールからコマンド出力を取得せずにリモートホストにスクリプトを渡そうとします。サンプルスクリプト:

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

私の主な問題は、2つの端の間のセクション全体がJenkinsのコンソール出力に2回でも投稿されることです。 1つ目はsshセッションを開始し、2つ目はsshセッション内にあるようです。このため、静かなように見える適切な場所を見つけるのは困難です。したがって、誰かがコンソールでスクリプト自体を隠す方法を知っていることを願っています。しかし、私は完全にダムになりたくありません。私はまだsshセッション内で実行されるコマンドの出力に興味があります。

私はたくさん試しました> /dev/null 。しかし、通常、echoの出力やシェルで実行されたコマンドも消えますが、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

を使用して対話型ログインシェルを呼び出すことができます-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!端末に文字列を生成します。

関連情報