我正在寻找一个动作,当bahsscript在我家的文件中找到一个字符串,但不知何故它不起作用,我不明白为什么.. 我的印象是我的grep不返回0(而字符串确实存在于文件中)。
#!/bin/bash
find /home/ -type f | xargs grep -q 'stringtofind'
if [ $? == 0 ] #if the result is not equal to zero
then
echo "Action"
else
echo "Pas d'action"
exit 1
fi
exit 0
当我执行以下操作时,我的shell会返回123而不是0
find /home/anselmewebsite/ -type f | xargs grep -q 'stringtofind' ; echo $?
shell returns : 123
提前感谢您的亮点,
答案 0 :(得分:2)
您可以使用grep的-r
选项以递归方式在文件夹中创建grep:
grep -r yourstring /path/to/your/folder
来自man page:
-R,-r, - recursive
递归地读取每个目录下的所有文件;这相当于-d recurse选项。
答案 1 :(得分:2)
这是xargs的返回代码,如果你查看手册,你会发现:
123如果命令的任何调用退出状态为1-125
这意味着你的grep返回了一个非零的退出代码,当grep与字符串不匹配时就是这种情况:
通常情况下,如果找到选定的行,则退出状态为0,否则为1。
所以我强烈建议您使用带有-R递归选项的grep,如果任何文件中存在匹配,则应返回0。在上面的示例中,只要您有一个不包含搜索模式的文件,xargs将返回123并且脚本的逻辑会中断。