Вот один из способов чтения этих данных в ассоциативный массив bash:
Код:
#!/usr/bin/env bash
declare -A hosts
while IFS=" " read -r priority host ; do
hosts["$priority"]="$host"
done < <(dig mx +short google.com)
for priority in "${!hosts[@]}" ; do
echo "$priority -> ${hosts[$priority]}"
done
Вывод:
20 -> alt1.aspmx.l.google.com.
10 -> aspmx.l.google.com.
50 -> alt4.aspmx.l.google.com.
40 -> alt3.aspmx.l.google.com.
30 -> alt2.aspmx.l.google.com.
Кроме самостоятельного вычисления длительности сценария (желательно с использованием значений, возвращаемых из date+%s
, как указал Роман) у вас есть еще несколько вариантов.
Существует команда time
. Вы можете выполнить time some-script.sh
, и в конце будет выведено время выполнения скрипта. См. man-страницу.
Вы также можете использовать $SECONDS
в сценарии bash. Он будет хранить количество секунд с момента запуска процесса. Таким образом, вы можете echo It took $SECONDS
в конце вашего сценария или около того. Поищите $SECONDS
на странице bash man.
Кроме того, в bash есть встроенный модуль times
. Она печатает информацию, подобную time
, но для самой оболочки (процесса, который ее выполняет), а не для любой команды, которая ей передается (на самом деле она не принимает никаких аргументов). См. также man bash.
EDIT: Ваша вторая ссылка действительно предоставляет решение, которое выглядит очень похожим на то, что вы пытаетесь сделать, и оно также использует строку формата +%s, о которой говорил Роман.
Вы можете использовать date +% s
- в нем сохраняются секунды с 1970-01-01 00:00:00 UTC