канал не записывает в файл [дубликат]

Сценарии оболочки всегда выполняются по порядку. Set -e не влияет на порядок операций, завершается только при ненулевом значении.

Исключением из «по порядку» являются фоновые задачи с и , которых здесь нет.

Я подозреваю, что ваша распаковка ведет себя не совсем так, как вы ожидали. Сначала попробуйте повторить код возврата распаковки с помощью echo $? в следующей строке и посмотрите, успешно ли это. После этого добавьте ls -l / tmp / sampleFolder , чтобы увидеть содержимое.
Вы также можете запустить set -x , чтобы увидеть вывод трассировки из bash, который также покажет порядок операций в скрипте.

1
16.02.2016, 15:20
2 ответа

Если вы используете GNU, похоже, что параметр -l для sed неверен: вам, вероятно, нужен параметр -u (без буферизации). Кроме того, grep лишний. Вы должны иметь возможность получить то, что хотите, только с помощью sed:

ping $HOST | sed -u -n '/ ms$/s/.* time=\(.*\) ms$/\1/p' >file.out

-n подавляет нормальный совпадающий вывод, в то время как s /// p принудительно выводит совпадающие строки .

0
27.01.2020, 23:36

Каждый | потенциально окружен буфером вывода stdio и буфером ввода stdin. Вам нужно выяснить, какие из них вам нужно отключить, чтобы получить трубопровод в реальном времени.

У меня это работает:

ping localhost |egrep --line-buffered -v 'PING|timeout' |\
stdbuf -o0 sed -l -e 's/^.* time=\(.*\) ms$/\1/g' > file

Изначально я помещал stdbuf -i0 -o0 перед каждой командой, а затем выяснил, какие из них не нужны.

2
27.01.2020, 23:36

Теги

Похожие вопросы