Tanda pagar melarikan diri (#) di / etc / environment


17

Saya menambahkan variabel env ke /etc/environmenttetapi karena nilai variabel berisi tanda #, string bergaris.

MYSQL_PWD="something#no"

Sekarang jika saya envmenghasilkan kode di atas MYSQL_PWD=something. Bagaimana saya bisa lolos hash? Saya sudah mencoba \karakter.


Apakah Anda yakin memposting hal yang persis sama dengan yang Anda masukkan /etc/environment? Karena saya tidak bisa menduplikasi perilaku ini di Debian Wheezy.
— Joseph R.

Ekspor maaf tidak ada. Diperbarui pertanyaan saya.
— Umair A.

Untuk saat ini saya telah mengubah MySQL pwd :(
— Umair A.

Saya berhasil menduplikasi perilaku Anda. Saya tidak menyadari bahwa saya perlu keluar lalu kembali untuk mendapatkan shell saya untuk dibaca /etc/environment.
— Joseph R.

@ JosephephR. - Saya menduplikasi ini dan terkejut juga. Melihat ke peran file ini tampaknya konsisten dengan niatnya.
— slm

Jawaban:


18

Tampaknya ini tidak mungkin dilakukan /etc/environment. Ini dimaksudkan sebagai lokasi umum untuk variabel yang tidak bergantung pada shell. Mengingat ini tidak terlihat seperti itu mendukung string dengan tanda hash ( #) di dalamnya dan tampaknya tidak ada cara untuk melarikan diri mereka.

Saya menemukan T&J SF ini berjudul: Bagaimana seseorang bisa lolos dari karakter “#” terkemuka di linux etc / environment? . Tidak satu pun dari metode ini yang berfungsi:

  • control = "halo"
  • test0 = "# halo"
  • test1 = "h \ #ello"
  • test2 = "h # ello"
  • test3 = "h // # ello"
  • test4 = "h / # ello"
  • test5 = h # ello
  • test6 = h \ #ello
  • test7 = h # ello
  • test8 = h // # ello
  • test9 = h / # ello
  • test10 = 'h # ello'
  • test11 = 'h \ #ello'
  • test12 = 'h # ello'
  • test13 = 'h // # ello'
  • test14 = 'h / # ello'

Jawaban yang diterima untuk pertanyaan itu dan apa yang juga akan menjadi saran saya:

Yah itu adalah hal-hal rumit yang ingin Anda lakukan /etc/environmentbukan sintaksis shell, sepertinya, tetapi tidak, yang membuat orang frustrasi. Gagasan di balik /etc/environmentitu luar biasa. Cara shell-independent untuk mengatur variabel! Yay! Tetapi keterbatasan praktis membuatnya tidak berguna.

Anda tidak dapat melewatkan variabel di sana. Coba misalnya masukkan MAIL=$HOME/Maildir/ke dalamnya dan lihat apa yang terjadi. Terbaik hanya untuk berhenti mencoba menggunakannya untuk tujuan apa pun, sayangnya. Jadi Anda tidak dapat melakukan hal-hal yang Anda harapkan dapat dilakukan jika itu diproses oleh shell.

Gunakan /etc/profileatau /etc/bashrc.

Namun masih ada lagi tanya jawab yang memberikan alasan mengapa ini terjadi:

Tidak ada cara /etc/environmentuntuk keluar dari # (karena diperlakukan sebagai komentar) karena sedang diuraikan oleh dia modul PAM "pam_env" dan memperlakukannya sebagai daftar sederhana pasangan KEY = VAL dan mengatur lingkungan yang sesuai. Ini bukan bash / shell, parser tidak memiliki bahasa untuk melakukan ekspansi variabel atau karakter melarikan diri.

Referensi


apakah itu bug atau ada alasan di baliknya?
— Umair A.

1
@UmairAshraf - bukan bug, hanya fungsionalitas terbatas yang diberikan peran file ini. File ini menjangkau berbagai teknologi shell sehingga harus menggunakan fitur yang didukung di semua shell yang akan digunakan.
— slm

betapa bodohnya; ini seharusnya menggunakan format yang sama dengan /proc/environ.
— Kaz

1

Mungkin terlambat, tetapi tiga backslash sebelum #bekerja untuk saya.

Jika kata sandinya, katakan "admin # 123", Anda dapat mendefinisikannya sebagai

admin\\\#123

Ini tidak berfungsi untuk saya dalam /etc/environmentfile.
— Joey V.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.