Перенаправление вывода оболочки внутри функции - PullRequest
0 голосов
/ 01 июня 2010
function grabSourceFile
{
    cd /tmp/lmpsource
    wget $1 >  $LOG
    baseName=$(basename $1)
    tar -xvf $baseName > $LOG
    cd $baseName
}

Когда я вызываю эту функцию, захваченный вывод не идет в файл журнала. Перенаправление вывода работает нормально, пока я не вызову функцию. Переменная $ LOG устанавливается в верхней части файла. Я попытался повторить заявления, и они не будут печатать. Я предполагаю, что функция захватывает сам вывод? Если так, как сделать вывод в файл вместо консоли. (Приведенный выше wget выводится на консоль, а эхо внутри функции ничего не делает.)

Ответы [ 3 ]

3 голосов
/ 02 июня 2010

Как упоминалось ранее, вы пишете в один и тот же лог-файл дважды. Ваша функция регистрирует вывод 'wget', а затем перезаписывает этот вывод командой tar.

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

function grabSourceFile
{
        cd /tmp/lmpsource
        wget $1
        baseName=$(basename $1)
        tar -xvf $baseName
        cd $baseName
} >> $LOG

Или просто сделайте:

grabSourceFile >> $LOG
1 голос
/ 02 июня 2010

Я нашел проблему. Это было с Wget. У wget есть опция, специально предназначенная для регистрации, так как, я думаю, он не может перенаправлять вывод с помощью> (что-то с curses.) Моя рабочая функция в конечном итоге была:

function grabSourceFile
{
        cd /tmp/lmpsource
        wget -a /tmp/lamps_install.log $1
        baseName=$(basename $1)
        tar -xvf $baseName >> $LOG
        cd $baseName
}
1 голос
/ 01 июня 2010

Перенаправление работает одинаково внутри и снаружи функций.

Ваша проблема, скорее всего, в том, что вы хотите получить двойной знак больше, чем знак, а не один знак больше. То есть wget $1 >> $LOG. Перенаправление вашей команды tar усекает вывод из wget.

...