як зробити так, щоб 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

передайте його меншій команді за допомогою перемикача -S:

ls -l | less -S

Потім ви можете використовувати стрілки вгору / вниз / вліво / вправо для прокрутки та введіть q для виходу.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.