less emulare un TTY per preservare l'output a colors in pipe

Quando si piega qualcosa attraverso less , il programma solitamente scarta i codici colore perché non è in output a un TTY. Quindi devi aggiungere --color=always alle opzioni per funzionare.

 ls -l --color=always | less grep -R asdf --color=always | less 

Quel che è peggio è che talvolta le cose non supportno neanche l'opzione, quindi non c'è effettivamente alcun modo per forzare l'output a un pipe.

C'è un modo (relativamente) semplice per fare less emulare un TTY in modo che non devo specificare --color=always a each programma quando le cose vengono pipettate ad esso e visualizza automaticamente l'output di colore quando ansible?

Non è less che deve cambiare. L'output dei tuoi altri programmi viene reindirizzata a un pipe. Questi programmi rilevano che la loro output non viene inviata a un tty e distriggersno la loro colorazione. È attaccato a wherer fare qualcosa di speciale con i programmi di origine per colorare l'output anche quando viene reindirizzato a un pipe.

Penso di avere una soluzione per i programmi che non supportno un'opzione –color = sempre. Il command unbuffer crea un pty e invia l'output del suo programma di argomento a quella pty, quindi il programma di argomentazione pensa che la sua output sta andando ad un tty e la colora.

Ho provato il seguente come un esperimento e ha funzionato. Non potrei pensare a nessun programma che colorasse la loro output per impostazione predefinita.

 $ unbuffer ls --color=auto | cat 

Inoltre, non è necessario utilizzare l'opzione -r con less per ottenerlo per visualizzare il colore? Ho anche provato questo:

 $ unbuffer ls --color=auto | less -r 

su FreeBSD è ansible:

 env CLICOLOR_FORCE=yes ls -l | less -R 

o è ansible impostare / ignorare le opzioni (csh / tcsh):

 alias less less -R setenv CLICOLOR_FORCE yes setenv LS_COLORS "no=00:fi=00:di=01;36:ln=01;37;44:pi=40;33:so=01;35" setenv LS_COLORS "$LS_COLORS":"bd=40;33;01:cd=40;33;01:or=40;31;01" setenv LS_COLORS "$LS_COLORS":"ex=01;32;40:*.tar=01;31:*.tgz=01;31" setenv LS_COLORS "$LS_COLORS":"*.arj=01;31:*.taz=01;31:*.lzh=01;31" setenv LS_COLORS "$LS_COLORS":"*.zip=01;31:*.z=01;31:*.Z=01;31" setenv LS_COLORS "$LS_COLORS":"*.gz=01;31:*.deb=01;31:*.jpg=01;35" setenv LS_COLORS "$LS_COLORS":"*.gif=01;35:*.bmp=01;35:*.ppm=01;35" setenv LS_COLORS "$LS_COLORS":"*.tga=01;35:*.xbm=01;35:*.xpm=01;35" setenv LS_COLORS "$LS_COLORS":"*.tif=01;35:*.mpg=01;37:*.avi=01;37" setenv LS_COLORS "$LS_COLORS":"*.gl=01;37:*.dl=01;37:*.tex=01;35" setenv LS_COLORS "$LS_COLORS":"*.ps=01;35" setenv LS_COLORS "$LS_COLORS":"*.php=01;33" setenv LS_COLORS "$LS_COLORS":"*.sh=00;31" setenv LS_COLORS "$LS_COLORS":"*.txt=01;37:*.conf=01;37:*.config=01;37" setenv LSCOLORS GxExcxdxCxegedabagacad 

in ~ / .cshrc

Non c'è modo per rendere less allocare un pty, però, in modo che i programmi che dipendono da una TTY per decidere l'output del colore o non hanno bisogno di essere comunicati manualmente. Scusate.

Sulla shell di Bash di FreeBSD, per get tubazioni colorate che lavorano usando less fai i seguenti …

 $ export CLICOLOR_FORCE=yes $ ls -G | less -R 

È ansible aggiungere il command di esportzione al tuo file .bashrc o .bash_profile .