2016-02-05 33 views
4

嗨我想写一个简单的bash脚本来附加到屏幕会话。如果会话尚未启动,则会启动它并尝试重新附加。Bash IF语句:命令输出的字符串比较总是假的

我遇到的问题是与if语句;它应该将屏幕命令的输出与失败消息进行比较,如果它们相等,则继续开始会话并附加。但它总是会else子句,打印出我是核对错误消息:■

两个字符串包含相同的事情:“有没有要附加匹配sctest屏”

但庆典认为他们是不同的...

这里的bash脚本,我缺少什么?

#!/bin/bash 

screenOutput=$(screen -aA -x sctest); 
failString="There is no screen to be attached matching sctest."; 

if [ "$screenOutput" = "$failString" ]; then 
    echo "screen session not started. starting now..."; 

    # . ./init.sh 

    # echo $(screen -aA -x sctest); 
else 
    echo "$screenOutput"; 
fi 
+0

我几乎就发现了问题,因为我张贴。我通过删除显示我在$ screenOutput末尾有一个\ r的空格来创建if行错误。如果有人用命令查看这些不可见字符,那么这将是一个非常感谢的接受答案:) – nevernew

+0

什么是字符串存储screenOutput。请使用echo检查。 – Varun

+3

它失败了,因为存储在'screenOutput'中的输出被'^ M'终止。您可以运行cat -vET <<<“$ screenOutput”'来查看违规字符。 – alvits

回答

3

使用set -x(或调用bash -x yourscript),因为它是用的方式,使隐藏的字符可见和人类可读的扩展值评价打印的每一行。

最有可能的,你将看到类似以下内容:

[ 'There is no screen to be attached matching sctest' = $'There is no screen to be attached matching sctest\r' ] 

...与后者有上年底\r。这是一个回车。

要删除它,你可以修改代码如下所示:

screenOutput=$(screen -aA -x sctest) 
screenOutput=${screenOutput%$'\r'} 
+0

谢谢!我可以搜索什么来获取有关'$ {screenOutput%$'\ r'}'正在做什么的更多信息,Google似乎不再关心特殊字符:/ – nevernew

+2

请参阅http://wiki.bash-hackers .ORG /语法/ PE –