ファイルからコメントで始まら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