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