2 つの find コマンド出力を単一の変数に追加しますが、ファイルには追加しません。

2 つの find コマンド出力を単一の変数に追加しますが、ファイルには追加しません。

私のユースケースは、2つの検索コマンドをファイルの代わりに単一の変数として出力することです。試してみて動作しないことがわかったいくつかの点は次のとおりです。

実際のfindコマンドは次のとおりです。

find /opt/apps -xdev -type f -name '*vunn*-2*jar'
find /opt/apps -xdev -type f -name '*robj-2*jar'

オプション1:2番目の出力のみを保存します。

temp_jars=$(find /opt/apps -xdev -type f -name '*vunn*-2*jar')
temp_jars=$(find /opt/apps -xdev -type f -name '*robj*-2*jar')

オプション2:基準引用する、以下で試しましたが、最初のコマンドのみが実行されました。

export temp_jars="$(find /opt/apps -xdev -type f -name '*vunn*-2*jar' && find /opt/apps -xdev -type f -name '*robj-2*jar')"

ご協力ありがとうございます。

ベストアンサー1

これを行う方法はいくつかあります。あなたの場合、最も簡単な方法はコマンドを組み合わせてfind全体の問題を避けることです。

temp_jars=$(find /opt/apps -xdev -type f \( -name '*vunn*-2*jar' -o -name '*robj-2*jar' \)

実際に複数のコマンドが必要な場合は、コマンドを個別に実行してから追加上書きする代わりに変数として出力します(これは実行してから実行する操作で、foo=bar最初foo=bazの変数を上書きするため、最後の変数のみを保持します)。

$ var=$(echo foo)
$ var="$var $(echo bar)"
$ echo "$var"
foo bar

または 1 つの手順で実行します。

$ var="$(echo foo; echo bar)"
$ echo "$var"
foo
bar

&&(代わりに)を使用した方法は、;最初のコマンドが成功した場合にのみ2番目のコマンドが実行されることを意味します。したがってfind、何らかの理由で最初のコマンドが失敗した場合(find結果がない場合、そのコマンドは失敗し、エラーのみが発生します)、たとえば、存在しないディレクトリから検索するように指示した場合、2番目のディレクトリは実行されません。あなたの場合には&&失敗した理由はありません。うまくいかないのか?

おすすめ記事