web-dev-qa-db-ja.com

aptは「不安定なCLIインターフェイス」警告を表示します

私はこの行を書いたパッケージの情報を含むファイルを読む必要があるスクリプトを書いています

apt show $PACKAGE_NAME > pack_info.txt

ただし、これはpack_info.txtファイルを作成せず、常にこの警告を表示します。

警告:aptには安定したCLIインターフェースがありません。スクリプトでは注意して使用してください。

当分の間、&>を使用してSTDOUTSTDERRの両方をリダイレクトしようとしましたが、必要なファイルpack_info.txtを提供することができました。

また、dpkgからコンテンツを取得しようとしましたが、それも機能しました:

dpkg -s $PACKAGE_NAME > pack_info.txt

警告もエラーも表示されないのは良いことです。

Dpkgを使いたくなく、aptのSTDOUTだけをファイルにリダイレクトしたいのは悪いことです。

だから、私は尋ねる3つの質問があります:

  1. Stable CLI Interfaceとはどういう意味ですか?
  2. スクリプトでこのようなコマンドを安全かつエラーなしで使用するにはどうすればよいですか? [例で説明してください]
  3. apt showのSTDOUTのみをファイルにリダイレクトする方法はありますか?
53
C0deDaedalus

aptは端末用であり、美しい出力を提供しますが、apt-getおよびapt-cacheはスクリプト用であり、安定した解析可能な出力を提供します。したがって、apt showコマンドに相当するスクリプトは次のとおりです。

apt-cache show $PACKAGE_NAME >pack_info.txt

質問に1つずつ答えます。

安定したCLIインターフェースとはどういう意味ですか?

aptの出力は、スクリプトではうまく使用できません。たとえば、apt installapt-get installと比較して)は、スクリプトには役に立たない進行状況バーを表示し、出力の解析時にエラーをスローする可能性があります。 apt show firefoxは追加のレコードのヒントを示しますが、これもスクリプトではまったく役に立たないので、単にeveryレコードをそこに出力したいだけです-それがapt-cache show firefoxします。それについてman aptが言っていることを見てみましょう:

apt(8)コマンドラインはエンドユーザーツールとして設計されており、バージョン間で動作が変わる場合があります。下位互換性を損なわないように努めていますが、変更がインタラクティブな使用に有益と思われる場合も、これは保証されません。

apt(8)のすべての機能は、apt-get(8)やapt-cacheなどの専用APTツールで利用できます。 =(8)も同様です。 apt(8)は、一部のオプションのデフォルト値を変更するだけです(apt.conf(5)、特にBinaryスコープを参照)。したがって、可能な限り下位互換性を維持するため、スクリプトでこれらのコマンドを使用することをお勧めします(いくつかの追加オプションを有効にして)。


スクリプトでこのようなコマンドを安全かつエラーなしで使用するにはどうすればよいですか?

単純なaptの代わりに、それぞれapt-getまたはapt-cacheを使用してください。 :)同等のリストについては、 this answer を参照してください。


AptショーのSTDOUTのみをファイルにリダイレクトする方法はありますか?

すでに正しくしました。>fileまたは1>fileはstdoutをリダイレクトし、2>fileはstderrをリダイレクトし、&>fileは両方をfileにリダイレクトします。

70
dessert