Що робить "set -" у цій точці входу Dockerfile?


41

Я намагаюся зрозуміти, що робить ця вхідна точка Докера .

Мені здається, це дуже поширений зразок при написанні Dockerfiles, але мої баш-навички обмежені, і я не маю уявлення про всі спеціальні баш-символи кунг-фу.

Крім того, важко гугл для "-", "$!" тощо. Як їх називають у світі баш?

Підводячи підсумок, що намагається зробити рядок нижче?

if [ "${1#-}" != "$1" ]; then
  set -- haproxy "$@"
fi

Відповіді:


55

setКоманда (якщо не настройка параметрів) встановлює позиційні параметри наприклад ,

$ set a b c
$ echo $1
a
$ echo $2
b
$ echo $3
c

Стандарт --є "не ставитися до цього, як до цього, як до варіанту"

"$@"Всі існуючі позиції paramters.

Отже послідовність

set -- haproxy "$@"

Поставить слово haproxyперед $1 $2тощо.

напр

$ echo $1,$2,$3
a,b,c
$ set -- haproxy "$@"
$ echo $1,$2,$3,$4   
haproxy,a,b,c

я не бачу різниці, використовуючи "-" чи ні, хоча. Спробував тут і отримав ті ж результати. Я хотів би, якби ви могли покращити відповідь, щоб підкреслити різницю.
Лукас Поттерський

8
Порівняйте set -- -z 2 3 4і set -z 2 3 4. --Зупиняє -aінтерпретується в якості опції. У цьому випадку це не обов'язково , але це "хороша практика" ввійти в звичку користуватися, --коли ви зазначаєте, що слід :-)
Стівен Харріс

1
Інша основна відмінність полягає в тому, що якщо ви шукаєте скрипт всередині іншого сценарію, використання set -- $arg1 $arg2дозволяє дозволити вашому скриптові скрипту читати аргументи, інакше лише Bash підтримує передачу аргументів безпосередньо до скрипту, що знаходиться в джерелі (і це може бути складно помітити).
dragon788
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.