Bash &引用;太多的争论”;shell脚本中出现错误
这是我的剧本:Bash &引用;太多的争论”;shell脚本中出现错误,bash,shell,syntax,Bash,Shell,Syntax,这是我的剧本: if [ awk '$0 ~ /Failed/ { print }' $(pwd)/unity.log ]; then echo "Build Failed" exit 1 else echo "Build Success" exit 0 fi 要点是,我正在检查文件中是否有“Build Failed”消息,如果失败,则退出1 如果我所理解的是正确的,awk将在文件中没有文本时返回空字符串,如果找到文本则返回一些文本。但它会出现语法错误:/Scr
if [ awk '$0 ~ /Failed/ { print }' $(pwd)/unity.log ]; then
echo "Build Failed"
exit 1
else
echo "Build Success"
exit 0
fi
要点是,我正在检查文件中是否有“Build Failed”消息,如果失败,则退出1
如果我所理解的是正确的,
awk
将在文件中没有文本时返回空字符串,如果找到文本则返回一些文本。但它会出现语法错误:/Scripts/build.sh:line 41:[:参数太多
请删除[]
,使用grep
:
if grep -qw Failed unity.log; then
echo "Build Failed"
exit 1
else
echo "Build Success"
exit 0
fi
删除
[]
,使用grep
:
if grep -qw Failed unity.log; then
echo "Build Failed"
exit 1
else
echo "Build Success"
exit 0
fi
试试这个:
if [ ! "$(grep 'Build Failed' unity.log)" ]; then
exit 1
fi
试试这个:
if [ ! "$(grep 'Build Failed' unity.log)" ]; then
exit 1
fi
您可以利用默认的退出值0。此外,没有理由执行
$(pwd)/filename
;只需执行filename
grep -qw Failed unity.log || { echo "Build Failed"; exit 1; }
echo "Build Success"
将失败时的错误消息发送到
stderr
(使用echo>&2
)也更为惯用。您可以利用默认退出值0。此外,没有理由执行$(pwd)/filename
;只需执行filename
grep -qw Failed unity.log || { echo "Build Failed"; exit 1; }
echo "Build Success"
使用
[
..]
将失败时的错误消息发送到stderr
(使用echo>&2
)。使用[
..]
和grep
的输出是浪费。只需将grep
用作if条件本身。使用[
..]
和grep
的输出是浪费的。只需将grep
用作if条件本身。$(pwd)
?说真的,如果文件在当前工作目录中,附加完整的目录名有什么意义?$PWD
将在不执行子shell的情况下给出相同的结果。@alvits-I将其删除。它在OP的代码中,这就是它如何到达那里的。$(PWD)
?说真的,如果文件在当前工作目录中,附加完整的目录名有什么意义?$PWD
将在不执行子shell的情况下给出相同的结果。@alvits-我删除了它。它在OP的代码中,这就是它如何得到的。