как заставить bash не оборачивать вывод?


33

Всякий раз, когда какая-либо команда генерирует длинные строки в качестве вывода (например, когда ls -lпапка содержит файлы с длинными именами), длинные строки переносятся на следующую строку, что портит структуру столбцов.

Есть ли способ избежать этого? Что-то похожее на vim-опцию nowrap?


Обновить

Я заметил проблему с принятым ответом:
если я сделаю псевдоним, такой как: alias ll="tput rmam; ls -l; tput smam"
и затем попытаюсь отобразить его вывод: ll | grep foo
он все равно будет печатать все файлы, как без grep.

Решение, которое я нашел, состоит в том, чтобы заключить в скобки весь псевдоним:
alias ll="(tput rmam; ls -l; tput smam)"



относящиеся superuser.com/q/600677/105108
ks1322

Ответы:


27

Обратите внимание, что это не имеет ничего общего с bash (после того, как вы запустили команду, bash просто ждет ее завершения) и со всем, что связано с терминалом.

Большинство эмуляторов терминала по умолчанию переносятся с правого поля. Но это можно отключить с помощью соответствующей последовательности управления , если эмулятор терминала это поддерживает; тогда длинные строки просто усекаются:

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

да, это то, что я искал, спасибо Жиль!
Михай Ротару

12
Более переносимо:tput rmam; ls -l longname; tput smam
Приостановлено до дальнейшего уведомления.

даже лучше; но откуда [rs] мам пришел? Я искал руководства tput и termcap, но ничего не нашел о них?
Михай Ротару

2
@Mihai: попробуйте документацию terminfo ( man 5 terminfoв Linux).
Жиль "ТАК - перестань быть злым"

действительно, это там
Михай Ротару


5

Вы можете использовать такую ​​функцию:

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

имейте в виду, что вам нужно будет добавлять команды к префиксам nowrapили как угодно.


это работает, но я теряю цветовое кодирование; какой-нибудь способ сохранить это также?
Михай Ротару

3

Вы можете переопределить функцию так, чтобы она автоматически запускалась tput rmamперед вашим grep и tput smamпосле:

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

Оставьте это в своем, .bash_profileи всякий раз, когда вы запускаете grep, он будет работать без переноса строки.

Это было сильно отредактировано, извинения перед комментаторами.



2

передать его команде less с ключом -S:

ls -l | less -S

Затем вы можете использовать стрелки вверх / вниз / влево / вправо для прокрутки и введите q, чтобы выйти.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.