シェル スクリプトで 2 つの find コマンド出力を使用してエクスポート変数を渡す方法

シェル スクリプトで 2 つの find コマンド出力を使用してエクスポート変数を渡す方法

スクリプトの一部として検索コマンドがあり、以下のように値を変数にエクスポートします。

export value1="'find /app/new1 -name '*service.sh*'"

テストした後、いくつかのホストではディレクトリが以下のように異なることに気付きました。

/sbclocal/app/new1

両方をチェックして同じ値に渡すにはどうすればよいですか?

このスクリプトを見つけて、後で停止または開始して実行します。

答え1

質問を正しく理解していれば、望ましい状態を達成する方法はいくつかあります。

  1. find複数のパスの指定をサポートします。したがって、次のように記述しても問題ありません。

    export value1="$(find /app/new1 /sbclocal/app/new1 -name '*service.sh*')"
    

    いずれかのディレクトリが欠落している場合はエラー メッセージが生成されますが、(方法によっては) スクリプト全体には影響しない可能性があります。

  2. 2 つのコマンドを値に渡します。

    export value1="$(find /app/new1 -name '*service.sh*' && find /sbclocal/app/new1 -name '*service.sh*')"
    

    このオプションは、質問に近い回答(2 つのコマンドを同じ変数に渡す)を提供しますが、より良い解決策のようには見えません。

  3. チェックの方法:

    export value1="$(for dir in /app/new1 /sbclocal/app/new1; do [ -d $dir ] && find $dir -name '*service.sh*'; done)"
    

関連情報