コマンドと出力に異なる色


13

Linuxでのコマンドの出力の色を、入力したコマンドラインの色とは異なる色に変更できるかどうか疑問に思っていました。お気に入り、

@USER/Destop$ ----> blue
/*
--------------
output file in white
-----------
*/

ありがとう


2
precmd_functionsを使用すると、プロンプトの色を変更して、preexec_functionsなどの前に戻すことができます。(他のシェルの等価があるかどうzshの中で、私は知りません)
pataluc

私はちょうど私の提案を試してみましたが、コマンドの色が表示されません... :(
pataluc

1
@pataluc:私は成功しましたpreexec () { echo -n "\\e[40;34m" }; このprecmd関数は私見では必要ありません。zshはプロンプトを表示する前に色自体をリセットするようです。しかし、それはls、アーロンが指摘したように、色自体を変更しないコマンド(顕著な例は)に対してのみ機能します。ではcatbcシェルコマンド組み込みなど(さえalpine)これは罰金を動作します。
mpy

@mpy私は追加のRajは、コマンドではなく、結果を色付けしたいと仮定すると、すべてのコマンドで、また、成功した"\\e[40;34m"私の最後までPROMPTvar、および背面と白にそれを設定preexec () { echo -n "\\e[40;37m" }...
pataluc

1
@pataluc:申し訳ありませんが、今私はポイントを得る。コマンドラインを色付けするにzle_highlight=(default:fg=cyan)は、最新のzshバージョンで使用します。Zshでは、次のような動的な色付けも提供していますfish。man zshzleのCHARACTER HIGHLIGHTINGセクションを参照してください。
mpy

回答:


5

あんまり; 特定のプログラムの出力の色は、ターミナルではなくコマンドによって制御されます。

ただし、端末が色のANSIエスケープコードを理解していると仮定すると(ほとんどの場合)、エスケープコードを使用して、プロンプトの先頭に目的のプロンプトの色を、末尾に目的の出力色を設定できます。これにより、コマンドラインも出力用に設定した色になりますが、おそらく、探しているものに近づくのとほぼ同じです。たとえば、次のとおりです。

$ export PS1='\[\033[00;35m\]\u\[\033[00m\]@\[\033[00;35m\]\H\[\033[00m\]:\[\033[00;33m\]\W\[\033[00m\] \$\[\033[00;34m '

次のようなプロンプトが表示されます。

user@host:wd $ _

「ユーザー」と「ホスト」は紫、「wd」(あなたのcwd)は茶色(濃い黄色)、そして「$」以降はすべて、端末が水色に使用するものです。(デフォルトのxtermはこれをシアンでレンダリングします。gnome-terminalはデフォルトでコーンフラワーブルーのかなり良い色合いになります。)

実際のカラーコードは、bashのために必要なフォーマットで指定されるように、例えば、であり、\[\033[00;35m\]ここで、00;35実際の色指定です。先行は00ほとんど変更されませんが、IIRCボールド(01)、下線(??)、および反転ビデオ(??)効果を生成できますが、末尾の「35」は実際の色であり、この場合は紫色です。

ANSIカラーコードの適切なリストを見つけるのは驚くほど困難ですが、次のように、前景色は30から37まで、背景色は40から47までです。

color        fg  bg
black        30  40
red          31  41
green        32  42
yellow       33  43
blue         34  44
purple       35  45
cyan         36  46
gray/white   37  47

プロンプトに従うすべてにデフォルトの色を設定しているため、エスケープコードを使用して独自の色を設定しない実行プログラムは、その色を使用することに注意してください-たとえば、ページャーでは、他のコマンドに設定したのと同じ色で出力が表示される可能性があります。一方、エスケープコードを介して独自の色を設定するコマンド、ユーザーの作業を完全に無視します。


1
エスケープコードの代わりにtput、色付けの方がはるかに読みやすいことがわかりました。たとえば、私のプロンプト(bash)はexport PS1="[\t \[$(tput setaf 9)\]\u\[$(tput setaf 15)\]@\[$(tput setaf 12)\]\h \[$(tput sgr0)\]\w ] \$ "、時間を出力し、ある色のユーザー名@、別の色のユーザー名、3番目のホスト名(現時点では赤、白、青)を出力し、PWDとを出力し$ ます。履歴をスクロールして戻るときにプロンプ​​ト行がどこにあるかを一目で見るのは非常に簡単です。
MattDMo

素晴らしい...それが私が今まで欲しかったすべてです。色を変更したい場合、どの値を変更するか教えてください。
raj

最後の色を以前と同じ色に保つ方法はありますか?
raj

そして、なぜ私がログインするたびに、私は再びそれを着色する必要があり、変更permenantではありません
ラジ

1
シェルの初期化ファイル(bashの場合)に追加しない限り、変更は永続的ではありません~/.bashrc。PS1を設定する行(プロンプト文字列)を見つけて、回答の説明に従って変更します。何を変更するかは、プロンプト文字列の設定方法によって異なりますが、ほとんどの重要な詳細は私の答えにあり、残りは少しグーグルで確認できます。「最後の色を以前の色と同じに保つ方法はありますか」という意味がわかりません。
アーロンミラー

7

出力を色付けを行うプログラムに渡すことができます。たとえば、次のようなプログラムがありますpycolor

pycolor module.py

独自に構築するには:

red="$(tput setaf 1)"
reset="$(tput sgr0)"
echo $'foo\nbar' | sed -e "s/\(bar\)/$red\1$reset/"

カラー出力の詳細。


3

はい、少なくともLinuxとMac OSで、bashで動作します。

最初に、いくつかの属性変数を設定し、PS1プロンプトを使用して、目的のコマンドライン属性を端末に設定したままにします。次に例を示します。

bold="\[$(tput bold)\]"
none="$(tput sgr0)"
export PS1="\$ $bold"

次に、すべてのコマンドの直前に実行されるbash DEBUGトラップを使用して、コマンド出力のテキスト属性を変更します。

trap 'echo -ne "${none}"' DEBUG

1

別の代替手段(コマンドごとのコマンド)は、grc-汎用カラーライザーです。物事を色付けするために使用する正規表現を設定するには、少し手間がかかります。私はそれをここで見つけました:

/unix/8414/how-to-have-tail-f-show-colored-output?newsletter=1&nlcode=17737|321c

そしてここ:

/unix/26313/colored-find-output

私は正規表現のフラッシュではないので、これらのコマンドをあまり使用していません。


これをすべての末尾ログスクリプトで使用します。素晴らしい。
-stefgosselin

1

これらを.bashrcファイルにスローし、保存後にファイルをソースします。

blk=$'\x1b[90m' # Sets text to black
red=$'\x1b[31m' # Sets text to red
grn=$'\x1b[92m' # Sets text to green
ylw=$'\x1b[93m' # Sets text to yellow
blu=$'\x1b[94m' # Sets text to blue
pur=$'\x1b[95m' # Sets text to purple
cyn=$'\x1b[96m' # Sets text to cyan
wht=$'\x1b[97m' # Sets text to white
rst=$'\x1b[0m'  # resets to default terminal color

これが完了したら、ターミナルでこれらのいずれかを永久に使用するか、変数をコメントアウトするか完全に削除するまで使用できます。これらは、マシンのスクリプトで使用することも、コマンド置換などを使用して使用することもできます。以下は、個人的にどのように使用するかの例です。

echo -e "${red}This text is red.${rst}"
printf "${grn}This text is green.\n${rst"

私は通常、これらを個々のコマンドechoprintfコマンドで使用しますが、pingコマンドなどの他のコマンドを色付けするために使用できます。以下を追加して.bashrc、効果を取得します。次に、.bashrcファイルを入手し、cpingコマンドを実行pingして紫色のテキストで使用します。端末がサポートする任意の色を使用するように各コマンド機能を設定できます。

# Add this to your .bashrc file
colored_ping() {

    echo -e "${pur}$(ping $1)${rst}"
}

alias cping='colored_ping'

次に試してください:

user@linux:~# cping superuser.com

の出力はcping紫色になります。同じ出力で複数の色を使用する場合は、独自の方法でそれらを追加できます。どのように行うかは完全にあなた次第です。例えば:

echo -e "${red}This is red and ${blu}this is blue and ${grn}this is green.${rst}

0

gitハブで利用可能なhlコマンドを確認する必要があります:
github:git clone http://github.com/mbornet-hl/hl
以降:
http:
//www.flashnux.com/notes/page_000022_US.html hl Cで書かれたLinuxコマンドで、特にテキストファイルまたはコマンドの出力に色を付けるように設計されています。同時に最大42色を使用でき、構成ファイルを使用してコマンドラインを簡素化できます。別のコマンドにパイプできるすべてのコマンドの出力を色付けできます。そして、正規表現が何であるかを知っていれば、非常に使いやすいでしょう。manページを使用して、使用方法を理解できます。

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