2015-10-02 9 views
11

grepを使用し、それを他のプログラムにパイプするときは、--colorオプションは尊重されません。私は--color=alwaysを使用することができると知っていますが、それはまた、私がttyにいた場合に得られる出力として、そのコマンドの正確な出力を得たいいくつかの他のコマンドもあります。どのコマンドでもbashのttyでふりをします

私の質問は、コマンドがtty内で実行されていると思うようにコマンドをトリックすることは可能ですか?例えば

、私のような何かを書くことができるようにしたいと思い

grep --color word file # Outputs some colors 
grep --color word file | cat # Doesn't output any colors 

を実行している:

IS_TTY=TRUE grep --color word file | cat # Outputs some colors 

This questionは、私が欲しいものを行う可能性がありますツールを持っているようだ:empty - run processes and applications under pseudo-terminal (PTY)が、私がドキュメントで読むことができるものから、私はそれが私の問題のために助けることができると確信していません

+1

あなたは '--color'がパイプラインをさらに下ってコマンドを送るために送られる実際のデータストリームを変更することを認識していますか?結果は、 'searchTarget'が'^[32; 4gsearchTarget^[32; h'(またはそれに類するもの)ではないので、他の妥当なコードを破ることになります。がんばろう。 – shellter

+0

はい、私のスクリプトでは、このテクニックを使用してgrepsを使用することはありませんが、私が使用するコマンドの中には、ttyの外で使用したときに別のものを出力するように見えるものもあります(例えば 'ag'、シルバーバーダー、 ..)私は他の人にそれらのコマンドをパイプするたびに、同じフォーマットで印刷するためのすべてのオプションを学ぶ時間がありません) – edi9999

+0

うん..これはいくつかの驚くべき答え(私に)前に出てきたと思います。あなたは '[linux](or)[bash] --color'を多く探しましたか?がんばろう。 – shellter

答えて

8

いくつかの他のスタックオーバーフロー回答(Caarloscommentを参照)。でも、私はそれらをここにまとめます:

  1. 使用スクリプト+のprintfと少しbashの関数を作る:

    faketty() { script -qfc "$(printf "%q " "[email protected]")"; } 
    faketty ls --color=auto | cat 
    

    (クレジットは、このanswerに行く)

  2. 使用平野スクリプトといくつかのbashリダイレクト:

    0<&- script -qfc "ls --color=auto" /dev/null | cat 
    

    http://linux.die.net/man/1/script

  3. (コマンドの期待スイートの一部として)unbufferコマンドを使用して、残念ながらこれは大規模な50メガバイト+がインストールが必要です。

    sudo apt-get install expect-dev 
    unbuffer -p ls --color=auto | cat 
    

    http://linux.die.net/man/1/unbuffer

これはどのように素晴らしい記事ですTTYが動作し、擬似TTY(PTY)が何であるかを知るためには、入力、出力、および信号を渡すためのファイル記述子でLinuxシェルがどのように動作するかを理解したい場合には、 http://www.linusakesson.net/programming/tty/index.php

+1

'script'に' -e'を追加して、コマンドの戻り値を返します。また、 'less -FXur'への配管を検討してください。これは色を表示し、出力が単一画面に収まる場合は何もしません。 –

関連する問題