Escape hash mark (#) ใน / etc / environment


17

ฉันกำลังเพิ่มตัวแปร env ไว้/etc/environmentแต่เนื่องจากค่าตัวแปรมี # sign สตริงจึงถูกสไทรพ์

MYSQL_PWD="something#no"

ตอนนี้ถ้าฉันทำข้างต้นอัตราผลตอบแทนรหัสenv MYSQL_PWD=somethingฉันจะหนีแฮชได้อย่างไร ฉันลอง\ตัวละครแล้ว


คุณแน่ใจหรือว่าคุณโพสต์สิ่งเดียวกันกับที่คุณใส่/etc/environment? เพราะฉันไม่สามารถทำซ้ำพฤติกรรมนี้กับ Debian Wheezy
โจเซฟอาร์

ขออภัยการส่งออกไม่ได้อยู่ที่นั่น อัปเดตคำถามของฉัน
Umair A.

ตอนนี้ฉันเปลี่ยน MySQL pwd :(
Umair A.

ฉันจัดการเพื่อทำซ้ำพฤติกรรมของคุณ /etc/environmentผมไม่ทราบผมต้องออกจากระบบแล้วกลับมาอยู่ในที่จะได้รับเปลือกของฉันที่จะอ่าน
โจเซฟอาร์

@JosephR - ฉันทำซ้ำและรู้สึกประหลาดใจเช่นกัน เมื่อพิจารณาถึงบทบาทของไฟล์นี้ดูเหมือนว่าจะสอดคล้องกับเจตนาของมัน
slm

คำตอบ:


18

/etc/environmentนี้จะไม่ปรากฏที่จะเป็นไปได้ด้วย มันมีความหมายว่าเป็นสถานที่ทั่วไปสำหรับตัวแปรที่เชลล์เป็นอิสระ กำหนดให้นี้ดูเหมือนว่าจะไม่สนับสนุนสตริงที่มีเครื่องหมายแฮช ( #) ในพวกเขาและดูเหมือนจะไม่มีทางหนีออกมาได้

ฉันพบคำถามและคำตอบของ SF นี้: มีวิธีใดที่จะหลีกเลี่ยงอักขระ“ #” ที่นำหน้าใน linux etc / environment อย่างไร . วิธีการเหล่านี้ไม่ทำงาน:

  • ควบคุม = "สวัสดี"
  • test0 = "# สวัสดี"
  • 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 = 'เอช // # Ello'
  • test14 = 'H / # Ello'

คำตอบที่ได้รับการยอมรับสำหรับคำถามนั้นและคำแนะนำของฉันคืออะไร:

มันเป็นเรื่องยุ่งยากที่คุณต้องการทำ/etc/environmentไม่ใช่ไวยากรณ์ของเชลล์มันดูเหมือนหนึ่ง แต่ไม่ใช่ซึ่งทำให้ผู้คนไม่สบายใจ ความคิดที่อยู่เบื้องหลัง/etc/environmentนั้นยอดเยี่ยม วิธีที่ไม่ขึ้นกับเชลล์ในการตั้งค่าตัวแปร! เย้! แต่ข้อ จำกัด ในทางปฏิบัติทำให้ไร้ประโยชน์

คุณไม่สามารถส่งผ่านตัวแปรได้ ลองตัวอย่างใส่MAIL=$HOME/Maildir/เข้าไปแล้วดูว่าเกิดอะไรขึ้น ดีที่สุดเพียงหยุดพยายามใช้เพื่อวัตถุประสงค์ใด ๆ ก็ตามอนิจจา ดังนั้นคุณไม่สามารถทำอะไรกับมันได้ซึ่งคุณคาดว่าจะสามารถทำได้ถ้ามันถูกประมวลผลโดยเชลล์

ใช้หรือ/etc/profile/etc/bashrc

ยังมีอีกคำถามที่ให้เหตุผลนี้ว่าทำไมในกรณีนี้:

ไม่มีทางที่/etc/environmentจะหลบหนี # (ซึ่งถือว่าเป็นความคิดเห็น) เนื่องจากกำลังถูกแจงโดยโมดูล PAM "pam_env" และถือว่าเป็นรายการคู่ที่ง่ายของ KEY = VAL และตั้งค่าสภาพแวดล้อมตามลำดับ มันไม่ได้เป็น bash / shell, parser ไม่มีภาษาสำหรับการขยายหรือแปรผันของอักขระ

อ้างอิง


นั่นเป็นข้อบกพร่องหรือมีเหตุผลอะไรที่อยู่เบื้องหลัง
Umair A.

1
@UmairAshraf - ไม่ใช่ข้อผิดพลาดเพียง จำกัด การใช้งานตามบทบาทของไฟล์นี้ ไฟล์นี้ขยายไปทั่วเทคโนโลยีเชลล์หลายตัวดังนั้นจึงต้องมีคุณสมบัติที่รองรับเชลล์ทั้งหมดที่จะใช้งาน
slm

งี่เง่าแค่ไหน /proc/environนี้ก็ควรจะมีการใช้รูปแบบเดียวกับ
Kaz

1

อาจจะสายเกินไป แต่มีแบ็กสแลชสามรายการก่อนที่จะ#ทำงานให้ฉัน

หากรหัสผ่านคือ "admin # 123" คุณสามารถกำหนดเป็น

admin\\\#123

สิ่งนี้ไม่ได้ผลสำหรับฉันใน/etc/environmentไฟล์
Joey V.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.