在bash脚本中将变量传递给su命令
我需要从root用户向用户zimbra发出命令。问题是我还需要设置一个env变量和一些其他变量 在命令行中,我这样做(这是用于在Zimbra中创建邮箱的命令): 它很好用。当我尝试在bash脚本中自动化该过程时,就会出现问题。我无法(或不知道如何)将脚本中生成的变量传递给su命令在bash脚本中将变量传递给su命令,bash,variables,sudo,Bash,Variables,Sudo,我需要从root用户向用户zimbra发出命令。问题是我还需要设置一个env变量和一些其他变量 在命令行中,我这样做(这是用于在Zimbra中创建邮箱的命令): 它很好用。当我尝试在bash脚本中自动化该过程时,就会出现问题。我无法(或不知道如何)将脚本中生成的变量传递给su命令 #!/bin/bash var="something"; su - zimbra -c 'export LC_ALL=nb_NO.UTF-8 && echo $var' 当我使用上面的脚本时,它不起作
#!/bin/bash
var="something";
su - zimbra -c 'export LC_ALL=nb_NO.UTF-8 && echo $var'
当我使用上面的脚本时,它不起作用,因为$var是为root用户声明的,而不是为zimbra用户声明的。有办法到这个海湾吗
我已尝试通过首先生成字符串来绕过此问题:
#!/bin/bash
var="something";
string="'export LC_ALL=nb_NO.UTF-8 && echo $var'";
su - zimbra -c $string
但当我这么做的时候,我会
LC_ALL=nb_NO.UTF-8:-c:第0行:在查找匹配的“”时出现意外的EOF
LC_ALL=nb_NO.UTF-8:-c:第1行:语法错误:文件意外结束
有什么帮助吗?不幸的是,上面的评论和想法都不适合我。我最后困惑地想我能做到以下几点。转义双引号并用实际的双引号包装似乎是绝对必要的,再加上管道到xargs允许传递实现的变量
echo“\”/web/jboss-eap-7.1/bin/domain.sh-Djboss.domain.base.dir=$NODE/\&\”;xargs su-jboss-c
希望这个答案能帮助别人 我注意到两件事。1.您的
$var
位于单引号内。所以它不会被解释。2.可能需要将变量括在双引号内。比如:su-zimbra-c“$string”
。我见过这个的可能重复,但不是这个。我只需要更改一个env,而不是保留root用户的所有env。这也是env的问题,我需要通过VARS基本上我的问题是:su-zimbra-c'echo$PATH'与:string=“'echo$PATH'&&echo$string&&su-zimbra-c$string&&su-zimbra-c$string不同,这是answear(取决于你想要实现的目标):string=“echo$HOME”&&sudo-H-u zimbra bash-c“$string=“echo\$HOME”&&sudo-H-u zimbra bash-c“$string”
#!/bin/bash
var="something";
string="'export LC_ALL=nb_NO.UTF-8 && echo $var'";
su - zimbra -c $string