如何从 ssh 命令向“无文本返回”添加换行符

如何从 ssh 命令向“无文本返回”添加换行符

在 Qt5 应用程序中,我有一个 bash 脚本,它运行来检查其他远程计算机(我通过 ssh 连接到的)上的某些文件的版本号。

我有 100 多台机器可以运行这个脚本。如果我通过 sshed 进入的计算机具有我正在查找的文件,则脚本输出会很好地显示,但如果远程计算机上的文件不存在,则我的两行会连接在一起。

例如

应该看起来像这样:

Operating System: 1.5.64 
sw_install: 1.16
Kate 1.1

但如果远程文件不存在我得到

Operating System:  sw_install
Kate: 1.1

如果远程文件不存在(如果确实发生),有任何想法可以将行分开。我不想只是想在两个 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}\""

森托斯 7.2

答案1

您可以通过管道 cattr -d '\n'并在命令后显式添加换行符。

答案2

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

相关内容