Что ж, в моем сценарии я использую простую строку для токенизации:
IFS=';' read -ra ALL_ADDR <<< "${SERVER}"
Однако в тот момент, когда я запускаю этот скрипт в док-контейнере busybox (alpine) linux, он спотыкается вокруг строки выше. line 43: syntax error: unexpected redirection
Я так понимаю, это потому, что скрипт запускается не Bash
, а Ash
, у которого нет параметра перенаправления <<<
. Как я могу преобразовать приведенную выше строку в код, который работает одинаково во всех популярных сценариях оболочки. (в основном Баш, Эш и Дэш)?
для полноты переменная выглядит так:
SERVER="/api/v1:127.0.0.1:1337;/api/v2:127.0.0.1:1338"
IFS=';' read -ra ALL_ADDR <<< "${SERVER}"
for i in "${ALL_ADDR[@]}"; do
IFS=':' read -ra ADDR <<< "${i}"
PROXY=${ADDR[0]}
IPADDR=${ADDR[1]}
PORT=${ADDR[2]}
LOC_STRING="${LOC_STRING}\tlocation ${PROXY} {\n\t\tproxy_pass http://${IPADDR}:${PORT}\n\t}\n"
done
LOC_STRING=${LOC_STRING//\//\\\/}
#"insert" above generated lines into a site config for nginx
sed -e "0,/^\s*location/{s/^\s*location/${LOC_STRING}\n&/}" 'portal' > "../sites-enabled/portal"
ash
не поддерживает. - person chepner   schedule 08.01.2020read
ash
не поддерживает флаг-a
. Вероятно, вам придется использовать циклwhile read -r ADDR; do [...]; done <<DELIM; $SERVER; DELIM
для достижения того же эффекта. - person Aaron   schedule 08.01.2020