Сценарии оболочки всегда выполняются по порядку. Set -e не влияет на порядок операций, завершается только при ненулевом значении.
Исключением из «по порядку» являются фоновые задачи с и
, которых здесь нет.
Я подозреваю, что ваша распаковка ведет себя не совсем так, как вы ожидали. Сначала попробуйте повторить код возврата распаковки с помощью echo $?
в следующей строке и посмотрите, успешно ли это. После этого добавьте ls -l / tmp / sampleFolder
, чтобы увидеть содержимое.
Вы также можете запустить set -x
, чтобы увидеть вывод трассировки из bash, который также покажет порядок операций в скрипте.
Если вы используете GNU, похоже, что параметр -l
для sed неверен: вам, вероятно, нужен параметр -u
(без буферизации). Кроме того, grep
лишний. Вы должны иметь возможность получить то, что хотите, только с помощью sed:
ping $HOST | sed -u -n '/ ms$/s/.* time=\(.*\) ms$/\1/p' >file.out
-n
подавляет нормальный совпадающий вывод, в то время как s /// p
принудительно выводит совпадающие строки .
Каждый |
потенциально окружен буфером вывода stdio и буфером ввода stdin. Вам нужно выяснить, какие из них вам нужно отключить, чтобы получить трубопровод в реальном времени.
У меня это работает:
ping localhost |egrep --line-buffered -v 'PING|timeout' |\
stdbuf -o0 sed -l -e 's/^.* time=\(.*\) ms$/\1/g' > file
Изначально я помещал stdbuf -i0 -o0
перед каждой командой, а затем выяснил, какие из них не нужны.