スクリプトでのコマンド呼び出しとスタイルの維持

スクリプトでのコマンド呼び出しとスタイルの維持

Linuxで実行されているスクリプトでコマンドを呼び出しています。この例では、lsディレクトリの内容を一覧表示します。

lsスクリプトから呼び出されると、while出力を1行ずつ読み取る簡単なループを実行します。

echo次に、二重引用符(たとえば)を使用して行を印刷しますecho "$line"。すべての行をエコーし​​ますが、すべてのスタイル(色)を失います。

ライン作業を直接しながら外観を維持するにはどうすればよいですか?

答え1

これには2つの問題があります。まず、ディレクトリ内のファイルを処理する方法が完全に間違っています。ファイル名に改行やその他の奇妙な内容が含まれていると、機能が停止します。バラよりhttp://mywiki.wooledge.org/ParsingLsもっと学ぶ。

つまり、色はlsオプションです。多くのLinuxディストリビューションでは、このコマンドは実際にttyで印刷するとき(たとえば、ループとは対照的に)色を有効にするlsエイリアスです。ls --color=ttyただし、エイリアスは通常スクリプトで有効になっていないため、スクリプトで実行すると色なしで正常に実行されます。lswhilelsls

したがって、最初の回避策はを呼び出すことですls --color=always。これにより、色を一致させることができます。しかし、最初の段落で述べたように、これはほぼ間違いなく悪い考えです。一方で各行を印刷したい場合は、ただ実行してループをls忘れてしまうのはどうでしょうか?while

他の理由でファイルを処理する必要があり、まだ使用する場合は、lsglobbingを使用してファイルのリストをインポートし、ls各ファイルを手動で実行します。

for file in *; do
    ls -d --color=always -- "$file"
done

奇妙なファイル名で問題は発生せず、必要に応じて色が表示され続けます。

関連情報