Упаковка скрипта оболочки в tee

Упаковка скрипта оболочки в tee

Есть скрипт 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будет нормально функционировать внутри скрипта и "$@"будет содержать все родительские аргументы.

Связанный контент