linux - 在 sudo 语句中设置环境变量 - Linux shell
问题描述
我需要在 sudo 语句中修改环境变量。sudo 语句包含一些说明。
在示例中,我将环境变量VAR1设置为值“ABC”。
然后,在 sudo 语句中(并且仅在此处),我需要将该值更改为“DEF”。但是在我将值设置为“DEF”后,该值没有改变。Echo 命令返回“ABC”作为 VAR1 的值。
如何在 sudo 语句中更改/设置变量的值?
这是我运行的代码示例:
#!/bin/bash
export VAR1="ABC"
sudo -u <user> -i sh -c "
export VAR1="DEF";
echo $VAR1;
"
echo $VAR1;
额外信息:我尝试了 sudo 的选项 -E,以在 sudo 调用时保留环境变量(来源:https ://unix.stackexchange.com/questions/337819/how-to-export-variable-for- use-with-sudo/337820),但结果没有改变:
#env VAR1="DEF" sudo -u <user> -E -i sh -c " [...]"
解决方案
使用单引号来防止外壳插值$VAR1
。您需要$VAR1
传递到内壳,以便它可以扩展它。
sudo -u <user> -i sh -c '
export VAR1="DEF"
echo "$VAR1"
'
引用变量扩展来防止通配和拆分事故也是一个好主意:用 write"$VAR1"
而不是$VAR1
.
(分号不是必需的,因为你有换行符。)
推荐阅读
- regex - 在 python 中使用带有列表理解的正则表达式
- ios - iOS 使用新的隐私设置强制重启应用
- java - 如何将模型类型列表中的数据添加到数组中
- sql-server - RAMDisk 和物理磁盘上的 sql server tempDB 文件
- visual-studio-code - VSCode:没有足够的空间来拆分终端
- java - 无法解析的日期异常 (1980-02-22T00:00:00Z)
- ios - 使用 JSON 数据在标签上设置文本
- javascript - THREE.js 不使用 .mtl 渲染 .obj - 为 THREE.js 导出文件
- c++ - 将参数包参数部分专门化为 void 类型的语法是什么?
- swift - 在展开可选值但值存在时意外发现 nil