Linuxで実行されているスクリプトでコマンドを呼び出しています。この例では、ls
ディレクトリの内容を一覧表示します。
ls
スクリプトから呼び出されると、while
出力を1行ずつ読み取る簡単なループを実行します。
echo
次に、二重引用符(たとえば)を使用して行を印刷しますecho "$line"
。すべての行をエコーしますが、すべてのスタイル(色)を失います。
ライン作業を直接しながら外観を維持するにはどうすればよいですか?
答え1
これには2つの問題があります。まず、ディレクトリ内のファイルを処理する方法が完全に間違っています。ファイル名に改行やその他の奇妙な内容が含まれていると、機能が停止します。バラよりhttp://mywiki.wooledge.org/ParsingLsもっと学ぶ。
つまり、色はls
オプションです。多くのLinuxディストリビューションでは、このコマンドは実際にttyで印刷するとき(たとえば、ループとは対照的に)色を有効にするls
エイリアスです。ls --color=tty
ただし、エイリアスは通常スクリプトで有効になっていないため、スクリプトで実行すると色なしで正常に実行されます。ls
while
ls
ls
したがって、最初の回避策はを呼び出すことですls --color=always
。これにより、色を一致させることができます。しかし、最初の段落で述べたように、これはほぼ間違いなく悪い考えです。一方で各行を印刷したい場合は、ただ実行してループをls
忘れてしまうのはどうでしょうか?while
他の理由でファイルを処理する必要があり、まだ使用する場合は、ls
globbingを使用してファイルのリストをインポートし、ls
各ファイルを手動で実行します。
for file in *; do
ls -d --color=always -- "$file"
done
奇妙なファイル名で問題は発生せず、必要に応じて色が表示され続けます。