web-dev-qa-db-ja.com

sshコマンドから「テキストが返されません」に改行を追加する方法

Qt5アプリケーション内に、他のリモートマシン(SSHで接続)上の特定のファイルのバージョン番号をチェックするために実行されるbashスクリプトがあります。

このスクリプトを実行できるマシンは100台以上あります。 sshedしたマシンに、探しているファイルがある場合、スクリプト出力は適切に表示されますが、リモートマシン上のファイルが存在しない場合、2行が結合されます。

例えば

次のようになります。

Operating System: 1.5.64 
sw_install: 1.16
Kate 1.1

しかし、リモートファイルが存在しない場合は

Operating System:  sw_install
Kate: 1.1

リモートファイルが存在しない場合(発生した場合)に行を分離するためのアイデア。ファイルが存在する場合、出力は望ましい外観ではないため、2つのsshコマンドの間に「echo」行を挿入する(または-nを削除する)だけでは不十分です。

本当に簡単な答えがあることを願っています。

ご助力ありがとうございます!!

echo -n "Operating System: "
ssh -t -o LogLevel=QUIET -o '''StrictHostKeyChecking no''' $NODENAME "cat /home/user/Version.txt"
echo -n "sw_intall: "
ssh -t -o LogLevel=QUIET -o '''StrictHostKeyChecking no''' $NODENAME "grep VERSION= /home/user/sw_install | cut -d'=' -f2 | tr -d '\"' |  head -1"
ssh -t -o LogLevel=QUIET -o '''StrictHostKeyChecking no''' $NODENAME "rpm -qv kate --qf \"         Kate:  %{VERSION}.%{RELEASE}\""

Centos 7.2

1
tj26

Catをtr -d '\n'にパイプし、コマンドの後に明示的に改行を追加することができます。

1
Tanami

echoはまったく使用しないでください。 printfを使用して、改行を明示的に追加します。これを変える:

echo -n "Operating System: "
ssh -t -o LogLevel=QUIET -o '''StrictHostKeyChecking no''' $NODENAME "cat /home/user/Version.txt"
echo -n "sw_intall: "
ssh -t -o LogLevel=QUIET -o '''StrictHostKeyChecking no''' $NODENAME "grep VERSION= /home/user/sw_install | cut -d'=' -f2 | tr -d '\"' |  head -1"
ssh -t -o LogLevel=QUIET -o '''StrictHostKeyChecking no''' $NODENAME "rpm -qv kate --qf \"         Kate:  %{VERSION}.%{RELEASE}\""

これに:

os=$(ssh -t -o LogLevel=QUIET -o '''StrictHostKeyChecking no''' $NODENAME "cat /home/user/Version.txt")
swInstall=$(ssh -t -o LogLevel=QUIET -o '''StrictHostKeyChecking no''' $NODENAME "grep VERSION= /home/user/sw_install | cut -d'=' -f2 | tr -d '\"' |  head -1")
kate=$(ssh -t -o LogLevel=QUIET -o '''StrictHostKeyChecking no''' $NODENAME "rpm -qv kate --qf \"         Kate:  %{VERSION}.%{RELEASE}\"")

printf 'Operating System: %s\nsw_intall: %s\nKate: %s\n' "$os" "$swInstall" "$kate"

または、ヒアドキュメントを使用します。

cat<<EoF
Operating System: $(ssh -t -o LogLevel=QUIET -o '''StrictHostKeyChecking no''' $NODENAME "cat /home/user/Version.txt")
sw_install: $(ssh -t -o LogLevel=QUIET -o '''StrictHostKeyChecking no''' $NODENAME "grep VERSION= /home/user/sw_install | cut -d'=' -f2 | tr -d '\"' |  head -1")
Kate: $(ssh -t -o LogLevel=QUIET -o '''StrictHostKeyChecking no''' $NODENAME "rpm -qv kate --qf \"         Kate:  %{VERSION}.%{RELEASE}\"")
EoF
1
terdon