Что-то смешное с комбинацией tail -f и grep -o при работе с ssh.

Так что на локальном сервере, если вы делаете

tail -f /path/myfile.log |grep -o keyword

Это просто отлично. Но если вы запустите его на удаленном сервере ....

ssh user@server 'tail -f /path/myfile.log |grep -o keyword'

не работает Ничто не возвращается, как если бы оно было перенаправлено в /dev /null!

Но если вы удалите -f из tail или -o из grep, все будет работать нормально ... странно:-/

Конечно, я мог бы создать скрипт на удаленном сервере и просто запустить скрипт! Но это не совсем подходит для моей ситуации.

1 ответ1

1

Очевидно, что SSH не выполняет буферизацию строки без терминала.

ssh -t обеспечивает создание псевдотерминала и, следовательно, программ, использующих буферизацию строки. Это также гарантирует, что ваш профиль входа в систему выполнен так, что вы также получите правильную настройку среды для пользователя. Также экранные команды, такие как vim, работают, только если вы используете флаг -t.

В этом блоге есть несколько полезных советов:http://lugatgt.org/2009/10/28/ssh-tips-and-tricks-2/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .