forループでファイルを無視する方法

forループでファイルを無視する方法

サーバーの再起動時に複数のサービスを起動するスクリプトを作成しています。これを行うには、ディレクトリを繰り返しながら各ディレクトリにstart.shスクリプトがあることを確認している場合は、そのスクリプトを呼び出します。ただし、このタスクの一部として選択した名前のサービスを無視するようにスクリプトを設定したいと思います。この場合、mongoは次のようになります。

for service in $HOME/start/* ; do
    if [ -e $HOME/start/$service/start.sh ] && [ $service != mongo ]
        then
            cd $HOME/start/$service
            ./start.sh
    else
        pwd
        echo "No start script found for $service"
    fi
done

これは、サービスの前提条件として、このループが呼び出される前にmongoが起動され、一度に複数のインスタンスを持つことができないためです。しかし、ループを続けてmongoを呼び出します。これを無視するにはどうすればよいですか?

編集:appNameをサービスに変更

ベストアンサー1

glob を使用してファイルを繰り返すと、パスがファイルに追加されます。したがって、ファイルが単にmongo(コードに基づいている必要があり、そうでない場合でも問題になります)、ループはに設定され、等しくないことを確認しよservice/home/<YOUR USER>/start/mongoとします。mongo次の方法を使用してbasename問題を解決できます。

for s in "$HOME/start/"*
do
    service=$(basename "$s")
    if [ -f "$HOME/test/$service/start.sh" ] && [ "$service" != mongo ]
    then
            cd "$HOME/start/$service"
            ./start.sh
    else
            pwd
            echo "No start script found for $service"
    fi
done

おすすめ記事