Saya menggunakan sed
perintah dan saya ingin menjaga keluaran berwarna dari perintah sebelumnya. Output ls
berwarna, tetapi output sed tidak. Saya menggunakan OSX.
ls -la | sed -En '/Desktop/q;p'
Di macOS, ls
ini bukan GNU ls
dan tidak menerima --color=always
opsi yang mungkin diharapkan pengguna Linux untuk fungsi ini.
Dalam versi macOS ls
, warna dikontrol oleh dua variabel : $CLICOLOR
dan $CLICOLOR_FORCE
. Jika yang pertama didefinisikan, terminal yang ditentukan oleh $TERM
mendukung warna, dan output ke terminal, maka output ini akan berwarna, seperti --color=auto
opsi GNU . Jika variabel yang terakhir didefinisikan juga, kondisi terakhir dijatuhkan, berperilaku seperti milik GNU --color=always
.
Jadi untuk memiliki warna yang dilewati sed
, Anda perlu sesuatu seperti berikut:
CLICOLOR_FORCE=1 ls -la | sed -En '/Desktop/q;p'
ls
memang memiliki-G
opsi untuk mengaktifkan warna juga, tapi saya tidak yakin bagaimana berperilaku dalam pipa.-G
sama dengan mendefinisikan$CLICOLOR
(dan karenanya tidak cukup)Aku akan membabi buta menebak bahwa distribusi Anda, seperti banyak, memiliki alias yang memetakan
ls
kels --color=auto
.ls -la --color=always | sed …
harus bekerja.(
auto
Pengaturan membuat, secara umum,ls
memeriksa apakah outputnya masuk ke layar atau tidak, dan hanya warna untuk tampilan. Alasannya adalah warna diwujudkan dengan urutan pelarian, yaitu karakter perintah yang tidak terlihat, sehingga program dapat membingungkan mereka. untuk sebagian nama file, hal-hal seperti itu.)sumber