![如何以其他用户身份导出环境变量](https://linux22.com/image/1063823/%E5%A6%82%E4%BD%95%E4%BB%A5%E5%85%B6%E4%BB%96%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E5%AF%BC%E5%87%BA%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.png)
我试图在运行脚本之前为用户会话设置环境变量:
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
是可执行的,并且可以在中找到myUser
,PATH
并且以 开头#!/bin/sh
。
答案2
作为Byte Commander 详解,您必须将命令放在单引号中,以防止 Bash 扩展变量。如果$toto
必须在原始 shell 中扩展,请将其作为命令列表之外的参数提供,并以以下方式访问它$0
:
su - myUser -c 'export myVar="$0"; echo $myVar' "$toto"