sed, не работающий правильно, когда перекачано по трубопроводу

Нет, размер /dev не 8 ГБ. Это максимальный размер. Размер, который он фактически использует в памяти, пропорционален используемому размеру; память выделяется по мере необходимости. В

Linux нет man-страниц для всех файловых систем, в этом случае вам следует обратиться к man-странице mount. Но у tmpfs есть man-страница, и в ней упоминается об этом.

0
17.11.2018, 14:17
3 ответа

Редактор потоков, sed, buffers, отключите с помощью «-u» или «--unbuffered».

tail -f some/log_file | sed -u 's/foo//g' | grep bar
2
28.01.2020, 02:31

Я бы попробовал ту же команду со следующим дополнением:

ssh someuser@somehost 2>&1 | sed -e "s/\[32//g" | tee --output-error=warn logging

После этого вы сможете увидеть, есть ли ошибка при записи в стандартный вывод. Дайте мне знать, если это поможет.

Вы можете установить expect, а затем попробовать:

unbuffer ssh someuser@somehost 2>&1 | sed -e "s/\[32//g" | tee logging
0
28.01.2020, 02:31

Когда вы запускаете ssh user@somehostбез явной команды, вы запрашиваете ssh для запуска интерактивной оболочки на удаленной машине.

Интерактивная оболочка (, такая как bash ), обычно хочет иметь доступный терминал , поскольку он будет использовать команды терминала для реализации улучшенного опыта при редактировании командной строки и просмотре истории. (Команды терминала обеспечивают полное -управление экраном.)

Но ssh будет выделять терминал по умолчанию (, также называемый псевдо--терминалом ), если его стандартный вывод подключен к терминалу.

Если вы просто запустите ssh user@somehostиз терминальной программы (, такой как gnome -terminal, rxvt, xterm и т. д. ), то ее стандартным выводом будет терминал, поэтому ssh создаст псевдо Терминал -и удаленная интерактивная оболочка будут вести себя нормально.

Если вы передаете ssh через что-то (что-нибудь ), например ssh user@somehost | cat, то его стандартным выводом будет канал (, а не терминал ), поэтому ssh не создаст терминал и что может привести к неправильной работе удаленной интерактивной оболочки.

Возможное решение — заставить ssh создать псевдо-терминал -, передав ему параметр -t, например ssh -t user@somehost | cat, который может помочь. (Кроме того, вам может понадобиться двойная опция -tt, чтобы принудительно выделить псевдо-терминал -.)

Другая возможность, если вы используете ssh главным образом потому, что вас интересует конкретная команда, — запустить конкретную команду из командной строки ssh, например ssh user@somehost mycommand | cat. Если вы запускаете определенную команду, интерактивная оболочка не задействуется, и в этом случае доступный терминал, скорее всего, не вызовет никаких проблем.

2
28.01.2020, 02:31

Теги

Похожие вопросы