/ Etc / ortamında kaçış karması işareti (#)


17

Ben bir env değişkeni ekliyorum /etc/environmentama değişken değeri # işareti içerdiğinden, dize çizgili.

MYSQL_PWD="something#no"

Şimdi envyukarıdaki kod verirseniz verir MYSQL_PWD=something. Karmadan nasıl kaçabilirim? \Karakteri zaten denedim .


Girdiğinizle aynı şeyi gönderdiğinizden emin misiniz /etc/environment? Çünkü Debian Wheezy'de bu davranışı tekrarlayamadım.
Joseph R.

Üzgünüm ihracat yok. Sorum güncellendi.
Umair A.26

Şimdilik MySQL pwd'yi değiştirdim :(
Umair A.

Davranışlarınızı kopyalamayı başardım. Kabuğumun okuyabilmesi için oturumu kapatıp tekrar açmam gerektiğini fark etmedim /etc/environment.
Joseph R.

@JosephR. - Bunu kopyaladım ve de şaşırdım. Bu dosyanın rolüne baktığımızda amacına uygun görünüyor.
slm

Yanıtlar:


18

Bu mümkün görünmüyor /etc/environment. Kabuktan bağımsız değişkenler için ortak bir konumdur. Bu göz önüne alındığında, içinde hash işaretleri ( #) olan dizeleri destekliyor gibi görünmüyor ve onlardan kaçmanın bir yolu yok gibi görünüyor.

Şu SF Soru & Cevap başlıklı makaleyi buldum: Linux vb. / Ortamdaki lider "#" karakteri nasıl düzgün bir şekilde kaçar? . Bu yöntemlerin hiçbiri işe yaramadı:

  • kontrol = "Merhaba"
  • test0 = "# Merhaba"
  • test1 = "H \ #ello"
  • dnm2 = "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'

Bu soruya kabul edilen cevap ve tavsiyem ne olurdu:

Yapmak istediğiniz zor şeyler /etc/environmentkabuk sözdizimi değil, birine benziyor, ama değil, insanları hayal kırıklığına uğratıyor. Arkasındaki fikir /etc/environmentharikaydı. Değişkenleri kurmak için kabuktan bağımsız bir yol! Yaşasın! Ancak pratik sınırlamalar onu işe yaramaz hale getirir.

Değişkenleri oraya geçiremezsiniz. Örneğin, MAIL=$HOME/Maildir/içine koyun ve ne olduğunu görün. Ne yazık ki, herhangi bir amaç için kullanmaya çalışmayı bırakmak en iyisi, ne yazık ki. Yani onunla bir kabuk tarafından işlenmiş olsaydı yapabileceğiniz şeyleri yapamazsınız.

/etc/profileVeya tuşunu kullanın /etc/bashrc.

Yine de başka bir Soru-Cevap , durumun neden böyle olduğu konusunda bu rasyonelliği verdi:

/etc/environmentPAM modülü "pam_env" tarafından ayrıştırıldığı gibi # (yorum olarak işlendiği gibi) kaçmak için hiçbir yolu yoktur ve KEY = VAL çiftleri basit bir liste olarak davranır ve buna göre ortamı kurar. Bu bash / shell değil, ayrıştırıcının değişken genişletme veya kaçan karakterler yapmak için dili yok.

Referanslar


bu bir hata mı yoksa arkasında bir sebep var mı?
Umair A.26

1
@UmairAshraf - bir hata değil, sadece bu dosyanın rolü verilen sınırlı işlevsellik. Bu dosya birden fazla kabuk teknolojisine yayılmıştır, bu yüzden kullanılacağı tüm kabuklarda desteklenen özelliklerle gitmek zorundadır.
slm

ne kadar aptalca; bunun yalnızca aynı biçimi kullanması gerekirdi /proc/environ.
Kaz

1

Muhtemelen çok geç, ama daha önce üç ters eğik çizgi# benim için çalıştı.

Parola "admin # 123" derse, şu şekilde tanımlayabilirsiniz:

admin\\\#123

Bu /etc/environmentdosyada benim için çalışmadı .
Joey
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.