for L in `cat FILE` | while read L; do echo "$L";done
Я очень сомневаюсь, что это то, что вы используете.Цикл for
не завершен, и вы должны получить синтаксическую ошибку. Выполнение команды в режиме подстановки команд внутри списка слов for
(как в for L в $(cat foo); do...
) разделило бы все слова на отдельные строки (и подвергнуть их подстановке имен файлов).
Тем не менее, что-то вроде
iptables -vL | while read L; do echo "$L"; done
выдаст результат, который вы получите: read
разделяет ввод на IFS
и, как побочный эффект, уничтожает начальные и конечные пробелы. Дайте ему пустой IFS
, чтобы получить то, что вы хотите. Кроме того, настоятельно рекомендуется использовать read -r
для отключения обработки обратной косой черты, даже если вывод iptables
вряд ли их содержит. Итак:
iptables -vL | while IFS= read -r L; do echo "$L"; done
Или из файла, без cat
:
while IFS= read -r L; do echo "$L"; done < file
Если ваша цель состоит в том, чтобы каким-то образом изменить входные строки, вы также можете взглянуть на awk или Perl, чтобы сделать это , вместо оболочки.
stty size
выводит количество строк и столбцов текущего терминала; чтобы извлечь количество строк, оставьте только первое поле:
stty size | cut -d\ -f1
Эквивалентом $COLUMNS
для строк является $LINES
. Это устанавливается некоторыми оболочками, такими как zsh
или bash
(, хотя в случае bash
только в интерактивном режиме )на основе самих настроек дисциплины линии устройства tty (, обычно устанавливаемых эмулятором терминала или в случай ssh
, по sshd
из значений, предоставленных клиентом (Я не знаю, отправляет ли ConnectBot
эти )).
Вы сможете найти информацию на справочной странице вашей оболочки. Например, дляzsh
:info zsh LINES
.
Другие варианты:
stty size
возвращает ту же информацию, что и <lines> <columns>
, в одной строке. На других они обычно отображаются в выводе stty -a
, хотя и в формате, который зависит от системы к системе. ncurses
реализацией tput
вы можете использовать tput lines
и tput cols
для получения количества строк и столбцов (, которые могут вернуться к запросу базы данных terminfo, когда информация не может быть извлечена. с оконечного устройства ). Некоторыеxterm
-например, эмуляторы терминала (Я не знаю, так ли обстоит дело с ConnectBot ), позволяющим вам запрашивать размер терминала с помощью некоторых escape-последовательностей(\e[18t
). Например, сzsh
:
IFS=";" read -sd t $'ignore?\e[18t' lines cols
для сохранения размеров в $lines
и $cols
.
с большинством терминалов вместо управляющей последовательности \e[18t
также можно использовать (более распространенные )управляющие последовательности, которые перемещают курсор в правый нижний угол экрана и запрашивают позицию курсора там.Это то, что на самом деле делает утилита resize
, поставляемая с xterm
, и может использоваться для согласования настроек tty с этим и установки переменных среды $LINES
и $COLUMNS
для тех оболочек, которые еще не делают этого самостоятельно:
eval "$(resize -u)"