LINUX.ORG.RU

Странное поведение фонового запуска в bash-скрипте

 , ,


0

1

Привет.
Кто-нибудь может объяснить нижеследующее?

Реквизит:
1) скрипт «cat_stdin.sh»

#!/bin/bash
cat /dev/stdin > pipe1
2) именованные каналы pipe1 и pipe2;
3) zip-архив;
4) libarchive-tools
5) tmux с тремя «окнами»;

Вариант 1 (работает):
Окно1: cat archive.zip | ./cat_stdin.sh
Окно2: cat pipe1 | tee pipe2 | buffer > /dev/null
Окно3: cat pipe2 | bsdtar -tf-

Вывод (листинг архива):
file1.txt
file2.txt
file3.txt

А теперь, если в скрипте «cat_stdin.sh» увести команду в фон, вся конструкция не работает, листинга архива не получается.
#!/bin/bash
cat /dev/stdin > pipe1 & # <--- С этим амперсандом не работает
При этом «ps -A | grep cat_stdin» показывает, что «cat_stdin.sh» запущен.
Почему так, кто-нибудь знает/можете объяснить?


Ответ на: комментарий от gagarin0

Спасибо! Ключевая фраза: «перенаправление осуществляется перед выполнением команды».

Можно извернуться и запускать команды в обратном порядке:
сначала уводить в фон перенаправление из pipe1 в pipe2, а потом, последним шагом, лить данные из stdin в pipe1 без увода в фон.

An12
() автор топика