В zsh, различии между кошкой <(кошка) по сравнению с кошкой | кошка по сравнению с кошкой = (кошка)?

curl понятия не имеет, что это перестало работать - это имело четко определенный вход, это связалось с сервером и возвратило a 200 OK ответ. Из-за этого Вы не можете полагаться на код выхода curl (который является что && делает).

Вместо этого мы должны использовать что-то еще для определения успешности или неуспешности, такой как вывод, сгенерированный curl.

Как примечание стороны, это обычно - не хорошая идея использовать ls в сценарии. Здесь, это перестанет работать, если файл, окажется, будет иметь новую строку или пробел. Это может быть маловероятно, но но это возможно. Дополнительную информацию см. в http://mywiki.wooledge.org/ParsingLs. Как показывает опыт, я только использую ls в сценариях при отображении результатов для человеческих глаз. Если я обрабатываю результаты всегда, я использую find . -0 ...

18
26.08.2018, 00:33
1 ответ
  1. a | b подключения STDOUT от a и STDIN от b только при помощи dup/dup2. Обе команды выполняются параллельно.

  2. a =(b) заменяет аргумент a с временным именем файла. b будет выполняться прежде a поскольку временный файл должен быть создан, прежде чем он сможет быть передан a

  3. a <(b) заменяет аргумент a с именованным каналом. a и b выполненный параллельно. Это теперь, где это становится немного сложным:

    b в фоновом режиме и не может читать из терминала. Можно протестировать его сами при помощи strace -p $PID для присоединения к второй кошке обрабатывают для наблюдения процесса.

    a тем временем попытки читать из именованного канала, но ничего не могут считать как как b не можете прочитать.

    • Это означает, что у Вас в основном есть мертвая блокировка где a попытки читать из b но b не может читать из STDIN и не может записать в a

Больше информации о фоновом процессе и терминале от удара человека:

Для упрощения реализации пользовательского интерфейса к управлению заданиями операционная система поддерживает понятие текущего терминального идентификатора группы процесса. Члены этой группы процесса (обрабатывает, чей идентификатор группы процесса равен текущему терминальному идентификатору группы процесса) получают сгенерированные клавиатурой сигналы, такие как SIGINT. Эти процессы, как говорят, находятся на переднем плане. Фоновые процессы - те, идентификатор группы процесса которых отличается от терминала; такие процессы неуязвимы для сгенерированных клавиатурой сигналов. Только приоритетным процессам позволяют читать из или, если пользователь так указывает с stty tostop, запишите в терминал. Фоновые процессы, которые пытаются читать из (пишут в то, когда stty tostop в действительности) терминал отправляется SIGTTIN (SIGTTOU) сигнал терминальным драйвером ядра, который, если не поймано, приостанавливает процесс.

23
27.01.2020, 19:46
  • 1
    Большой, спасибо - это разрешило много! –  Alan O'Donnell 27.07.2012, 19:37
  • 2
    Отметьте если не интерактивный, zsh перенаправляет стандартный вход фоновых команд (включая тех, которые в <(cmd)) к /dev/null, таким образом, поведение отличается (zsh -c 'cat <(cat)' возвраты сразу и ничего не производят). –  Stéphane Chazelas 04.11.2012, 01:44

Теги

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