LINUX.ORG.RU
решено ФорумAdmin

Ошибка Illegal number

 


0

1

Здравствуйте!

В плэйбуке есть такая строка:

for i in {1..2}; do echo ubu$(printf "%01d" $i) ansible_host=192.168.56.12$((i)); done | sudo tee inventory

Ansible сообщает:

"/bin/sh: 1: printf: {1..2}: expected numeric value\n/bin/sh: 1: Illegal number: {1..2}"

Как это обойти?


Заменить for i in {1..2}; do на for i in 1 2; do или заменить интерпретатор с /bin/sh на /bin/bash

No ★★
()
Ответ на: комментарий от dikey0ficial

использовать seq (стандартная юниксовая утилита)

seq был придуман чтобы нагенерить в поток набор последовательных цифр и во времена, когда арифметические выражения в sh-ах были медленные и неудобные. Теперь seq даже встроили внутрь bash но лучше не стало, ибо арифметические выражения с присваиванием даже без чистого bash-изма for ((...)) вполне реализуемы и в обычных sh-ах в пару строк типа i=0; while [ $((i=i+1)) -le 2 ], где всё наглядно-понятно-быстро-удобно.

vodz ★★★★★
()
Ответ на: комментарий от vodz

где всё наглядно-понятно-быстро-удобно

Мне кажется, for i in `seq 2`; do понятен с первого взгляда, в отличии от приведённого Вами варианта. Тем не менее, в некоторых дистрибутивах, вероятно, может не быть seq, так что Ваш вариант, конечно, универсальней.

dikey0ficial
()
Последнее исправление: dikey0ficial (всего исправлений: 1)
Ответ на: комментарий от dikey0ficial

Мне кажется, for i in `seq 2`; do понятен с первого взгляда

Ну кому как, по мне это порочная практика, так как для 1-2 проще руками написать, а для миллиона - это несколько мегабайт памяти вначале скушается, о чём некоторые забывают.

vodz ★★★★★
()
Ответ на: комментарий от dikey0ficial

Сделал так:

for i in $(seq {{ quantity_lxc }}); do echo ubu$(printf "%01d" $i) ansible_host=192.168.56.12$((i)); done | sudo tee inventory

и всё заработало. Спасибо!

paa66
() автор топика

А зачем у тебя в плейбуках bash/sh портянки? Они были придуманы, чтобы наоборот уйти от этого говнокода.

BOOBLIK ★★★★
()
Ответ на: комментарий от BOOBLIK

А зачем у тебя в плейбуках bash/sh портянки?

Ну вот есть тут у многих такая болезнь - мало того, что портянки, так они еще должны быть максимально портянистее, так их немного после этого отпускает, не на долго. Ну а как иначе можно расценить вот это $(printf «%01d» $i) $((i))?

vodz ★★★★★
()
Ответ на: комментарий от BOOBLIK

А зачем у тебя в плейбуках bash/sh портянки?

Bash прекрасен, он ещё долго будет выручать, и не только меня. Только начинаю изучать ansible, со временем, думаю, перекуюсь :)

paa66
() автор топика
Ответ на: комментарий от Aceler

А циклами самого ansible не судьба?

С циклами в ansible пока не знаком. Со временем переделаю.

paa66
() автор топика
Ответ на: комментарий от vodz

так их немного после этого отпускает, не на долго.

Харэ прикалываться, лучше помоги мне в другой ветке - «Не устанавливаются пакеты для работы с mysql в andible».

paa66
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.