çıktıyı sarmamak için bash nasıl yapılır?


33

Bazı komutlar çıktı olarak uzun satırlar oluşturduğunda (örneğin, ls -luzun adlara sahip dosyaları içeren bir klasör olduğunda ), uzun satırlar bir sonraki satıra sarılır, bu nedenle sütun yapısını karıştırır.

Bundan kaçınmanın bir yolu var mı? 'Nowrap' vim seçeneğine benzeyen bir şey mi var?


güncelleştirme

Kabul edilen yanıtla ilgili bir sorun fark ettim:
eğer böyle bir takma ad yaparsam: alias ll="tput rmam; ls -l; tput smam"
ve sonra çıktısını grep etmeye çalışırsam: ll | grep foo
hala grepsiz gibi tüm dosyaları basar.

Bulduğum çözüm tüm takma adı etrafına parantez koymak:
alias ll="(tput rmam; ls -l; tput smam)"



Yanıtlar:


27

Bunun bash ile ilgisi olmadığını unutmayın (komutu başlattığınızda, bash sadece bitmesini bekler) ve terminalle ilgili her şeyi yapın.

Çoğu terminal emülatörü, varsayılan olarak doğru kenar boşluğuna sarılır. Ancak eğer terminal emülatörü destekliyorsa, uygun kontrol dizisi kullanılarak bu kapatılabilir ; o zaman uzun çizgiler kısalır:

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

evet, aradığım şey buydu, teşekkürler Gilles!
Mihai Rotaru,

12
Daha taşınabilir:tput rmam; ls -l longname; tput smam
sonraki bildirime kadar duraklatıldı.

daha iyi; peki annem nereden geldi? Tput ve termcap kılavuzlarını aradım ama onlar hakkında bir şey bulamadınız mı?
Mihai Rotaru

2
@Mihai: terminfo belgelerini deneyin ( man 5 terminfoLinux'ta).
Gilles 'SO- kötülük olmayı'

gerçekten, orada
Mihai Rotaru


5

Bunun gibi bir işlevi kullanabilirsiniz:

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

nowrapFonksiyonları ne ile isimlendirirseniz veya ne isimle isimlendirmelisiniz


çalışır, ancak renk kodlamasını kaybederim; Bunu korumanın herhangi bir yolu var mı?
Mihai Rotaru

3

Sen olabilir geçersiz otomatik çalışacak şekilde bir işlev tput rmamiçin grep öncesi ve tput smamsonrası:

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

Bunu .bash_profilesize bırakın ve ne zaman grepkoştuysanız, satır kaydırma işlemi olmadan grep olacaktır.

Bu, yoğun şekilde düzenlendi, yorumcular için özür diler.


Bu sleep 20inanılmaz :-)
Ciro Santilli,

2

-S anahtarıyla daha az komut verin:

ls -l | less -S

Ardından kaydırma yapmak için yukarı / aşağı / sola / sağa okları kullanın ve çıkmak için q yazın.


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.