Игнорировать тройник в скрипте Linux - PullRequest
0 голосов
/ 05 октября 2018

У меня есть скрипт .sh на компьютере Red Hat:

{
statement 1
statement 2
statement 3
etc....
} 2>&1 | tee "logdir/logfile.log"

, который регистрируется как на консоли, так и в logfile logfile.com.Тем не менее, оператор 2 дает много выходных данных, и я хочу исключить его из файла журнала, в то же время показывая вывод в консоли.

Есть ли способ исключить конкретный оператор из тройника в файл журнала?

РЕДАКТИРОВАТЬ : Немного разъяснений по поводу утверждений:

{
echo some information on the environment
echo some checks

rsync  -rtpgov /some/folder/ some/other/folder

tar -xf some/other/tar/file.tar  -C some/other/folder2
tar -xf some/other/tar/file.tar  -C some/other/folder3
tar -xf some/other/tar/file.tar  -C some/other/folder4
etc...

echo  some finishing checks
} 2>&1 | tee "logdir/logfile.log"

Я хочу исключить rsync из записи в logfile.log, все еще видя вывод вконсоль.

Ответы [ 2 ]

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

Я сам нашел простое работоспособное решение:

{
echo some information on the environment
echo some checks
# etc....
} 2>&1 | tee "logdir/logfile.log"    

{
rsync  -rtpgov /some/folder/ some/other/folder
} 2>&1 | tee "logdir/rsync.log"

{
tar -xf some/other/tar/file.tar  -C some/other/folder2
tar -xf some/other/tar/file.tar  -C some/other/folder3
tar -xf some/other/tar/file.tar  -C some/other/folder4
# etc...

echo  some finishing checks
} 2>&1 | tee -a "logdir/logfile.log"

Поскольку число операторов для записи относительно велико, а вход в файлы журнала сильно варьируется, кажется более удобным разбить файл журнала на 2Используя опцию -a, логи будут добавлены в файл журнала

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

После обработки tee видите ли вы, какие строки следует исключить?

Когда вы знаете это только тогда, когда обрабатываете оператор 2, похоже, что вам нужно изменить каждый оператор.

rm "logdir/logfile.log"
{
   echo 1 2>&1 | tee "logdir/logfile.log"
   echo 2 2>&1
   echo 3 2>&1 | tee -a "logdir/logfile.log"
} 2>&1
echo ===
echo "Contents File "logdir/logfile.log"
cat "logdir/logfile.log"

Когда оператор 2 показывает различный вид вывода, вы можете сосредоточиться начто

rm "logdir/logfile.log"
{
   echo 1 useful
   echo 2 debug
   echo 3 this I want
} 2>&1 | tee >(grep -Ev "debug|trace|other garbage" > "logdir/logfile.log")
echo ===
echo "File "logdir/logfile.log":"
cat "logdir/logfile.log"

Когда вы не знаете, что скажет утверждение 2, но хотите отфильтровать это без изменения других строк, вы можете обойти это решение:

rm "logdir/logfile.log"
{
   echo 1 useful
   echo 2 debug | sed 's/^/FREEZE/'
   echo 3 this I want
} 2>&1 | tee >(grep "^FREEZE" > "logdir/logfile.log") | sed 's/^FREEZE//'
echo ===
echo "File "logdir/logfile.log":"
cat "logdir/logfile.log"
...