如何以其他用户身份导出环境变量

如何以其他用户身份导出环境变量

我试图在运行脚本之前为用户会话设置环境变量:

su - myUser -c "export myVar=$toto ; sh scriptThatNeedsMyVar.sh"

脚本失败,我尝试调试并打印 myVar 值:

su - myUser -c "export myVar=$toto ; echo $myVar"

没有返回任何内容,这意味着我的环境变量没有被创建,尽管我在同一个 bash 中创建并打印它!然后当我以用户身份登录myUser并在 bash 控制台中输入每个命令时,它运行良好

$su - myUser
$export myVar=toto
$echo $myVar
toto

我是不是漏掉了什么?
为什么会发生这种情况?我如何以其他用户身份导出临时变量(我无权编辑 bashrc 或任何其他系统文件)

答案1

使用env

su - myUser -c "env myVar=\"$toto\" scriptThatNeedsMyVar.sh"

当然,假设scriptThatNeedsMyVar.sh是可执行的,并且可以在中找到myUserPATH并且以 开头#!/bin/sh

答案2

作为Byte Commander 详解,您必须将命令放在单引号中,以防止 Bash 扩展变量。如果$toto必须在原始 shell 中扩展,请将其作为命令列表之外的参数提供,并以以下方式访问它$0

su - myUser -c 'export myVar="$0"; echo $myVar' "$toto"

相关内容