Linux 将shell变量传递给系统用户
假设我想以系统用户的身份运行一些命令(无shell): 我如何将$TEST变量传递给用户 我在Linux 将shell变量传递给系统用户,linux,bash,shell,Linux,Bash,Shell,假设我想以系统用户的身份运行一些命令(无shell): 我如何将$TEST变量传递给用户 我在/etc/profile.d/my_vars.sh export TEST=test_arg 但在上面的场景中,这并没有得到加载 我尝试过,但运气不佳: -m (--preserve-environment) 首先,我尝试创建一个文件,如/etc/profile.d/my_vars.sh,并在文件中放入一个测试变量。无论我以谁的身份运行命令,我都可以看到变量的值。我还尝试使用以下代码动态设置变量,它
/etc/profile.d/my_vars.sh
export TEST=test_arg
但在上面的场景中,这并没有得到加载
我尝试过,但运气不佳:
-m (--preserve-environment)
首先,我尝试创建一个文件,如
/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 my_system_user@localhost "echo val=$A_VAR"
> val=foo
unset A_VAR
真奇怪。这似乎对我有用。我可以做到:
$ export TEST="hello"
$ su -s /bin/bash -c "echo $TEST"
password:
hello
…我想我遗漏了这个问题。这似乎很奇怪,bash应该在执行
su
之前插入变量。是否使用env
命令manenv
“env-在修改过的环境中运行程序”还可以考虑使用sudo
,它允许您直接在命令行中传递环境变量:sudo TEST=“$TEST”…
@Eevee如果直接在命令行中传递变量,那么他也可以简单地使用su
。我猜他想传递一些敏感数据,比如密码。
$ export TEST="hello"
$ su -s /bin/bash -c "echo $TEST"
password:
hello