Как легко поместить все операторы echo из сценария оболочки в файл журнала - PullRequest
0 голосов
/ 10 октября 2018

У меня есть сценарий оболочки, который отображает некоторые важные места в логике.Каждый раз, когда я делаю эхо, я добавляю журнал в файл журнала, выполняя >> /some/location/my_logtxt.

Логика выглядит следующим образом:

ret=123
echo Something happened $ret >> /some/location/my_logtxt

// some logic 
echo Something else happened $ret >> /some/location/my_logtxt

// some more logic 

echo Something else happened again $ret >> /some/location/my_logtxt

Вопрос:
Нет ли единственного оператора, который может указывать все журналы операторов echo, вместо этого перейдите в следующий файлделать это >> /some/location/my_logtxt для каждого echo?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Вы можете заключить ваши вещи в подоболочку и перенаправить вывод подоболочки:

(
    ret=123
    echo Something happened "$ret"
    // some logic 
    echo Something else happened "$ret"
    // some more logic 
    echo Something else happened again "$ret"
) >> /some/location/my_logtxt

Если вы просто хотите повлиять на ваши операторы echo, я предлагаю вместо этого использовать оператор myecho:

myecho() {
    echo "$@" >> /some/location/my_logtxt
}

ret=123
myecho Something happened "$ret"
// some logic 
myecho Something else happened "$ret"
// some more logic 
myecho Something else happened again "$ret"

(Более подходящее имя может быть чем-то вроде log вместо myecho, но, думаю, вы поняли.)

0 голосов
/ 10 октября 2018

Если вы хотите, чтобы вывод all перешел в файл журнала, вы можете использовать exec для перенаправления:

exec >> "$logfile"

Возможно, вы также захотите перенаправить stderr: 2>&1.


Если вы хотите, чтобы только ваши echo команды были перенаправлены, вы можете подключить неиспользуемый поток (больше 2) для этого:

exec 3>> "$logfile"

ret=123
echo "Something happened $ret" >&3

# some logic 
echo "Something else happened $ret" >&3

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

...