Вы можете перенаправить стандартный stdin через модуль 3, чтобы сохранить его внутри конвейера:
{ cat notify-finished | while read line; do
read -u 3 input
echo "$input"
done; } 3<&0
Кстати, если вы действительно используете cat
таким образом, замените его перенаправлением и все становится еще проще:
while read line; do
read -u 3 input
echo "$input"
done 3<&0 <notify-finished
Или вы можете поменять stdin и unit 3 в этой версии - прочитать файл с блоком 3 и просто оставить stdin в покое:
while read line <&3; do
# read & use stdin normally inside the loop
read input
echo "$input"
done 3<notify-finished
Включите его извне (ваш первый вариант). Тогда, когда вы выполняете обслуживание javascript, вы также не делаете этого внутри PHP.
Я бы выбрал первый вариант, хотя это дополнительный запрос, это означает, что страница html / php будет меньше. Кроме того, насколько я понимаю, после кеширования Javascript он больше не будет запрашиваться, тогда как страница html / php будет запрашиваться каждый раз.
В зависимости от вашей функциональности javascript вы также можете добавить async = "true" в сценарий, чтобы гарантировать, что страница загружается сначала, а затем javascript.
Включение необработанного текста предпочтительно, если вы не ожидаете, что количество загрузок страницы на пользователя превысит 1. Если вы ожидаете, что пользователи будут запрашивать вашу страницу несколько раз, то внешнее, кэшируемое включение будет правильным вариантом. Обычно так и происходит.
Включите скрипт, включив его, чтобы javascript был во внешнем файле, а затем кеш браузера мог выполнять свою работу.