web-dev-qa-db-ja.com

なぜlsは一部のファイル名を一重引用符で囲むのですか?

ターミナルでlsを実行すると、一部のファイル名が一重引用符で囲まれているものとそうでないものがあることに気付きました。

端末の出力をナイスで統一することを好むため、これがどのように見えるかは気に入らない。この機能の原因は何ですか?それを安全に無効にすることは可能ですか?

enter image description here

8
Hashim

lsが一部のファイル名を一重引用符で囲む理由

lsは、ファイル名を安全にコピーしたり、スクリプトで使用したり、別のコマンドでパイプしたりできるようにするために、ファイル名をスペースで囲んで一重引用符で囲みます。

enter image description here

これは 非常に人気のない 機能 バージョン8.25で導入 GNU coreutilsパッケージの最近の2016年、たった3人の開発者のコ​​ンセンサス。

変更の批評家によって引用された議論は、それがlsの出力をかなり見苦しく見えるようにすることを含みます 不必要に Unixの伝統のほぼ半世紀から逸脱し、実装(オプトインではなくオプトアウト)すると、長年の既存のスクリプトやユーティリティとの互換性が失われます。

この機能がcoreutilsパッケージに導入されたため-事実上すべてのLinuxディストリビューションが依存し、どのlsがその一部であるか-変更は、Arch Linuxから考えられるすべてのLinuxまたはLinuxのようなシステムに影響しますCygwinに。

DebianやUbuntuのようなDebian派生のディストリビューションの場合、かなりの抗議の後、変更はある時点で元に戻され、その後 2017年10月に再び復活 になります。

この回答で明らかになります なので、この変更に対する失望を登録する最善の方法は、バグレポートを介してcoreutils開発者に直接連絡し、(丁寧に)それらについての議論を行うことです。大きな間違いをしました。オープンソースの精神に従い、敬意を表して、しかし断固として、lsの動作が適切に回復することを強く主張するユーザーは、理論的にはcoreutils開発者にLinuxコミュニティ。

より短期的で実用的な意味で、ls 'を復元する方法はいくつかあります。バージョン8.25すべてを残すという動作そのまま出力。以下は、bashシェルでこれを行う3つの方法です。


ls '以前のバージョン8.25の動作を復元する

QUOTING_STYLEファイルで~/.bashrc環境変数をliteralに設定します

HOMEフォルダー(~/.bashrc)で/home/yourusernameファイルを見つけ、それに次の行を追加します。

export QUOTING_STYLE=literal

ファイルを保存すると、開いたすべての新しいbashターミナルに変更がすぐに適用されます。

source ~/.bashrcを実行して、変更を加えたときに開いていたターミナルウィンドウに変更をプッシュすることもできます。

ls -Nのエイリアスを作成します

環境変数にエイリアスを使用する場合は、8.27の新しい.bashrcスイッチを使用して、-Nにエイリアスを作成することもできます。 ls --helpから:

-N-literal引用なしでエントリ名を出力

これを行うには、次の行を~/.bashrcファイルに追加して保存します。

alias ls="ls -N"

source ~/.bashrcを実行して、開いているすべてのターミナルに新しい変更をプッシュします。

-Nコマンドラインスイッチを使用する(現在の実行のみ)

coreutils '新しいデフォルトの動作を使用したいが一時的にそれをバイパスしたい場合は、-Nスイッチをコマンドで直接使用することもできます。

ls -N
14
Hashim