Исключить указанные c строки из соединения sftp из файла журнала - PullRequest
1 голос
/ 05 марта 2020

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

Как есть, команды имеют следующий формат:

sftp user@host <<EOF &>> ${LOGFILE}
get ...
put ...
exit
EOF

Теперь я попытался выделить все новые строки, которые начинаются с канала (они в основном сделали коробка, чтобы положить их в).

sftp user@host <<EOF | grep -v '^|' &>> ${LOGFILE}
get ...
put ...
exit
EOF

Это исключает строки из ${LOGFILE}, но вместо этого выбрасывает их в stdout, что означает, что они попадают в другой файл журнала, где мы также не хотим их (эти сценарии вызываются планировщик). Как ни странно, он также отфильтровывает первую строку из выходных данных попытки подключения.

Connecting to <host>...

и перенаправляет ее также на stdout. Не конец света, но я нахожу это странным.

Как я могу отфильтровать строки, начинающиеся с |, чтобы они нигде не показывались?

1 Ответ

1 голос
/ 05 марта 2020

In

sftp user@host <<EOF &>> ${LOGFILE}

Вы перенаправляете stdout и stderr в файл журнала для добавления данных (& >>). Но когда вы используете

sftp user@host <<EOF | grep -v '^|' &>> ${LOGFILE}

, вы только перенаправляете stdout в grep, оставляя вывод stderr sftp без изменений. Наконец, вы перенаправляете agains stdout и stderr из grep в лог-файл.

На самом деле вы заинтересованы в перенаправлении обоих (stdout и stderr) из sftp, поэтому вы можете использовать что-то вроде:

sftp user@host <<EOF |& grep -v '^|' >> ${LOGFILE}

или, в более старых версиях bash, вместо указанного сокращения используется перенаправление c:

sftp user@host <<EOF 2>&1 | grep -v '^|' >> ${LOGFILE}
...