Dấu băm thoát (#) trong / etc / môi trường


17

Tôi đang thêm một biến env vào /etc/environmentnhưng vì giá trị biến chứa # dấu, chuỗi bị sọc.

MYSQL_PWD="something#no"

Bây giờ nếu tôi làm envtrên năng suất mã MYSQL_PWD=something. Làm thế nào tôi có thể thoát băm? Tôi đã thử \nhân vật.


Bạn có chắc chắn rằng bạn đang đăng chính xác những gì bạn đang đưa vào /etc/environment? Bởi vì tôi không thể sao chép hành vi này trên Debian Wheezy.
Joseph R.

Xin lỗi xuất khẩu không có. Cập nhật câu hỏi của tôi.
Umair A.

Hiện tại tôi đã thay đổi MySQL pwd :(
Umair A.

Tôi quản lý để nhân đôi hành vi của bạn. Tôi đã không nhận ra rằng tôi cần phải đăng xuất sau đó quay lại để lấy vỏ của mình để đọc /etc/environment.
Joseph R.

@JosephR. - Tôi đã nhân đôi điều này và cũng rất ngạc nhiên. Nhìn vào vai trò của tập tin này có vẻ phù hợp với ý định của nó.
slm

Câu trả lời:


18

Điều này dường như không thể với /etc/environment. Nó có nghĩa là một vị trí phổ biến cho các biến độc lập. Vì điều này có vẻ như nó không hỗ trợ các chuỗi có dấu băm ( #) trong đó và dường như không có cách nào để thoát khỏi chúng.

Tôi tìm thấy câu hỏi và trả lời SF này có tiêu đề: Làm thế nào để một người thoát khỏi một nhân vật # # hàng đầu trong linux v.v. . Không có phương pháp nào trong số này hoạt động:

  • kiểm soát = "xin chào"
  • test0 = "# xin chào"
  • 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'

Câu trả lời được chấp nhận cho câu hỏi đó và điều gì cũng sẽ là lời khuyên của tôi:

Vâng, đó là thứ khó khăn mà bạn muốn làm /etc/environmentkhông phải là cú pháp shell, nó trông giống như một, nhưng nó không phải là thứ làm mọi người thất vọng. Ý tưởng đằng sau /etc/environmentthật tuyệt vời. Một cách độc lập shell để thiết lập các biến! Yay! Nhưng những hạn chế thực tế làm cho nó vô dụng.

Bạn không thể vượt qua các biến trong đó. Ví dụ thử đặt MAIL=$HOME/Maildir/vào đó và xem những gì sẽ xảy ra. Tốt nhất chỉ nên ngừng cố gắng sử dụng nó cho bất kỳ mục đích nào, than ôi. Vì vậy, bạn không thể làm mọi thứ với nó mà bạn mong đợi có thể làm nếu nó được xử lý bằng vỏ.

Sử dụng /etc/profilehoặc /etc/bashrc.

Tuy nhiên, vẫn còn một câu hỏi và trả lời hợp lý khác về lý do tại sao lại như vậy:

Không có cách nào /etc/environmentđể thoát # (vì nó được coi là một nhận xét) vì nó đang được phân tích cú pháp bởi mô-đun PAM "pam_env" và nó coi nó như một danh sách đơn giản các cặp KEY = VAL và thiết lập môi trường phù hợp. Nó không phải là bash / shell, trình phân tích cú pháp không có ngôn ngữ để thực hiện mở rộng biến hoặc các ký tự thoát.

Người giới thiệu


Đó có phải là một lỗi hoặc có bất kỳ lý do đằng sau nó?
Umair A.

1
@UmairAshraf - không phải là lỗi, chỉ là chức năng giới hạn do vai trò của tệp này. Tập tin này nhịp trên nhiều công nghệ vỏ vì vậy nó phải đi với các tính năng được hỗ trợ trong tất cả các vỏ nó sẽ được sử dụng trong.
SLM

thật ngu ngốc; điều này chỉ nên sử dụng định dạng tương tự như /proc/environ.
Kaz

1

Có lẽ đã quá muộn, nhưng ba dấu gạch chéo ngược trước khi #làm việc cho tôi.

Nếu mật khẩu là, nói "admin # 123", bạn có thể định nghĩa nó là

admin\\\#123

Điều này đã không làm việc cho tôi trong /etc/environmenttập tin.
Joey V.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.