Как красиво отформатировать python-скрипт, который вызывается в bash скрипте?
У меня есть такой код:
if [[ $ENABLE_DIND == 1 ]]; then
python3 <<EOF
import pathlib
import subprocess
import time
path = pathlib.Path('/var/run/docker.sock')
while not path.exists():
time.sleep(0.01)
try:
subprocess.call(['chmod', '0666', '/var/run/docker.sock'])
except Exception as e:
print(e)
EOF
fi;
Мне не нравится как отформатирована часть, которая вызывает Python-код. Но при этом любые попытки навести красоту, приводят к тому, что bash ругается на синтаксис.
Ответы (1 шт):
Можно просто оставить и смирится. Форматирование встроенных документов с начала строки — вполне привычная вещь для bash'а.
Можно также использовать <<- и табами для отбивки отступов:
if [[ $ENABLE_DIND == 1 ]]; then
python3 <<-EOF
import pathlib
import subprocess
import time
path = pathlib.Path('/var/run/docker.sock')
while not path.exists():
time.sleep(0.01)
try:
subprocess.call(['chmod', '0666', '/var/run/docker.sock'])
except Exception as e:
print(e)
EOF
fi
Внимание: здесь отступы встроенного документа должны быть отбиты именно символами табуляции (\t), а код питона — пробелами. Данное различие на сайте может отображаться некорректно.
Но в данном случае всё это намного проще будет сделать сразу на bash'е:
if [[ $ENABLE_DIND == 1 ]]; then
while [ ! -e /var/run/docker.sock ]; do
sleep 0.01
done
chmod 0666 /var/run/docker.sock
fi
Также вместо тупого ожидания файла можно было бы сделать это с помощью чего-то более технологичного вроде inotify (если дело на linux), но в данном случае это не даст особых преимуществ...
Ещё более правильным решением было бы найти, где почесать ту штуку, которая создаёт этот файл, чтобы она делала это сразу с нужными правами или как-то другим способом настроить права, но это уже будет совсем другая история...