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)"

Mihai Rotaru
sumber
related unix.stackexchange.com/questions/20493/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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'
Gilles 'SANGAT berhenti menjadi jahat'
sumber
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
17

Jika Anda ingin dapat melakukan pengguliran horizontal alih-alih memotong garis, gunakan less -S.

Dijeda sampai pemberitahuan lebih lanjut.
sumber
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.

John T
sumber
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.

ognockocaten
sumber
Luar sleep 20biasa :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
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.

qartal
sumber
1

Coba ini

function nowrap { export COLS=`tput cols` ; cut -c-$COLS ; unset COLS ; echo -ne "\e[0m" ; }
drigoSkalWalker
sumber
maaf untuk sekop emas
drigoSkalWalker