在某些脚本执行grep时编辑文件会产生任何影响

时间:2015-02-12 06:27:41

标签: linux bash shell grep

我正在尝试根据文件中没有的某些文本做出某些决定,但问题是当我的shell脚本在其中执行grep时文件将被修改。

#!/bin/bash
grep -q "decision" /home/tejto/test/testingshell
ret_code=$?
while [ $ret_code -ne 0 ]
do
  echo $ret_code
  grep -q "decision" /home/tejto/test/testingshell
  echo 'Inside While!'
  sleep 5
done
echo 'Gotcha!'

案文"决定"在启动此shell脚本时,文件中不存在该文件,但是当我通过其他某个bash提示修改此文件并将文本放在文本“#39; decision'在它,在这种情况下,我的脚本没有采取这种改变,它继续循环,所以这是否意味着我的shell脚本缓存该特定文件?

1 个答案:

答案 0 :(得分:1)

因为您只在外部循环中设置ret_code变量,而在下一个grep -q命令之后不再在循环内设置它。

要解决此问题,您需要:

grep -q "decision" /home/tejto/test/testingshell
ret_code=$?
while [ $ret_code -ne 0 ]
do
  echo $ret_code
  grep -q "decision" /home/tejto/test/testingshell
  ret_code=$?
  echo 'Inside While!'
  sleep 5
done
echo 'Gotcha!'

或者你可以这样缩短你的脚本:

#!/bin/bash

while ! grep -q "decision" /home/tejto/test/testingshell
do
  echo $?
  echo 'Inside While!'
  sleep 5
done
echo 'Gotcha!'

即。无需使用变量并在grep -q条件下直接使用while

  

[编辑:Tejendra]

#!/bin/bash

    until grep -q "decision" /home/tejto/test/testingshell
    do
      echo $?
      echo 'Inside While!'
      sleep 5
    done
    echo 'Gotcha!'

最后一个解决方案不会使用ret_code并将所需结果作为第一个解决方案。