Если вы вручную запускаете Docker-контейнер с помощью nginx с портом 80, отображаемым как некоторый локальный порт, работает ли он при переходе к / anypath? У вас есть доступ к журналам доступа nginx из вашего модуля?
Из-за передачи по каналу read
выполняется в его собственной подоболочке.
echo foo | while read a; do echo $a; done
сделает то, к чему Вы ожидаете это.
альтернатива:
echo foo | (read a ; echo $a)
Править:
При необходимости в $a вне подоболочки необходимо инвертировать команды:
read a < <(echo foo); echo $a
этим путем чтение выполняется в текущем процессе
Просто к вашему сведению; в ksh это работает как ожидалось; См. также http://kornshell.com/doc/faq.html, Раздел III (вопросы о программировании оболочки), Q13:
Q13. What is $bar after, echo foo | read bar?
A13. The is foo. ksh runs the last component of a pipeline
in the current process. Some shells run it as a subshell
as if you had invoked it as echo foo | (read bar).
Я предложил решение, которое не скрывает значения переменных в подоболочке, и это может также работать с несколькими значениями.
set `echo foo bar`
A=$1
B=$2
По словам Kernighan и Пика Среда программирования Unix (p. 159) "ни одна из оболочки встроенные команды (в противоположность примитивам потока управления, как для) могут быть перенаправлены с> и <", и "это могло бы быть описано как ошибка в оболочке". Это, кажется, объясняет a) почему код как
ls *.c |
while read file
do
echo $a
done
неизменно работы без проблемы и b) несоответствие, что перенаправление из файла работает.
читайте ожидает вход на новой строке
while read a; do echo $a; done foo bar ^D
более или менее, что Вы хотели