Bash IF 语句:命令输出的字符串比较始终为 false
Bash IF statement: string comparison of command output always false
您好,我正在尝试编写一个简单的 bash 脚本来附加到屏幕会话。如果会话尚未启动,那么它将启动它并尝试再次附加。
我遇到的问题是 if 语句;它应该将 screen 命令的输出与失败消息进行比较,如果它们相等,则继续启动会话并附加。但它总是转到 else 子句,打印出我正在检查的错误消息 :s
两个字符串包含相同的内容:
"There is no screen to be attached matching sctest."
但bash认为它们不同...
这是 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
使用 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
。这是马车-return.
要删除它,您可以像这样修改代码:
screenOutput=$(screen -aA -x sctest)
screenOutput=${screenOutput%$'\r'}
您好,我正在尝试编写一个简单的 bash 脚本来附加到屏幕会话。如果会话尚未启动,那么它将启动它并尝试再次附加。
我遇到的问题是 if 语句;它应该将 screen 命令的输出与失败消息进行比较,如果它们相等,则继续启动会话并附加。但它总是转到 else 子句,打印出我正在检查的错误消息 :s
两个字符串包含相同的内容:
"There is no screen to be attached matching sctest."
但bash认为它们不同...
这是 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
使用 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
。这是马车-return.
要删除它,您可以像这样修改代码:
screenOutput=$(screen -aA -x sctest)
screenOutput=${screenOutput%$'\r'}