Cara melarikan diri “!” dan “&” dalam variasi lingkungan docker

16

Saya memiliki wadah buruh pelabuhan yang ingin saya jalankan dan menyerahkan beberapa kata sandi. Satu dengan tanda seru !dan yang lainnya dengan tanda ampersand &. Jadi saya ingin menjalankan ini:

docker run -i -t --rm \
-e "LDAP_FILTER=(&(objectCategory=person)(objectClass=user)" \
-e "LDAP_PASS=Secret!Password" \
user-prefix/container-name

Itu tidak bekerja. &diganti {LDAP_FILTER}dan menjadi !terpotong. Saya cukup yakin saya harus melarikan diri ini. Tapi \!dan \&tidak berhasil.

DASKAjA
sumber
2
Sudahkah Anda mencoba dengan tanda kutip tunggal? Karena Anda tidak memiliki variabel untuk diinterpolasi, Anda bisa lolos dengan tanda kutip tunggal di sini.
Rich Homolka
1
Tembakan buta: Jika -eparameter dieksekusi oleh instance shell lain, Anda mungkin harus melarikan diri dua kali, jadi coba \\\&dan \\\!.
mpy
@ mpy triknya melakukannya untuk saya, itulah yang terbaik!
Simon Schnell

Jawaban:

17

Saya menemukan solusinya:

  • Menggunakan tanda kutip tunggal dan bukan tanda kutip ganda
  • Lepaskan ampersand &ke\&
  • Tidak luput dari tanda seru !

jadi ini bekerja:

docker run -i -t --rm \
-e 'LDAP_FILTER=(\&(objectCategory=person)(objectClass=user)' \
-e 'LDAP_PASS=Secret!Password' \
user-prefix/container-name
DASKAjA
sumber