ruby - ruby 和 shell 之间不同的 sudo 环境变量

标签 ruby linux shell

我正在编写一个需要使用 sudo 运行的脚本,遇到了一些奇怪的事情,想知道是否有人可以解释它......

我的环境变量在 ruby​​ 和 shell 中似乎表现不一样:

user@server:~$ sudo echo $HOME
/home/user

user@server:~$ sudo /opt/ruby-2.1.2-p95/bin/irb
irb(main):002:0> puts ENV['HOME']
/root
=> nil
irb(main):003:0>

这可能是什么原因?

编辑:澄清一下——我不是在问为什么 sudo 会重置我的环境变量,我是在问为什么当我运行 shell 命令/脚本(第一个命令)时它不会,但当我运行 ruby​​ (第二个命令)来自同一个 shell session ,没有任何配置更改。

最佳答案

默认情况下,sudo 会重置您的环境变量。您可以使用 sudo 的 --preserve-env(或简称为 -E)来保护环境。您可以运行 man sudo 来了解有关 sudo 及其选项的更多信息。

关于ruby - ruby 和 shell 之间不同的 sudo 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36657792/

相关文章:

javascript - 如何将 **嵌套** 对象作为 JSON 从后端的 Ruby 获取到前端的 AJAX

ruby - 获取 capybara 中元素的所有类?

Ruby 按数组中的列写入 CSV 文件?

ruby - 检查一个散列是否包含另一个散列

node.js - 客户端未收到多播消息

c - 如何拼接/dev/mem?

linux - 在 Unix 中从文件读取文件名并将文件从一个位置移动到另一个位置

linux - 读取多个文件导致连续文件接收到 "Permission denied"

linux - 在 Linux 中运行不带命令行参数的 Shell 脚本

python - 在 Python 3.4 中导入表格时出现问题