파일에서 주석으로 시작 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