私はこの行を書いたパッケージの情報を含むファイルを読む必要があるスクリプトを書いています
apt show $PACKAGE_NAME > pack_info.txt
ただし、これはpack_info.txt
ファイルを作成せず、常にこの警告を表示します。
警告:aptには安定したCLIインターフェースがありません。スクリプトでは注意して使用してください。
当分の間、&>
を使用してSTDOUT
とSTDERR
の両方をリダイレクトしようとしましたが、必要なファイルpack_info.txt
を提供することができました。
また、dpkg
からコンテンツを取得しようとしましたが、それも機能しました:
dpkg -s $PACKAGE_NAME > pack_info.txt
警告もエラーも表示されないのは良いことです。
Dpkgを使いたくなく、aptのSTDOUTだけをファイルにリダイレクトしたいのは悪いことです。
だから、私は尋ねる3つの質問があります:
apt show
のSTDOUTのみをファイルにリダイレクトする方法はありますか?apt
は端末用であり、美しい出力を提供しますが、apt-get
およびapt-cache
はスクリプト用であり、安定した解析可能な出力を提供します。したがって、apt show
コマンドに相当するスクリプトは次のとおりです。
apt-cache show $PACKAGE_NAME >pack_info.txt
質問に1つずつ答えます。
安定したCLIインターフェースとはどういう意味ですか?
apt
の出力は、スクリプトではうまく使用できません。たとえば、apt install
(apt-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
にリダイレクトします。