Linux 将shell变量传递给系统用户

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,并在文件中放入一个测试变量。无论我以谁的身份运行命令,我都可以看到变量的值。我还尝试使用以下代码动态设置变量,它

假设我想以系统用户的身份运行一些命令(无shell):

我如何将$TEST变量传递给用户

我在
/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