Centos

儘管手動執行時條件為真,如果條件始終為假

  • September 4, 2022

我希望搜尋一個字元串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是首選的。

問題是您正在測試命令序列的輸出而不是狀態。

試試這個

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

引用自:https://unix.stackexchange.com/questions/716128