bagaimana membuat bash bukan untuk membungkus output?


33

Setiap kali beberapa perintah menghasilkan garis panjang sebagai output (misalnya, ketika ls -lfolder yang berisi file dengan nama panjang), garis panjang dibungkus dengan baris berikutnya, sehingga mengacaukan struktur kolom.

Apakah ada cara untuk menghindari ini? Sesuatu yang mirip dengan opsi vim 'nowrap'?


memperbarui

Saya perhatikan ada masalah dengan jawaban yang diterima:
jika saya membuat alias seperti: alias ll="tput rmam; ls -l; tput smam"
dan kemudian mencoba untuk grep outputnya: ll | grep foo
ia masih akan mencetak semua file, seperti tanpa grep.

Solusi yang saya temukan adalah menempatkan tanda kurung di seluruh alias:
alias ll="(tput rmam; ls -l; tput smam)"



Jawaban:


27

Perhatikan bahwa ini tidak ada hubungannya dengan bash (setelah Anda meluncurkan perintah, bash hanya menunggu sampai selesai) dan semuanya harus dilakukan dengan terminal.

Kebanyakan emulator terminal membungkus di margin kanan secara default. Tetapi ini dapat dimatikan dengan menggunakan urutan kontrol yang sesuai , jika emulator terminal mendukungnya; maka garis panjang hanya terpotong:

printf '\033[?7l'
ls -l /a/folder/that/contains/files/with/long/names
printf '\033[?7h'

ya, ini yang saya cari, terima kasih Gilles!
Mihai Rotaru

12
Lebih mudah dibawa:tput rmam; ls -l longname; tput smam
Dijeda sampai pemberitahuan lebih lanjut.

bahkan lebih baik; tetapi dari mana asal ibu? Saya mencari manual tput dan termcap tetapi tidak menemukan apa pun tentang mereka?
Mihai Rotaru

2
@Mihai: coba dokumentasi terminfo ( man 5 terminfodi Linux).
Gilles 'SO- stop being evil'

memang, itu ada di sana
Mihai Rotaru


5

Anda dapat menggunakan fungsi seperti ini:

nowrap() 
{ 
   cut -c-$(tput cols); 
}

perlu diingat meskipun Anda harus awalan perintah dengan nowrapatau apa pun nama Anda fungsi.


berfungsi, tapi saya kehilangan kode warna; ada cara melestarikan itu juga?
Mihai Rotaru

3

Anda dapat mengganti fungsi sehingga secara otomatis berjalan tput rmamsebelum grep Anda dan tput smamsetelah:

function grep () {
  tput rmam;
  command grep "$@";
  tput smam;
}

Jatuhkan itu di Anda .bash_profiledan setiap kali Anda berlari grep, itu akan grep tanpa garis pembungkus.

Ini telah banyak diedit, permintaan maaf kepada komentator.



2

pipa itu ke perintah kurang dengan -S switch:

ls -l | less -S

Kemudian Anda dapat menggunakan panah atas / bawah / kiri / kanan untuk menggulir dan mengetik q untuk berhenti.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.