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` で $(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
答え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しても、テストは次のよう[ ! ... ]
になります。
[ ! ]
これはテスト構成の「単一引数形式」であり、単一文字文字列が空でないことをテストします。!
これは常にtrueです。
テスト終了ステータス使用できる grep コマンドは次のとおりです。
grep -Fq 'TMOUT' /etc/profile.d/sh.local && echo $?
また、見ることができます
同様に、
[ $(grep -Fxq 'TMOUT' /etc/profile.d/sh.local) ==1 ]
~になる
[ ==1 ]
これは、少なくともメッセージでエラーが発生する文字列を==1
作成しようとしたときにnullでないかどうかをテストします。== 1
[: ==: unary operator expected