
У меня есть два сценария, или, может быть, лучше назвать один оберткой для другого.
Вот обертка:
#!/usr/bin/expect
set timeout 20
spawn "./installOracleDatabase.sh"
expect "replace Disk1/upgrade/gen_inst.sql?" { send "N\r" }
expect "Specify the HTTP port that will be used for Oracle Application Express" { send "\r" }
expect "Specify a port that will be used for the database listener" { send "\r" }
expect "initial configuration:" { send "root\r" }
expect "Confirm the password:" { send "root\r" }
expect "Do you want Oracle Database 11g Express Edition to be started on boot" { send "y\r" }
А вот и основной сценарий:
#!/bin/bash
#install required libraries and programs
sudo yum -y install libaio bc flex unzip
#unzipping the Oracle package
unzip -q oracle-xe-11.2.0-1.0.x86_64.rpm.zip
cd Disk1
sudo rpm -ivh oracle-xe-11.2.0-1.0.x86_64.rpm
sudo /etc/init.d/oracle-xe configure
cat " . /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh" >> $HOME/.bashrc
Проблема со вторым скриптом заключается в том, что после последнего шага в sudo /etc/init.d/oracle-xe configure
, когда скрипт настройки спрашивает «Хотите ли вы, чтобы Oracle (...) запускался при загрузке», сразу после этого шага, во время обычной установки, Oracle выполняет некоторые другие шаги:
Do you want Oracle Database 11g Express Edition to be started on boot (y/n) [y]:y
Starting Oracle Net Listener...Done
Configuring database...Done
Starting Oracle Database 11g Express Edition instance...Done
Installation completed successfully.
Этот шаг занимает некоторое время. Но мой скрипт завершается сразу после ответа y
на последний вопрос...
Как заставить скрипт дождаться завершения всей конфигурации?
решение1
Чтобы заставить expect
скрипт дождаться последнего шага Oracle, вы можете попробовать добавить следующую строку в конец скрипта expect
:
expect "Starting Oracle Net Listener...Done" { send "\r" }
expect "Configuring database...Done" { send "\r" }
expect "Starting Oracle Database 11g Express Edition instance...Done" { send "\r" }
expect "Installation completed successfully." { send "\r" }
expect eof