Grep 命令未返回预期的测试结果

Grep 命令未返回预期的测试结果

我试图在将条件附加到 profile.d 文件之前进行比较

Agrep -F 'TMOUT' /etc/profile.d/sh.local准确地向我展示了我所期望的结果,但测试始终显示为真。在所有这些示例中,我已经将我想要的信息附加到 sh.local 但如果存在的话我不想再次执行此操作。

[ ! `grep -Fq 'TMOUT' /etc/profile.d/sh.local` ] && echo $?
0
[ ! `grep -Fq 'NOT_PRESENT' /etc/profile.d/sh.local` ] && echo $?
0

虽然这是针对 .ebextension 命令的,但在我尝试部署之前测试就失败了,我想最终结果应该如下所示,但我显然错了。我尝试过使用 $(grep) 与 `grep` 。还有==1 vs !

  01_hard_5.4.5_shell_timeout:
    test: "[ $(grep -Fxq 'TMOUT' /etc/profile.d/sh.local) ==1 ]"
    command: |
      printf '\nTMOUT=300\nreadonly TMOUT\nexport TMOUT\n' | sudo tee -a /etc/profile.d/sh.local >/dev/null

根据记录,这是 Amazon Linux 2,以下命令会输出以下内容

grep -F 'TMOUT' /etc/profile.d/sh.local
TMOUT=300
readonly TMOUT
export TMOUT

grep -F 'NOT_PRESENT' /etc/profile.d/sh.local

答案1

[ ! `grep -Fq 'TMOUT' /etc/profile.d/sh.local` ] && echo $?
0
[ ! `grep -Fq 'NOT_PRESENT' /etc/profile.d/sh.local` ] && echo $?
0

grep 命令周围的反引号构成命令替换,返回命令的标准输出。由于您使用了-q,标准输出始终为空,因此无论您 grep 的字符串是什么,您的[ ! ... ]测试都会变成

[ ! ]

这是测试构造的“单参数形式”,并测试单字符字符串的非空性!- 这始终为真。

测试退出状态您可以使用的 grep 命令:

grep -Fq 'TMOUT' /etc/profile.d/sh.local && echo $?

也可以看看


同样地,

[ $(grep -Fxq 'TMOUT' /etc/profile.d/sh.local) ==1 ]

变成

[ ==1 ]

它测试 string 的非空性==1;您可能打算写== 1这至少会因消息而出错[: ==: unary operator expected- 请参阅

相关内容