2012-05-07 38 views
9

Tôi có một biến được đặt thông qua .bashrc.Làm thế nào để bạn cung cấp cho các biến môi trường người dùng hiện tại

Trong ~/.bashrc:

PROJ_HOME=~/Projects/stable 

Từ một vỏ bash, tôi muốn làm một cái gì đó như thế này:

$ su -l kenneth -c 'echo $PROJ_HOME' 

Tuy nhiên, khi tôi làm điều này, dự kiến ​​/home/kenneth/Projects/stable không in ra .

Bất kỳ ý tưởng nào về cách tôi có thể thực hiện việc này?

Trả lời

7

Bạn cần phải export biến. Bạn có thể không cần sử dụng tùy chọn -m để su để bảo vệ môi trường.

export PROJ_HOME=~/Projects/stable 
+0

Giả sử việc xuất khẩu sẽ thay đổi thành v env vars của root. Liệu 'su -m' có bảo tồn env của ROOT không? hay kenneth's? – 8None1

+0

@ 8None1: Theo trang hướng dẫn: "Bảo tồn môi trường hiện tại ...". Vì vậy, điều đó có nghĩa là môi trường của người dùng gọi 'su' (có lẽ là gốc của kenneth không liên quan dựa trên bất kỳ thông tin nào trong câu hỏi). –

6

Hãy thử với su -m -l kenneth -c 'echo $PROJ_HOME'. -m nên bảo vệ môi trường.

CHỈNH SỬA Đọc câu hỏi của bạn thêm một lần nữa, tôi nghĩ tôi có thể hiểu nó đã bị đảo ngược. Bạn cũng có thể thử cách này: su -l kenneth -c '. /home/kenneth/.bashrc; echo $PROJ_HOME.

8

Bạn đã thử tùy chọn su -m chưa?

-m, --preserve-environment 
       do not reset environment variables 

Ví dụ: su -m kenneth -c 'echo $ PROJ_HOME'

+5

Hmm, cảm ơn câu trả lời nhưng có vẻ như nó không hoạt động. '$ su -m kenneth -c" echo $ PROJ_PATH "'. Tôi nhận được một dòng trống. –

-1

Sử dụng dấu nháy đơn xung quanh lệnh:

$ su -l kenneth -c 'echo $PROJ_PATH' 

đúp dấu ngoặc kép giải thích giá trị của $PROJ_PATH như được thấy bởi root (chuỗi rỗng), sau đó thực hiện lệnh "echo (empty string)" như là người dùng kenneth.

Dấu ngoặc đơn sẽ vượt qua 'echo $PROJ_PATH' làm lệnh và giá trị $PROJ_PATH trong môi trường của kenneth là điều sẽ được lặp lại.

Các vấn đề liên quan