Выходной канал в awk не обрабатывается сразу
Рассмотрим следующий фиктивный скрипт резервного копирования:
#!/bin/bash
echo "rsync started"
sleep 1 # rsync time
echo "rsync completed"
echo "starting upload"
sleep 5 # upload time
echo "upload completed"
и следующий минимальный стартовый скрипт
#!/bin/bash
/path/to/backup.sh|awk '/^rsync completed/ {print "Restarting services"}'
echo "backup completed"
Я ожидал бы, что вывод "Restarting services" появится через одну секунду, но вместо этого он появится в конце через 6 секунд, когда работает под Debian Wheezy.
Где моя ошибка? Почему действие awk напрямую не обрабатывается, когда строка "rsync completed" записывается в stdout?
1 ответ
Используйте sed вместо awk.
/path/to/backup.sh|sed 's/^rsync completed/Restarting services/g'
echo "backup completed"