Автор Тема: chvt из функии  (Прочитано 1824 раз)

Оффлайн goshka

  • Участник
  • *
  • Сообщений: 114
chvt из функии
« : 25.12.2013 16:00:19 »
Как бы получше написать bash скрипт, выполняющий указанные команды ка log-консоли?
Пропадаю.
Так работает, но не красиво:
LOG_TTY=6
exec_cmd_anyway()
{
 case $# in
    1) openvt -w -c $LOG_TTY -- "$1"    ;;
    2) openvt -w -c $LOG_TTY -- "$1" "$2" ;;
    3) openvt -w -c $LOG_TTY -- "$1" "$2" "$3"   ;;
    4) openvt -w -c $LOG_TTY -- "$1" "$2" "$3" "$4"   ;;
    5) openvt -w -c $LOG_TTY -- "$1" "$2" "$3" "$4" "$5"    ;;
    6) openvt -w -c $LOG_TTY -- "$1" "$2" "$3" "$4" "$5" "$6"  ;;
    7) openvt -w -c $LOG_TTY -- "$1" "$2" "$3" "$4" "$5" "$6" "$7"   ;;
    8) openvt -w -c $LOG_TTY -- "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8"   ;;
    9) openvt -w -c $LOG_TTY -- "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9"   ;;
   10) openvt -w -c $LOG_TTY -- "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" "$10"  ;;
 esac
 i=0
 STR="$1"
 while [ "$#" -gt "2" ]; do
    STR="$STR $2"
    i=`expr $i + 1`
    shift
 done
 echo "$STR" >> ${LOG_FILE}
 return
}

exec_cmd  "echo" "1234567890" "1234567890" 1"1234567890" "1234567890"

Так не работает: на консоли протоколирования пишет can't execute: file not found
exec_cmd_anyway()
{
   openvt -w -c  $LOG_TTY -- "$1"
  echo "$STR" >> ${LOG_FILE}
}
exec_cmd  "echo 1234567890 1234567890 1234567890 1234567890"



И еще openvt не хочет выполнять команду cd. Почему?
openvt -f -w -c $LOG_TTY -- "cd" "/"
openvt -f -w -c $LOG_TTY -- cd    /
« Последнее редактирование: 25.12.2013 16:52:02 от goshka »

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 160
    • Домашняя страница
Re: chvt из функии
« Ответ #1 : 25.12.2013 20:06:31 »
   10) openvt -w -c $LOG_TTY -- "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" "$10"  ;;
openvt -w -c "$LOG_TTY" -- $@
Андрей Черепанов (cas@)

Оффлайн goshka

  • Участник
  • *
  • Сообщений: 114
Re: chvt из функии
« Ответ #2 : 26.12.2013 14:07:37 »
Мда. Ни chvt ни tee не возвращает результатов работы конанды.

Как бы сделать так, чтобы весь вывод bash_script был на /dev/tty6 и параллельно в logfile?
Причем код возврата каждой команды можно было получить в переменную bash?

umount /dev/hdc1
 return_val="$?"
 echo "return_val_umount= $return_val"
 umount /dev/hdc1 | tee /tmp/log.log &> /dev/tty6
 return_val_umount|tee="$?"
 echo "return_val= $return_val"
return_val_umount=1
 return_val_umount|tee=0
 :(

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 160
    • Домашняя страница
Re: chvt из функии
« Ответ #3 : 26.12.2013 14:30:48 »
Напишите скрипт на Bash со считыванием каждого возврата в переменные. А вывод можно в "$( ... )" получать.
Андрей Черепанов (cas@)

Оффлайн goshka

  • Участник
  • *
  • Сообщений: 114
Re: chvt из функии
« Ответ #4 : 26.12.2013 14:58:44 »
Напишите скрипт на Bash со считыванием каждого возврата в переменные. А вывод можно в "$( ... )" получать.

Не понятно.

Если так, опять не получается
can't umount пишется на /dev/tty1
return_val = на /dev/tty6

Нужно, чтобы весь вывод был на диагностической консоли /dev/tty6

{
 umount /dev/sdc1
 return_val="$?"
 echo "return_val=${return_val}"
} | tee -a /tmp.log &> /dev/tty6



Если через временный файл в tmpfs, прогресс выполнения команд не виден. Только после завершения команд все выводится.

mkfs.ext3 /dev/sdc1 &> /tmp/cmd.log
 return_val="$?"
 cat /tmp/cmd.log > $LOG_TTY
 if [ -f ${TARBALL_DIR}/${LOG_FILE} ]; then
    cat /tmp/cmd.log >> ${TARBALL_DIR}/${LOG_FILE}
 fi
 if [ "$return_val" -ne "0" ]; then
    exit_error "$1" "$return_val"
 fi

« Последнее редактирование: 26.12.2013 15:00:29 от goshka »

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 160
    • Домашняя страница
Re: chvt из функии
« Ответ #5 : 26.12.2013 15:10:09 »
Если так, опять не получается
can't umount пишется на /dev/tty1
return_val = на /dev/tty6

Нужно, чтобы весь вывод был на диагностической консоли /dev/tty6
Берёте вывод в скрипте и через logger соответствующих facility запихиваете через syslog на нужные терминалы.

По теме:
man logger
man syslog.conf
UPD: Если вывод растянут по времени, то запихиваете кусочно через
cmd.. | while read -r var;do logger -p <facility.level> "$var";done
logger -p <facility.level2> "Error code: $?"
« Последнее редактирование: 26.12.2013 15:14:37 от Skull »
Андрей Черепанов (cas@)