come fare bash non a capo output?


33

Ogni volta che un comando genera righe lunghe come output (ad esempio, quando ls -luna cartella che contiene file con nomi lunghi), le righe lunghe vengono spostate sulla riga successiva, creando così un disordine nella struttura della colonna.

C'è un modo per evitarlo? Qualcosa di simile all'opzione vim 'nowrap'?


aggiornare

Ho notato un problema con la risposta accettata:
se creo un alias come: alias ll="tput rmam; ls -l; tput smam"
e quindi provo a grep il suo output: ll | grep foo
stamperà comunque tutti i file, come senza grep.

La soluzione che ho trovato è quella di mettere parentesi attorno all'intero alias:
alias ll="(tput rmam; ls -l; tput smam)"



Risposte:


27

Nota che questo non ha nulla a che fare con bash (una volta che hai lanciato il comando, bash aspetta solo che finisca) e tutto ciò che ha a che fare con il terminale.

La maggior parte degli emulatori di terminali si avvolge sul margine destro per impostazione predefinita. Ma questo può essere disattivato usando la sequenza di controllo appropriata , se l'emulatore di terminale lo supporta; quindi le linee lunghe vengono semplicemente troncate:

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

sì, questo è quello che stavo cercando, grazie Gilles!
Mihai Rotaru,

12
Più facilmente:tput rmam; ls -l longname; tput smam
In pausa fino a nuovo avviso.

anche meglio; ma da dove viene [rs] mamma? Ho cercato i manuali di tput e termcap ma non sono riuscito a trovare nulla su di essi?
Mihai Rotaru,

2
@Mihai: prova la documentazione terminfo ( man 5 terminfosu Linux).
Gilles 'SO- smetti di essere malvagio' il

anzi, è lì
Mihai Rotaru,


5

È possibile utilizzare una funzione in questo modo:

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

tieni presente però che dovrai aggiungere un prefisso ai comandi nowrapo qualunque sia il nome della funzione.


funziona, ma perdo la codifica a colori; un modo per preservare anche quello?
Mihai Rotaru,

3

Puoi sovrascrivere una funzione in modo che venga eseguita automaticamente tput rmamprima del grep e tput smamdopo:

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

Rilascialo nel tuo .bash_profilee ogni volta che corri grep, si avvierà senza avvolgersi.

Questo è stato pesantemente modificato, ci scusiamo con i commentatori.



2

esegui il pipe a meno comando con l'opzione -S:

ls -l | less -S

Quindi è possibile utilizzare le frecce su / giù / sinistra / destra per scorrere e digitare q per uscire.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.