Bu Dockerfile giriş noktasında “set -” ne yapar?


41

Bu Docker giriş noktasının ne yaptığını anlamaya çalışıyorum .

Bana öyle geliyor ki Dockerfiles yazarken çok yaygın bir kalıp, ancak benim bash becerilerim sınırlı ve tüm özel bash sembolleri kung fu hakkında hiçbir fikrim yok.

Ayrıca, "-", "$!" vb Bunlar bash dünyada ne denir?

Özetlemek gerekirse, aşağıdaki satır ne yapmaya çalışıyor?

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

Yanıtlar:


55

setKomut (ayar seçenekleri değilken) konum parametreleri mesela ayarlar

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

--Standart "bir seçenek olarak bu şu tedavi değil bir şey yapmak" dir

Bunların "$@"hepsi mevcut pozisyon parametreleridir.

Yani dizi

set -- haproxy "$@"

Kelimenin haproxyönüne $1 $2vs. koyacağız

Örneğin

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

"-" kullanarak bir fark görmüyorum ya da olmasa da. Burada denedim ve aynı sonuçları aldım. Aradaki farkı vurgulamak için cevabı geliştirebilseniz çok sevinirim.
— Lucas Pottersky

8
Karşılaştırma set -- -z 2 3 4ve set -z 2 3 4. --Durur -abir seçenek olarak yorumlanır varlık. Bu durumda gerekli değildir , ancak --ne olduğundan emin olduğunuzda emin olduğunuzda kullanma alışkanlığı kazanmak için "iyi bir uygulamadır"
— Stephen Harris

1
Diğer ana fark, başka bir betiğin içine bir betiği kaynak olarak kullanıyorsanız set -- $arg1 $arg2, kaynak betiğin argümanları okumasına izin vermesidir, aksi takdirde yalnızca Bash, doğrudan kaynaklı bir betiğe (ve farkına varmak zor olabilir) argümanları geçirmeyi destekler.
— dragon788,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.