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.