Перенаправление ожидаемого процесса в файл журнала - PullRequest
0 голосов
/ 10 января 2020

У меня есть скрипт, который порождает другой процесс. Я хочу перенаправить вывод этого процесса в файл журнала. Но >> не работает

#!/bin/bash
#!/usr/local/bin/expect -f
####echo $@
/usr/local/bin/expect <<EOD
set timeout 10
spawn $sec/add.zims.user ${1} "${2} ${3}" >> /home/arvind/logs/ADD.log
expect "e4234234's Password: " { send "${4}\n" }
expect "*'s New password: " { send "${5}\n" }
expect "Enter the new password again:" { send "${5}\n" }
EOD

'' '

1 Ответ

0 голосов
/ 11 января 2020

Да, команда spawn не обрабатывает перенаправления оболочки (1)

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

/usr/local/bin/expect <<EOD
# ...
spawn ... ;# with no redirection
# ...
EOD

Или используйте команды ожидают log_file и log_user:

  • log_file -a $env(HOME)/logs/ADD.log отправит выходные данные в этот файл журнала (добавляя, если вы не укажете флаг -noappend). Это не отключает обычный вывод на стандартный вывод
  • log_user 0 отключит обычный вывод на стандартный вывод. Это не изменяет ведение журнала, используя log_file

Итак:

/usr/local/bin/expect <<EOD
set timeout 10
log_user 0
log_file -a /home/arvind/logs/ADD.log
spawn $sec/add.zims.user ${1} "${2} ${3}"
# ...
END

(1) - команда exec делает делать перенаправления, но не совсем как оболочку: см. exec руководство

...