Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash脚本中将变量传递给su命令_Bash_Variables_Sudo - Fatal编程技术网

在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' 当我使用上面的脚本时,它不起作

我需要从root用户向用户zimbra发出命令。问题是我还需要设置一个env变量和一些其他变量

在命令行中,我这样做(这是用于在Zimbra中创建邮箱的命令):

它很好用。当我尝试在bash脚本中自动化该过程时,就会出现问题。我无法(或不知道如何)将脚本中生成的变量传递给su命令

#!/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