我试图在将条件附加到 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
- 请参阅