このDockerfileエントリポイントで「set-」は何をしますか?


41

このDockerエントリポイントが何をするのかを理解しようとしてます。

Dockerfileを作成するとき、これは非常に一般的なパターンのようですが、私のbashスキルは限られているため、すべての特別なbashシンボルkung fuについてはわかりません。

また、「-」、「$!」をグーグルで検索するのは困難です。など。bashの世界ではこれらは何と呼ばれていますか?

要約すると、以下の行は何をしようとしているのですか?

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

回答:


55

setコマンド(オプションを設定していない)位置パラメータなどを設定します

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

これ--は標準です。「これに続くものをオプションとして扱わないでください」

これら"$@"はすべて、既存の位置パラメーターです。

シーケンス

set -- haproxy "$@"

などのhaproxy前に単語を置きます$1 $2

例えば

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

「-」を使用しても、使用しなくても違いは見られません。ここで試してみて、同じ結果を得ました。違いを強調するために答えを改善できればと思います。
ルーカスポッタースキー16

8
比較set -- -z 2 3 4set -z 2 3 4--停止した-aオプションとして解釈されます。この場合、それは必要ではありません--次のことを確認しているときに使用する習慣を身に付けることは「良い習慣」です:
スティーブンハリス

1
もう1つの主な違いは、別のスクリプト内でスクリプトを使用しているset -- $arg1 $arg2場合、使用するとソーススクリプトが引数を読み取れるようになることです。そうしないと、Bashのみがソーススクリプトへの引数の直接の受け渡しをサポートします(注意が難しい場合があります)。
dragon788
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.