2014-06-06 35 views
2

比方說,我要運行一些命令,系統用戶(無殼):傳遞shell變量系統用戶

su -s /bin/bash -c "some_command $TEST" my_system_user 

如何迪I $ TEST變量傳遞給用戶?

我已經配置爲所有用戶變量/etc/profile.d/my_vars.sh

export TEST=test_arg 

但是,這並不得到加載對於上述方案...

我已經沒有運氣嘗試:

-m (--preserve-environment) 
+0

看起來很奇怪,bash應該在執行'su'前插入變量。 – perreal

+0

使用'env'命令? 'man env'「env - 在修改後的環境中運行程序」 –

+0

也考慮使用'sudo',它可以讓你直接在命令行中傳遞環境變量:'sudo TEST =「$ TEST」...' – Eevee

回答

3

首先,我嘗試創建/etc/profile.d/my_vars.sh這樣的文件,並在文件中放置了一個測試變量。無論我如何運行命令,我都可以看到變量的值。我也試着設置一個變量用下面的代碼上即時,它適用於我的CentOS:

unset A_VAR; export A_VAR=foo 
su -s /bin/bash -c "echo val=$A_VAR" my_system_user 
> val=foo 
unset A_VAR 

另一種解決方案,如果它不爲你工作,你可以考慮打ssh招。

unset A_VAR; export A_VAR=foo 
ssh -o SendEnv [email protected] "echo val=$A_VAR" 
> val=foo 
unset A_VAR 
0

這很奇怪。它似乎爲我工作。我可以這樣做:

$ export TEST="hello" 

$ su -s /bin/bash -c "echo $TEST" 
password: 
hello 

......我想我錯過了一些關於這個問題。