3

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

Вопрос: Если я выполню команду rsync с флагом -v, она выведет на консоль много сообщений. Там в любом случае. Итак, я могу перенаправить эти журналы в файл?

4 ответа4

5

Используйте оператор > :

rsync -v > log.txt

запишет вывод команды rsync в файл с именем log.txt .

5

Вы можете вызвать ваш скрипт и перенаправить "стандартный вывод" (AKA STDOUT) в файл журнала. Используйте «>>» для добавления в файл журнала или «>» для перезаписи файла журнала. Файл будет создан (если разрешения для его каталога позволяют), если он еще не существует. Если файл уже существует, убедитесь, что он доступен для записи вами (или тем, кто запускает ваш скрипт).

Если вы всегда добавляете файл журнала, а не записываете поверх него, рекомендуется с самого начала убедиться, что что-то "повернет" ваш файл журнала, то есть переместить его на другое имя и удалить старые файлы журнала. Если файл журнала уникален для вашего сценария, вы можете сделать так, чтобы ваш сценарий позаботился о ротации файла журнала.

Обычно предпочтительным способом является вызов вашего сценария с перенаправлением STDOUT, но могут быть случаи, когда вы хотите выполнить перенаправление внутри самого сценария для одной или нескольких команд. Вы можете добавить «>> logfile» после любого оператора в сценарии оболочки, чтобы добавить STDOUT этой команды в файл журнала. Вы можете изменить это на «2> & 1 >> logfile», чтобы добавить и "стандартную ошибку" (AKA STDERR), и STDOUT в файл журнала. Обычно вы не хотите, чтобы STDERR также заходил в файл журнала, так как STDERR обычно используется для уведомления любого, кто запускает сценарий проблемы. Но бывают времена и ситуации, когда вы этого хотите. При желании вы можете сгруппировать команды в вашем скрипте внутри {и} и перенаправить STDOUT всей группы сразу, поставив перенаправление после закрывающей скобки.

2

В дополнение к вышесказанному, если вам любопытно увидеть выходные данные, напечатанные на экране И в файл для архивирования /grepping / и т.д., Вы можете захотеть « напечатать » выходные данные. Это отличная команда, и она названа в честь трубы T, найденной в реальной сантехнике, и хорошо работает для «вспомогательных консолей», таких как mysql и т.д.

Команда tee... вот пример, скопированный с пользователя с именем " toydi ":

Чтобы отобразить и записать вывод команды одновременно:ls -l | tee -a file.log В этом примере он отобразит вывод списка каталогов, а также сохранит вывод в file.log. Опция -a сигнализирует команде добавить, а не перезаписать файл.

Кроме того, посмотрите на картинку в Википедии, чтобы увидеть, как работает футболка. Я бы сослался на него, но у меня не хватает "очков репутации", чтобы опубликовать более 1 ссылки, и я почувствовал, что "toydi" заслуживает кредита за ссылку :)

1

Если вы хотите записать каждую введенную команду, вы можете использовать команду script.

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