как заставить 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)"

Михай Ротару
источник
похожие unix.stackexchange.com/questions/20493/…
Сиро Сантилли 新疆 改造 中 at 法轮功 六四 事件
относящиеся 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).
Жиль "ТАК - перестань быть злым"
действительно, это там
Михай Ротару
17

Если вы хотите иметь возможность выполнять горизонтальную прокрутку вместо усечения строк, используйте less -S.

Приостановлено до дальнейшего уведомления.
источник
5

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

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

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

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

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

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

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

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

ognockocaten
источник
Это sleep 20удивительно :-)
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件
2

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

ls -l | less -S

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

qartal
источник
1

Попробуй это

function nowrap { export COLS=`tput cols` ; cut -c-$COLS ; unset COLS ; echo -ne "\e[0m" ; }
drigoSkalWalker
источник
извините за золотую лопату
drigoSkalWalker