Почему этот сценарий не работает?

#!/bin/bash rm out mkfifo out nc -l 8080 < out | while read line do echo hello > out echo $line done 

Если я перейду к IP-адресу машины, на которой работает этот скрипт (с использованием порта 8080), я ожидаю увидеть слово «привет», а затем на машине, на которой запущен скрипт, я ожидаю, что он выведет строки из запроса.

Однако ничего не происходит. Браузер не получает ответа, и ничего не выводится на терминал сервера.

Почему он не работает, и что я могу изменить, чтобы заставить его работать? Я хочу держать его в простых трубах, я не хочу использовать замену процесса или что-то в этом роде.

One Solution collect form web for “Почему этот сценарий не работает?”

Перенаправление < out заставляет именованный канал открываться для чтения. Это блокирует до тех пор, пока ни один процесс не будет открыт для записи. Между тем, правая сторона конвейера блокируется в команде read , ожидая, пока nc (который еще не запустился), чтобы вывести что-то через трубу. Это тупик .

Чтобы сценарий продолжался, убедитесь, что именованный канал открыт для записи и для самостоятельного чтения. Например:

 nc -l 8080 < out | while read line do echo hello >&3 echo "$line" done 3>out 

или

 nc -l 8080 < out | { exec 3>out while read line do echo hello >&3 echo "$line" done } 

Обратите внимание: что-то вроде этого не сработает, потому что nc увидит, что его ввод закрыт после чтения 0 байтов, а последующие записи блокируют ожидание, когда именованный канал будет снова открыт для чтения:

 nc -l 8080 < out | { : >out while read line do echo hello >out echo "$line" done } 
  • Скопируйте файлы в папку назначения только в том случае, если файлы уже существуют. но исходные файлы имеют другое расширение файла
  • Использование bash для переформатирования «#include» в списке файлов с использованием regex
  • Как я могу обнаружить оболочку без входа? (В Zsh)
  • file command + как просмотреть все результаты из команды file
  • Вопросы о функциях whiptail и bash
  • Как заставить awk работать в цикле while
  • как сохранить вывод команды в массив с каждым значением в двойной кавычки
  • Найти файлы с 32 символами в рекурсивно в каталоге и применить команду
  • Помогите мне понять, почему эта функция bash не работает рекурсивно
  • Сценарий Bash: файл справки внутри скрипта или в другом файле?
  • Inline debug (xxtrace) в скриптах
  • Если утверждения в Array
  • Linux и Unix - лучшая ОС в мире.