在 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