当前位置: 首页 > 知识库问答 >
问题:

如何使用sudo将环境变量导出到后台进程运行?[副本]

吉毅
2023-03-14

我有一个bash脚本env_setter.sh。它设置了一个环境变量。它包含:

#!/bin/bash
echo "inside env_setter script....."
export NAME="jake"

我有另一个脚本tester.sh。它试图打印由env_setter.sh设置的环境变量的值。它包含:

#!/bin/bash
echo "Inside tester script..."
echo "$NAME"

然后我有一个脚本运行程序。sh执行上述两个脚本,如下所示:

#!/bin/bash
echo "Inside runner script..."
. ./env_setter.sh
echo "$NAME"
sudo nohup ./tester.sh > demo.log 2>&1 & echo $! > save_pid.pid

现在当我运行runner时。sh,我在演示中得到以下输出。日志:

inside env_setter script.....
jake
Inside tester script...

如我们所见,测试仪中的最后一个echo命令。sh不打印任何内容。这是因为我们使用env\u setter设置的环境变量。sh未在测试仪的上下文中导出。sh。

那么,在这种情况下,如何将环境变量导出到后台进程呢?

共有1个答案

叶煌
2023-03-14

出于安全原因,通常sudo会将当前环境替换为新用户的环境。使用sudo-E来保留调用环境。或者您可以在命令行上传递变量,sudo NAME=jake

 类似资料:
  • 问题内容: 当我对sudo使用任何命令时,环境变量不存在。例如,设置HTTP_PROXY后,如果不使用,该命令可以正常工作。但是,如果我键入它说它不能绕过代理设置。 问题答案: 技巧是通过命令将环境变量添加到文件并添加以下行: 摘自ArchLinux Wiki 。 对于Ubuntu 14,您需要在单独的行中指定,因为它会返回多变量行的错误:

  • 问题内容: 在安装gnuplot之前,我先设置环境变量。在安装过程中,出现了问题。 我想删除环境变量。我该如何实现? 问题答案: 是您要查找的命令。

  • 问题内容: 如何使用变量配置Web服务器(Linux服务器)? 如何设置使用? 问题答案: 是一些服务器和其他Java应用程序附加到执行命令的调用的标准环境变量。 例如在tomcat中,如果您定义,启动脚本将执行 如果您在Linux / OSX上运行,则可以在调用启动脚本之前通过执行以下操作来设置JAVA_OPTS: 只要打开控制台,此操作将一直持续。要使其更永久,可以将其添加到〜/ .profi

  • 问题内容: 我有一个脚本,可以导出环境变量并启动一些下标。 可用于下标中的进程开头。如何更改环境变量? 我试图用设置变量,但是那不起作用。 问题答案: 通常,您只能在流程启动时影响流程的环境变量。如果您需要将更改传达给正在运行的流程,则环境不是正确的工具。 编辑该问题的目的是为了补充讨论中的问题:将偶尔更改的设置传达给正在运行的进程的一种相当不错的方法是指定一个配置文件,在该文件中设置LOGLEV

  • 我想把一个spring boot环境变量的值放入一个验证注释(@min,@max),但我不知道怎么做。下面是我的代码: 这是我的application.yml: 我想把我的yml的字段“min”和“max”放入我的属性uitype的注释字段@min()和@max()中。有人知道怎么做吗?提前感谢您的帮助!

  • 问题内容: 我正在尝试使用whiptail,因为它是dialog的轻量级替代,并且似乎默认安装在大多数系统中(即,如果它被“遗忘”或默认情况下未安装,人们不必四处安装它)。我在此处检查了问题#1562666的几个示例,但我正在寻找一种重定向输出的替代方法,这样可以设置一个环境变量,而不仅仅是写入磁盘。 例如,当我尝试使用对话框时,此方法有效(我看到对话框,并设置了环境变量): 但是,当使用发尾代替