Есть скрипт bash, который печатает некоторые логи и допускает некоторые аргументы. Скрипт печатает логи в STDOUT. Допустим, имя скриптаAAA.sh
Я также хотел бы сделать скрипт для печати журналов в STDOUT
и file
. Это можно сделать с помощью tee
.
$ AAA.sh -a -b --c=d | tee 2012-07-03-080000.log
Но моя команда часто забывает перенаправлять вывод в tee
. Мы должны сохранять журналы в файл. Поэтому я хотел бы обернуть скрипт в tee
.
Что я хочу сделать, так это
$ WrapAAAwithTee.sh -a -b --c=d
Затем AAAwithTee.sh должен вывести журнал на STDOUT и в файл журнала.
Как мне обернуть AAA.sh?
решение1
Этот скрипт будет работать лучше, чем предыдущий ответ:
#!/bin/bash
exec AAA.sh "$@" | tee "$(date +'%F-%H%M%S').log"
Это будет работать правильно с пробелами и даст уникальное имя файлу журнала, основанное на текущем времени. Это exec
также делает его немного более эффективным и удаляет обертку из вашего дерева процессов, как только дочерний процесс будет запущен.
решение2
Ваш WrapAAAwithTee.sh
документ должен содержать:
#!/bin/bash
AAA.sh "$@" | tee 2012-07-03-080000.log
tee
будет нормально функционировать внутри скрипта и "$@"
будет содержать все родительские аргументы.