Как экранировать каналы в .screenrc для запуска команд при запуске? - PullRequest
3 голосов
/ 14 апреля 2011

Я использую byobu / screen, и я хотел бы иметь новый экранный сеанс по умолчанию, содержащий несколько окон, настроенных специально для привязки определенного файла журнала.

My.screenrc выглядит примерно так (технически это мой .byobu/windows файл):

chdir /home/matt/code/project/logs
screen -t 'logs' tail -F current.log

chdir /home/matt/code/project
screen -t 'errors' tail -F current.log | grep -A 3 "ERROR"

chdir /home/matt/code/project
screen -t 'project'

chdir 
screen -t 'bash'

Я хочу настроить четыре окна в новом сеансе экрана:

  1. Окно с заголовком «logs», за которым следует файл current.log
  2. Окно с заголовком «errors», за которым следует файл current.log и greps для ERROR
  3. Окно с названием «project»которое начинается в главном каталоге моего проекта
  4. Окно с заголовком "bash", которое начинается в моем домашнем каталоге.

Однако канал в команде screen -t 'errors' tail -F current.log | grep -A 3 "ERROR" интерпретируется какэкран буквально, и, таким образом, мое второе окно никогда не появляется.

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

Кроме того, есть более простой способ настройки экрана/ Byobu для запуска окон, которые работают (Compкоманды при запуске?

Ответы [ 3 ]

4 голосов
/ 04 мая 2011

В итоге я решил эту проблему, используя команду stuff для имитации ввода команды в окно и нажатия Enter для ее выполнения. Это имеет приятный эффект, позволяя вырваться из хвостовой команды в окне экрана, не убивая при этом само окно.

Вот пример того, как мой .screenrc выглядит для этого; Я написал более подробное объяснение в моем блоге :

screen -t 'errors'
stuff 'tail -F /var/ec/current.log | grep -A 3 "ERROR"^M'

(^ M вводится нажатием клавиш Ctrl + V, ввод с клавиатуры, а не вводом букв в верхнем и нижнем регистре M)

3 голосов
/ 11 февраля 2015

У меня работает следующее:

screen -t errors bash -c "tail -F current.log | grep -A 3 ERROR"

Использование bash (или другой оболочки) необходимо для предотвращения появления на экране ошибки «file not found», которая будет результатом, если bash -c будет удалено из приведенного выше.

0 голосов
/ 29 апреля 2011

У вас должно получиться создать собственный скрипт и использовать его в своем .screenrc, чтобы у вас был экран -t 'error' ./bin/current.log.sh

И tail -F ..в current.log.sh

...