@noteすべての例では、などの変数connectionString
を設定していることを前提としていますconnectionString=user@server
。
ソリューションに到達した方法
を使用ssh -T
すると、単純なコマンドで機能するはずです。たとえば、これは追加情報を出力しません。
ssh -T $connectionString "echo 'blah'"
問題は、here-docを使用して多くのコマンドを実行しようとする場合です。たとえば、以下は機能しません-今日のメッセージ(MoTD)をエコーし、「stdin:is not a tty」を表示することもあります。
somethingLocal='something local'
ssh -T $connectionString <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
この問題を回避するには、まずコマンドをローカル変数に保存し、リモートサーバーに送信する必要があります。
somethingLocal='something local'
read -r -d '' commands <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
ssh -T $connectionString "$commands"
しかし、それは面倒です...
最終的解決
汎用関数を作成します(コマンドとして文字列またはHEREDOCを使用できることに注意してください)。
function silentSsh {
local connectionString="$1"
local commands="$2"
if [ -z "$commands" ]; then
commands=`cat`
fi
ssh -T $connectionString "$commands"
}
例
次のように使用します:
somethingLocal='something local'
silentSsh $connectionString <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
またはそのように:
silentSsh $connectionString "echo 'blah'"
またはそのように:
silentSsh $connectionString <<'EOC'
echo 'blah'
somethingRemote=`echo 'whatever'`
echo "blah $somethingRemote"
EOC
またはそのように:
silentSsh $connectionString < getlines.sh