В bash
, если вы делаете:
$ cat <(ps -j)
PID PGID SID TTY TIME CMD
3887 16480 16480 pts/29 00:00:00 bash
3888 3888 16480 pts/29 00:00:00 cat
3889 16480 16480 pts/29 00:00:00 ps
16480 16480 16480 pts/29 00:00:00 bash
В zsh
:
$ cat <(ps -j)
PID PGID SID TTY TIME CMD
3935 3935 16480 pts/29 00:00:00 ps
3936 3936 16480 pts/29 00:00:00 cat
16480 16480 16480 pts/29 00:00:00 zsh
В ksh93
:
$ cat <(ps -j)
PID PGID SID TTY TIME CMD
3946 16480 16480 pts/29 00:00:00 ps
3947 3947 16480 pts/29 00:00:00 cat
16480 16480 16480 pts/29 00:00:00 ksh
Во всех оболочках 3 процесс ps
находится в другой группе процессов, отличной от группы cat
, которая является основной группой процессов терминала. zsh
, по крайней мере, достаточно хорошо, чтобы перенаправить stdin туда на /dev/null
, если это было tty, чтобы избежать проблем с этим, как многие оболочки делают для команд, выполняемых в фоновом режиме.
Ваша команда будет работать нормально, если stdin не был терминалом, но здесь, поскольку cat
не находится в основной технологической группе терминала, считывание с терминала означает, что он получит сигнал SIGTTIN
, который приведет к его приостановке. И здесь с этим не справляются изящно. В вашем случае, похоже, что SIGTTIN
игнорируется или блокируется, чтобы получить ошибку EIO (которую вы получаете при попытке чтения с управляющего терминала, когда вы не находитесь в его основной группе процессов и игнорируете/блокируете SIGTTIN
).
Однако в
(head <(cat <&3)) 3<&0
мы запускаем субоболочку на переднем плане, и все процессы в ней в конечном итоге входят в ту же группу процессов, поэтому им разрешено считывать данные с терминала. При явном перенаправлении в zsh
мы обходим перенаправление zsh
из /dev/null
. С другими снарядами
(head <(cat))
тоже сработает.
-121--84320-
Параллель Gnu позволит запускать несколько процессов из сценария оболочки параллельно, ожидая их завершения.
-121--205065-
Возможно, вы упустили это (из vsftpd.conf (5) ):
anon _ umask
Значение umask для создания файла установлено для анонимных пользователей. Примечание! Если требуется указать восьмеричные значения, запомните префикс "0", в противном случае значение будет рассматриваться как базовое целое число 10!
Default: 077