「LANG = C; sudo apt-get clean」などが推奨されるのはなぜですか?


16

このWikiページに出会ったのは、パッケージマネージャーのトラブルシューティング手順です。

その中には、次のようなコマンドがありました。

LANG=C;sudo apt-get clean
LANG=C;sudo apt-get autoclean
LANG=C;sudo apt-get -f install
LANG=C;sudo apt-get --fix-missing install
LANG=C;sudo apt-get --purge autoremove
LANG=C;sudo apt-get --fix-missing update -o APT::Cache-Limit=100000000
LANG=C;sudo apt-get update -o APT::Cache-Limit=100000000 && sudo apt-get dist-upgrade

それでは、目的はLANG=C;何ですか?



8
その文書が誤ってコマンドを使用していることに注意してください-それはあるべきLANG=C commandではなくLANG=C;command。最初の形式LANGは期間中に環境変数の値を強制しますがcommand、2番目の形式は実際には2つのコマンドであり、最初の部分はローカル(エクスポートされていない)変数を設定するだけで、2番目の部分は必要な環境変数を設定せずにコマンドを実行します。
グス

2
@Guss:実際には、セミコロンでも動作します。どうして?LANGはターミナルウィンドウを開いたときの既存の環境変数であり、その値を別のコマンドとして変更すると、その値は再度変更するかプロセスが終了するまで有効な環境変数になります。
グンナルHjalmarsson

3
@Gunnar-それは間違っています:おそらくLANG環境にあるので、おそらく冗長なセミコロンで動作します。ただし、(1)LANGコマンド間で何も変更されないため、冗長です。また、そのような方法でコマンドを実行するように誰かに示唆することは、(2)不必要で招待されていない環境の変更のために間違っています、そして(3)これは、後で使用を再適用する情報のないユーザーに間違ったパターンを提供します-おそらくではないシェル変数環境。したがって、正しい、おそらく安全な機能のために環境を必要とするコマンドの実行に影響を与えません。
FooF

2
@Braiam私は構文に精通していますが、変数がエクスポートされない限り、コマンドには表示されないことに注意することが重要です。LANGは標準の環境変数であるため、デフォルトでエクスポートされますが、他の変数はそうではない可能性があり、OPはそれを認識する必要があります。
グス

回答:


26

トラブルシューティングを行っている場合、結果を何らかのフォーラムに投稿するか、遅かれ早かれここに投稿するでしょう。

その場合、他のユーザーがあなたのログと出力を理解するのは、彼らが国際化されていなければ、はるかに簡単です。

つまり、フランス語、中国語、ヒンディー語などをシステム言語として使用している場合、出力ではその言語の用語が使用される可能性が高いため、何が起こっているのかを理解するのがさらに難しくなります。

Cロケールは、デフォルトの出力(通常はASCIIのみの英語)を強制します。

次の方法でトラブルシューティングセッションを開始することをお勧めします。

export LC_ALL=C

特定のロケール変数を設定したり、特定のコマンドだけに設定したりする代わりに。


10

LANG=C端末出力をデフォルトのロケールにフォールバックします。このガイドでは、サポートのために出力をLaunchpadに送信することを推奨しているため、貼り付けたときに他のユーザーが通常使用する言語に関係なく読み込めるように、これを行う必要があります。


3

私がそれをソフトウェアの非常に安定した部分と考えるので、おそらくそれはおそらくaptの場合には適用されませんが、小さな追加:

一部のプログラムは、LANGに異なる設定(またはCまたはen_USと少なくとも異なる)を使用すると、悪名高い誤動作をします。

Unityにはこれらの問題(およびUnityベースのゲーム)がありました(まだありましたか?)、Unreal Engineにもいくつかの問題がありました。また、Android用のビルドスクリプトの一部は、LANG = Cでのみ適切に実行されるか、このように設定されたこの環境変数でのみコンパイルされました。

そのため、この設定ではバグが発生しない可能性があるため、トラブルシューティングにも役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.