Tişörte geçerken renkleri koruyun


Yanıtlar:


84

unbufferHerhangi bir komuttan önce, aslında başka bir yürütülebilir dosyaya bağlansa bile etkileşimli bir çıktıya yazdığını düşünmesini sağlamak için basitçe ekleyin . Bu durumda rengi koruyacaktır ls.

Örneğin

unbuffer ls -l --color=auto | tee output.log

Zaten yüklü değilse, Ubuntu ve diğer Debian-ish Linux dağıtımlarında unbufferyaparak yükleyebilirsiniz .

sudo apt-get install expect-dev

6
Hiçbir şey yüklemeyi gerektirmeyen başka bir çözüm ise stackoverflow.com/questions/3515208/…
Tgr

3
Bu sonuçta ortaya çıkan dosyanın renk kodlarını içermesine neden olur (elbette); Daha sonra herhangi bir yolu yoktur yazdırmak markaları renk kodlarının kullanmak ve düzgün terminalde renkleri görüntüleyen bir şekilde dosyayı?
Kyle Strand,

2
Bu, şifre girişlerinin şifrenizi cleartext biçiminde göstermesini sağlar.
AndiDog

@Tgr Bu çözüm benim için OS X'te işe yaramadı ve ham renkli çıktı almaya çalıştı xcodebuild- bunun yerine renksiz kesik çizgiler oldu. unbuffer xcodebuild | less -RAncak kusursuz çalıştı.
Slipp D. Thompson

2
expect-devPakete ihtiyacınız yok . expectyeterlidir.
Yajo,

11

Ls seçeneğini kullanın --color=always

--color=auto çıktıyı bir boru hattına renklendirmez - açık nedenlerden dolayı.

Ana sayfa aşağıdakileri söylüyor:

--Color = auto ile, renk kodları yalnızca standart çıkış bir terminale bağlı ise verilir (tty).


2
TAMAM. Bu onu açıklar. Fakat yine de ekrandaki renkleri görebilir miyim? (Sonuçta bir TTY). Onları günlük dosyasına koymayı umursamıyorum, ama kesinlikle onları ekranımda istiyorum.
Paweł Gościcki

Sanırım kendimi yeterince netleştirmedim. ls -lsadece bir örnekti. Tamamen farklı bir komuta sahibim (heroku logları) tee. Ve yürüttüğüm komutu değil, tee / pipoyu "düzeltmek / değiştirmek" istiyorum.
Paweł Gościcki

1
@Pawel, tee / pipe bu renk kodlarını çıkarmadığından, tee / pipe'ta kolayca düzeltemezsiniz. Sorun, ilk komutun terminale yazmadığını görmesidir. Bir boru gibi hareket eden, ancak bir terminal olarak gören bir sözde terminale ihtiyacınız var .
RedGrittyBrick

Hm ... yeterince adil. Sanırım bu şekilde olduğunu kabul etmeliyim.
Paweł Gościcki

3
@ PawełGościcki bu cevap sadece için sorunu giderir ls. Heroku kayıtları da dahil olmak üzere tüm programlar için sorunu gideren cevabımı görün.
Eamonn O'Brien-Strain

3

Ben genişletmek edeceğiz scriptkabul cevabın yorumunda verilen çözüm. Kullanılması scriptyapamazsın ya yüklemek istemiyorum durumda yararlı olabilir bekliyoruz içeren paketi unbufferkomutunu.

lsÇıktıyı stdout'a ve renk kodlarıyla dosyaya yazdır :

script -efq output.log -c "ls -l --color=auto"

nerede ( man script):

  -e, --return
         Return the exit code of the child process.  Uses the same
         format as bash termination on signal termination exit code is 128+n.
  -f, --flush
         Flush output after each write.  This is nice for telecooperation:
        one person does `mkfifo foo; script -f foo', and another can 
        supervise real-time what is being done using `cat foo'.
  -q, --quiet
         Be quiet (do not write start and done messages to either 
         standard output or the typescript file).

Görüntüle renklerle çıkış dosyasını:

less -r output.log

2
-eaynı --return- her ikisine de gerek yok; -efqolduğunu --return --flush --quiet.
Noel Maersk

@NoelMaersk Teşekkürler. Parametre açıklamalarını cevaba dahil ettim.
Juuso Ohtonen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.