linux - 将环境变量传递给嵌套的子级
问题描述
我有一些正在设置的环境变量,并试图通过子进程的子进程访问它们。我正在尝试使用 shell 启动另一个进程。在我的示例中,它只是另一个使事情变得简单的 shell 脚本。
我浏览了 shell 文档,并尝试使用该-a
标志,但没有奏效。如果我明确地将环境变量从父级复制到子级,它将起作用。
灰
#!/bin/sh
# does not work here
echo $FOO
父.sh
#!/bin/sh
export FOO=bar
sudo -H -u username nohup sh -c "echo $FOO #works here; sh ./a.sh"
但是,如果我将 FOO 显式传递给内联 shell 脚本,它将起作用
#!/bin/sh
export FOO=bar
sudo -H -u username nohup sh -c "echo $FOO;export FOO=$FOO; sh ./a.sh"
将环境变量传递给嵌套子级是否有更优雅的解决方案?
在我的实际实现代码中,它不是我尝试使用的 shell 脚本,而是启动另一个依赖于 env 变量的进程,因此获取脚本是不可行的。
解决方案
因为 sudo 在启动新进程时默认不保留环境,所以您应该指示它显式保留某个 var:
sudo FOO=100 -H -u username nohup sh -c "sh ./a.sh"
nohup: ignoring input and appending output to ‘nohup.out’
cat nohup.out
100
推荐阅读
- vue.js - 使用 casl 库注入能力实例
- c++ - 只有一个基本虚拟的多路径继承
- google-cloud-platform - 如何在 Google Cloud Storage 中只处理一次新上传的对象?
- java - visualvm 采样器的“CPU 样本”选项卡和“线程 CPU 时间”选项卡有什么区别?
- angular - 如果不使用 MsalGuard,则 MsalService.acquireTokenRedirect 中的 Msal 交互正在进行错误
- tensorflow - 顺序批处理与并行批处理?
- python - python将带有图像模式1的png保存为pdf
- java - 如何解决 Java Exception In Initialize 错误?
- javascript - 默认路由总是在反应路由器中执行
- amazon-web-services - 从 Amazon S3 创建表时,Athena 如何将数据与正确的字段匹配?