在bash脚本中将变量传递给su命令

时间:2018-08-13 12:04:23

标签: bash variables sudo

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

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

su - zimbra -c 'export LC_ALL=nb_NO.UTF-8 && p="user.name" && domain="@example.com" && displayname="User Name" && givenname="User" && /opt/zimbra/bin/zmprov ca $p$domain "" cn "$displayname" displayName "$displayname" givenName "$givenname" zimbraPrefFromDisplay "$displayname"'

工作正常。当我尝试自动执行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行:语法错误:文件意外结束

有帮助吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,以上所有评论对我来说都不起作用。我不知所措,我可以做以下事情。转义双引号并包装在实际的双引号中似乎是绝对必要的,再加上xargs的管道,可以使实现的变量通过。

echo "\"/web/jboss-eap-7.1/bin/domain.sh -Djboss.domain.base.dir=$NODE/\ &\"" | xargs su - jboss -c

希望这个答案对其他人有帮助!