jak zrobić bash, aby nie zawijał danych wyjściowych?


33

Ilekroć jakieś polecenie generuje długie wiersze jako dane wyjściowe (na przykład, gdy ls -lfolder zawierający pliki o długich nazwach), długie wiersze są zawijane do następnego wiersza, co psuje strukturę kolumny.

Czy jest jakiś sposób na uniknięcie tego? Coś podobnego do opcji vim „nowrap”?


aktualizacja

Zauważyłem problem z zaakceptowaną odpowiedzią:
jeśli utworzę alias typu: alias ll="tput rmam; ls -l; tput smam"
a następnie spróbuję grepować jego wynik: ll | grep foo
nadal będzie drukować wszystkie pliki, tak jak bez grep.

Rozwiązaniem, które znalazłem, jest umieszczenie nawiasów wokół całego aliasu:
alias ll="(tput rmam; ls -l; tput smam)"



Odpowiedzi:


27

Zauważ, że nie ma to nic wspólnego z bash (po uruchomieniu polecenia, bash po prostu czeka, aż się skończy) i wszystko, co ma związek z terminalem.

Większość emulatorów terminali jest domyślnie zawijanych na prawym marginesie. Ale można to wyłączyć za pomocą odpowiedniej sekwencji kontrolnej , jeśli emulator terminala ją obsługuje; wtedy długie linie są po prostu obcinane:

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

tak, tego właśnie szukałem, dzięki Gilles!
Mihai Rotaru,

12
Bardziej przenośne:tput rmam; ls -l longname; tput smam
Wstrzymano do odwołania.

nawet lepiej; ale skąd się wzięła mama? Przeszukałem podręczniki tput i termcap, ale nie znalazłem nic na ich temat?
Mihai Rotaru,

2
@Mihai: wypróbuj dokumentację terminfo ( man 5 terminfow systemie Linux).
Gilles „SO- przestań być zły”

rzeczywiście tam jest
Mihai Rotaru


5

Możesz użyć takiej funkcji:

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

pamiętaj jednak, że będziesz musiał poprzedzać polecenia nowrapfunkcją lub jakkolwiek nazwiesz tę funkcję.


to działa, ale tracę kodowanie kolorów; jakikolwiek sposób na zachowanie tego?
Mihai Rotaru,


2

potokuj do mniej polecenia za pomocą przełącznika -S:

ls -l | less -S

Następnie możesz użyć strzałek w górę / w dół / w lewo / w prawo, aby przewinąć i wpisać q, aby wyjść.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.