Makefileイディオムは、最初に使用可能なディレクトリにインストールされます。

Makefileイディオムは、最初に使用可能なディレクトリにインストールされます。

ファイルの生成その中でもBash完了スクリプトのインストール:

install [...] /etc/bash_completion.d/

これはUbuntuではうまく機能しますが、Arch Bashでは完成機能があります/usr/share/bash-completion/completions

それは何ですか?一般的なGNUまたはPOSIXmake方式これを処理しようとしている?次の機能を備えた良いソリューションが欲しいです。

  1. コマンドが失敗した場合、installターゲットも失敗するはずです。
  2. 作成された順序でディレクトリのリストに移動します。最初の既存のディレクトリ(存在する場合):
    1. ファイルがない場合はインストールしてください。
    2. ファイルが存在し、最新でない場合(make意味論に従って)、ファイルを上書きします。
    3. ファイルが存在し、最新の場合はファイルをスキップします。
    4. ディレクトリの処理を停止します。
  3. これはいいえファイルがどこにもインストールされていない場合は、エラーが表示されます。
  4. これはいいえMakefileファイルがすでに1つのディレクトリにインストールされており、後続の実行でそのファイルを別のディレクトリにインストールすると、エラーが発生します(この場合も処理しないでください)。つまり、ディレクトリのリストが与えられた/a /b場合

    1. 作る/b,
    2. ファイルをに入れ/b
    3. その後/a
    4. 走るmake

    Makefileしなければならないいいえ/bすべての存在が検出されました。

  5. これはいいえディレクトリがないとエラーが発生します。
  6. どのディレクトリを試したかについてのフィードバックがあれば良いですが、必須ではありません。

ベストアンサー1

確かなスクリプトソリューションは次のとおりです。

for dir in /etc/bash_completion.d /usr/share/bash-completion/completions; \
do \
    if [ -d "$$dir" ]; \
    then \
        install [...] "$$dir" || exit 1; \
        break; \
    fi; \
done

しかし、これは良くありません。

  • 多くのエスケープ文字
  • || exit 1エラーを確認するには、醜いツールを使用する必要があります

そして、ファイルが最新であることを確認しません(ポイント2.2、2.3)。

おすすめ記事