В bash
вы фиксируете вывод команды с помощью $()
(или обратных кавычек, но я предпочитаю первые, поскольку вы можете их вкладывать):
pax> xx=$(ls -1 | grep bac)
pax> echo "..${xx}.."
..backup0.sh
backup1.sh..
Итак, в вашем конкретном случаевы бы смотрели на что-то вроде:
timestamp=$(db2 backup db $SOURCE online compress include logs 2>&1
| tee /tmp/output
| grep 'image is'
| awk '{print $11}')
Имейте в виду, я разбил это на несколько строк для удобства чтения, но оно должно идти на одной строке.Что касается того, как это работает:
-
2>&1
сочетает в себе стандартный вывод и ошибку. tee
гарантирует, что весь вывод хранится где-то. grep
даст вам соответствующую строку. awk
напечатает только 20100906142221
. xx=$(...)
возьмет это и присвоит xx
.
Вам может потребоваться точная настройка некоторых команд, если ваш вывод немного отличается от того, что вы указали, но это должно быть хорошим началом.
Исходя из комментариев, вот что вам нужно начать:
#!/bin/bash
echo what's the source db name?
read SOURCE
echo what's the target db name?
read TARGET
db2 backup db $SOURCE online compress include logs 2>&1 | tee /tmp/db_bkp_$$
DB2TIME=$(cat /tmp/db_bkp_$$ | grep 'image is' | awk '{print $11}')
rm -rf /tmp/db_bkp_$$
db2 restore database $SOURCE taken at $DB2TIME into $TARGET
Это выполнит команду DB2, отправив вывод и ошибку на терминал и во временный файл ($$
даетВы текущий идентификатор процесса, чтобы избежать конфликтов имен файлов).Затем вы извлекаете дату / время из временного файла, затем удаляете этот файл.
Затем вы используете дату / время.