dpkg: ошибка: дублирующийся файл вызывает интерес для имени файла `/ usr / lib / gio / modules 'и пакета` libglib2.0-0'

До версии 5.0.8, zsh не мог ждать уже мертвых заданий. Это было изменено в версии 5.0.8 в 2014 году. См. изменение там.

Здесь вы можете просто перенаправить stderr в /dev/null, чтобы игнорировать проблему:

wait $pid 2> /dev/null

Обратите внимание, что в:

{ tee $tmpdir/orig | arbitrary_pipeline > $tmpdir/alt; } &

качестве оптимизации, zsh не будет форкать дополнительный процесс для arbitrary_pipeline, он будет выполнять его в том же процессе, что и тот, который запускает подшелл, запущенный в фоне.

paste не завершится до того, как увидит EOF на своем stdin, его stdin - это труба, на другом конце которой пишет $pid (и его дети, если таковые имеются). Таким образом, он не увидит eof, пока $pid (и его дети) не закроет все свои файловые дескрипторы (обычно только stdout) на пишущем конце трубы. Если только $pid явно не закроет свой stdout (что бывает очень редко), это произойдет только при выходе.

Это означает, что paste в большинстве случаев не завершится до $pid, но на всякий случай все же стоит выполнить wait.

Обратите внимание, что здесь можно использовать coproc, чтобы избежать временных fifos:

coproc arbitrary_pipeline
cat >&p | paste - /dev/fd/3 3<&p &
coproc : close
wait

(обратите внимание, что wait также ожидает coprocs).

2
13.04.2017, 15:22
0 ответов

Теги

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