if 조건은 수동으로 실행될 때 조건이 true이지만 항상 false입니다.

if 조건은 수동으로 실행될 때 조건이 true이지만 항상 false입니다.

파일에서 주석으로 시작 mongo하지 않는 문자열을 검색하고 싶습니다 .#

homedir=`ls -d ~`

echo "$homedir"

if [[ `cat $homedir/2_need_softwares.txt | grep -v '^#' | grep -iq mongo` ]]; then

echo "Installing mongodb"

else

echo "skipping mongo"

fi

산출:

/root
skipping mongo

온라인 중centos 9

$ uname -a
Linux DKERP 5.14.0-134.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jul 21 12:57:06 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

보시다시피 if명령문은 실패하고 else따라서 실행됩니다.

하지만 if 조건을 수동으로 실행하면 성공이 표시됩니다.

$ cat /root/2_need_softwares.txt | grep -v '^#' | grep -iq mongo
$ echo $?
0

$ grep mongo /root/2_need_softwares.txt
mongo

내 상황에 무엇이 문제인지 제안해 주실 수 있나요 if?

또한 다음을 시도했습니다.

1. if [[ $(cat $homedir/2_need_softwares.txt | grep -v '^#' | grep -iq mongo) ]]; then

2. if [[ $("cat $homedir/2_need_softwares.txt | grep -v '^#' | grep -iq mongo") ]]; then

이는 의도된 bash것이며 POSIX선호됩니다.

답변1

문제는 상태가 아닌 명령 시퀀스의 출력을 테스트하고 있다는 것입니다.

이 시도

#!/bin/sh
if grep -v '^#' "$HOME/2_need_softwares.txt" | grep -iq mongo
then
    echo "Installing mongodb"
else
    echo "skipping mongo"
fi

관련 정보