2016-05-22 4 views
1

Я использую сценарий Bash ниже для обновления программного обеспечения на OSX и перезагрузки при необходимости.Сценарий Bash не записывает полный вывод

Как ни странно, ни вывод запуска сценария, ни журнал не содержат часть вывода, если не требуется обновление программного обеспечения.

Например, если я бегу следующий на машине, которая не нуждается в никаких обновлений, я буду видеть:

% softwareupdate -i -a 
Software Update Tool 
Copyright 2002-2012 Apple Inc. 

Finding available software 
No updates are available. 

Последняя строка «Обновления не доступны» является то, что не получает записывается в мой журнал файл следующего сценария:

#!/bin/bash 
PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH 
SWLOG=/var/log/swupdate.log 

(

echo "################ SoftwareUpdate Script Beginning at $(date) ################" 

echo "Script Name: $(basename -- "$0") " 

softwareupdate -l | grep -i "restart" 

if [[ $? -eq 0 ]] #reboot will be needed 

    then 

     echo "Software update requiring reboot is needed" 
     echo "Starting..." 
     softwareupdate -i -a 
     echo "################ Rebooting at $(date) ################" 
     reboot 

    else 

     echo "No reboot needed. Updates will be applied if needed..." 
     softwareupdate -i -a  
     echo "################ SoftwareUpdate Script Ending at $(date) ################" 
     echo 

fi 
exit 0 

) | tee -a $SWLOG 

Вместо этого, журнал содержит:

################ SoftwareUpdate Script Beginning at Sat May 21 19:37:44 PDT 2016 ################ 
Script Name: swupdate.sh 
No reboot needed. Updates will be applied if needed... 
Software Update Tool 
Copyright 2002-2012 Apple Inc. 

Finding available software 
################ SoftwareUpdate Script Ending at Sat May 21 19:38:33 PDT 2016 ################ 

И опускает «Обновлений нет».

Любые идеи, предложения, почему это может произойти? Я хотел бы записать эту важную деталь.

Заранее спасибо, Dan

+0

Возможно, это потому, что в скрипте нет строки «Нет обновлений»? –

+0

@ н.м. Объясните пожалуйста – Dan

+6

Я думаю, что «Нет обновлений доступны», возможно, были отправлены на стандартную ошибку. Вы пробовали 'softwareupdate -i -a 2> & 1' –

ответ

1

Поскольку вы перенаправив вывод команде tee, передается только стандартный вывод. Стандартная ошибка игнорируется. Похож, что softwareupdate отправляет стандартную ошибку номер "нет обновлений". Поэтому перенаправление стандартной ошибки на стандартный вывод избавит вас от вашей проблемы.

softwareupdate -i -a 2>&1 

Другой способ заключается в использовании |& (сокращение для 2>&1 |) вместо |, это перенаправляет стандартные ошибки в стандартный вывод, а затем трубы выхода к команде tee.

(your_commands) |& tee -a $SWLOG 
+1

, что было проблемой, спасибо! Но моя команда tee не любит эту стенографию, поэтому в моем скрипте требуется 2> & 1. Благодаря! – Dan

 Смежные вопросы

  • Нет связанных вопросов^_^