Сед с двумя переменными - PullRequest
0 голосов
/ 22 января 2020

Я столкнулся с непонятным для меня поведением.

NODES=6
PORT=6379
until [ $NODES -eq 0 ]
do
        ((NEWPORT=PORT++))
        cp cluster-config.conf redis-$NEWPORT.conf
        sed -i -e "s/$PORT/$NEWPORT/g" redis-$NEWPORT.conf
        ((NODES--))
done

Это не работает, но это работает

NODES=6
PORT=6379
until [ $NODES -eq 0 ]
do
        ((NEWPORT=PORT++))
        cp cluster-config.conf redis-$NEWPORT.conf
        sed -i -e "s/6379/$NEWPORT/g" redis-$NEWPORT.conf
        ((NODES--))
done

В чем разница между

sed -i -e "s/$PORT/$NEWPORT/g" redis-$NEWPORT.conf

против

sed -i -e "s/6379/$NEWPORT/g" redis-$NEWPORT.conf

Ответы [ 2 ]

2 голосов
/ 22 января 2020

Вы хотите создать 6 копий файла конфигурации, заменив существующий порт 6379 одним из 6380-6385. Это гораздо проще записать как

port=6379
nodes=6
for ((newport=port+1; newport <= port + nodes; newport++)); do
  sed -e "s/$port/$newport/g" cluster-config.conf > redis-$newport.conf
done
2 голосов
/ 22 января 2020

Вы делаете PORT++, что увеличивает PORT на единицу.

К тому времени, когда вы используете sed, он расширяется до 6380, а затем не обнаруживается в файле.

...