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

おすすめ記事