Bash
Grep 命令未返回預期的測試結果
在將條件附加到 profile.d 文件之前,我正在嘗試進行比較
A
grep -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) vs
grep
。還有 ==1 對 !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
在
[ ! `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 -Fq 'TMOUT' /etc/profile.d/sh.local && echo $?
也可以看看
同樣地,
[ $(grep -Fxq 'TMOUT' /etc/profile.d/sh.local) ==1 ]
變成
[ ==1 ]
測試 string 的非空性
==1
;您可能打算寫== 1
至少會出錯的消息[: ==: unary operator expected
- 請參閱