bashコマンドにディレクトリ名のみを渡す

bashコマンドにディレクトリ名のみを渡す

次のディレクトリ名があります。

/aaa
/bbb
/ccc
/ddd

ディレクトリ名を渡して次のコマンドを実行したいと思います。エルエス:

ls | composer show drupal/MY_DIRECTORY_NAME_HERE --available | ack versions

このComposerコマンドに渡されたディレクトリ名を繰り返す1行のコマンドをどのように作成できますか?

ベストアンサー1

コマンドを既存のすべてのサブディレクトリに適用したいので、最もきれいな方法(特殊文字を含むディレクトリ名の問題を回避する方法)は次のとおりです。

for dir in */
do
   composer show drupal/"$dir" --available | ack versions
done

これは、隠されていないすべてのディレクトリとディレクトリへのシンボリックリンク(/後続のglobパターンのため)を繰り返し、現在のディレクトリでコマンドを実行します。

これは、コマンドが末尾のパスを持つディレクトリパスを受け入れると想定していることに注意してください/。そうでない場合は、一部のシェル文字列操作を実行して削除すると/役に立ちます。

for dir in */
do
   composer show drupal/"${dir%/}" --available | ack versions
done

補足説明:

  1. もちろん一行で作成することも可能です。
    for dir in */; do composer show drupal/"$dir" --available | ack versions; done
    
  2. 次のように、明示的なディレクトリ名のリストを繰り返すようにコマンドを調整できます。
    for dir in '/aaa' '/bbb' '/ccc'
    do
        ...
    done
    
    実際のディレクトリ名に特殊文字が含まれている場合は、個々のリスト項目を引用符で囲む必要があります(ただし、引用符だけでは不十分な状況があるため、上記のグローバルベースのアプローチは依然として最も安全です)。

おすすめ記事