Grep 명령이 예상 테스트 결과를 반환하지 않습니다.

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`과 함께 $(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

관련 정보