标签: environment-variables

PATH 变量和引号(windows)

我在 windows 下的 PATH 变量有一个奇怪的问题:

我的应用程序位于文件夹 c:\app\bin 中,此应用程序的 DLL 位于 c:\app\runtime 文件夹中。要运行我的程序,我通常使用以下脚本修改带有 *.bat 文件的 PATH 变量:

set PATH="c:\app\bin";"c:\app\runtime";%PATH%
Run Code Online (Sandbox Code Playgroud)

这会将可执行文件和 DLL 带到路径上。但是,在我的其中一个 Windows Server 2008 R2 系统上,这不起作用。这意味着,如果我在命令窗口中执行上述命令,我可以从 c:\app\bin 启动 exe 文件,但应用程序立即抱怨它找不到所需的某些 dll 文件(“程序无法启动,因为....dll 从您的计算机中丢失 ...")。这些 dll 文件应该在 c:\app\runtime 中。

我进行了一些实验,它指出有三种解决方法:

  1. 使用系统属性对话框永久修改 PATH 变量
  2. 省略上面命令中DLL文件路径的引号,例如set PATH="c:\app\bin";c:\app\runtime;%PATH%
  3. 将DLL文件复制到exe所在目录

关于解决方案 2 的奇怪部分是,如果我向第一个路径添加引号,或者如果我更改路径的顺序,它不会改变任何内容。

有人知道为什么我的原始脚本不起作用吗?我需要让它运行,因为它是由程序自动创建的,我无法更改生成 bat 文件的应用程序。

windows windows-server-2008 environment-variables path

5
推荐指数
1
解决办法
8716
查看次数

为什么 sudo -E 实际上不保护我的环境?

我正在尝试 sudo 一些位于自定义路径中的二进制文件。sudo虽然我运行时会删除该自定义路径,但sudo -E应该保留我的路径。为什么不起作用?

$ 环境 | egrep ^路径
PATH=/home/codemonkey/.nvm/v0.6.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/gam
es:/usr/游戏

$ sudo 环境 | egrep ^路径
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

$ sudo -E 环境 | egrep ^路径
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

我知道如何解决它,我只想知道为什么sudo -E不起作用

linux debian sudo environment-variables env

5
推荐指数
1
解决办法
4117
查看次数

通过 ssh 在远程服务器上使用本地 LS_COLORS 而无需修改远程服务器

我可以访问大量不同的 ssh 帐户,我可以想象有数百个,我在不同场合使用这些帐户。其中一些是个人的,其中一些是我从客户那里得到的并且是共享的,而且很多都是暂时的。为一次使用而创建,一段时间后将自动删除。

现在我的问题是我使用了两个 .dircolors,一个浅色和一个深色主题。我非常喜欢这个设置,但这意味着每次我 ssh 到服务器时都复制一个新的 .dircolors,并且在共享帐户上偶尔会惹恼其他人。我尝试修改我的 ssh 脚本以允许我使用我的本地 LS_COLORS,但是我遇到了一些问题。

如果我使用: ssh -t vps2 'export LS_COLORS="'$LS_COLORS'"; exec /bin/bash --noprofile --norc' 它有效,但不完全可用,因为它忽略了所有系统默认信息。

如果我使用: ssh -t vps2 'export LS_COLORS="'$LS_COLORS'"; exec /bin/bash' 它不起作用,因为 bash 通过 .profile 并加载不同的 LS_COLORS。

关于如何加载默认 .bash_profile/.bashrc 并拥有自己的 LS_COLORS 的任何建议?

ssh bash environment-variables

5
推荐指数
1
解决办法
2111
查看次数

防止带有 FS 路径值的环境变量的 bash 选项卡完成删除环境变量名称

朋友们,

我在 Linux 上使用 GNU bash 作为我的 shell:

$ bash --version
GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$ 
Run Code Online (Sandbox Code Playgroud)

当我设置一个以 FS 路径作为其值的环境变量时,它的行为非常奇怪。

假设我想将 /opt/database/bin 添加到 PATH 的前面。

我首先输入:

$ export PATH=/o
Run Code Online (Sandbox Code Playgroud)

然后我按下键盘上的 Tab 键。

但是它没有完成 /opt 的路径,而是删除了 PATH= 部分!相反,我得到:

$ export /opt/
Run Code Online (Sandbox Code Playgroud)

当然,那对我来说非常无用,而且非常恼人!然后我需要手动添加环境变量名称,这根本不是我想要做的!

我希望它完成它: …

bash command-line-interface environment-variables path

5
推荐指数
1
解决办法
837
查看次数

是否有充分的理由不将 sbin 添加到默认 PATH 中?

背景:

PATH环境变量指定通过时的命令而不指定路径发出搜索的目录。"sbin" 路径 ( /sbin, /usr/sbin) 旨在容纳管理实用程序,因此许多 *nix 发行版不将这些目录包含在PATH. 也就是说,在许多情况下,非管理帐户合法地需要访问这些实用程序,并且必须指定完整路径或修改其PATH变量才能这样做。此任务相对容易执行,但对于新用户来说可能很麻烦。更糟糕的是,当您涉及 PAM、sudo、ssh 和其他与PATH环境。对该站点或整个互联网的搜索会产生许多这些问题的样本,这些问题困扰着新老用户。

问题:

有了上述背景,是否有充分的理由不将 sbin 目录添加到默认 PATH ?(推测是通过/etc/profile/etc/profile.d或等同物)

我承认“好”是主观的,但在我看来,这里有一些不成立的原因。也许你不同意?

不好的理由:

  • 安全
    • 提升的权限和保存实用程序的目录与世界可访问的目录 ( r-x)无关。可能会提出一个默默无闻的论点,即足够不熟练的坏人找不到“隐藏的”实用程序,但这将是一个可悲的透明幕布。
  • 命名空间
    • 有人可能会争辩说,用户可能想要编写自己的reboot命令,他们可以通过自己的自定义目录访问这些命令,并将其添加到PATHsbin 目录中,而系统默认值会胜过他们的配置。这是一个极端情况,并且有问题的用户已经了解PATH含义并且可以修改他们的配置以在序列中更早地使用他们的目录。
  • 标准
    • 这绝不是对文件系统层次结构标准的更改;实用程序仍然根据它们的功能组织到它们的目录中。
    • 不解决问题,因为“我们已经习惯了这个问题”是愚蠢的。

linux shell environment-variables

5
推荐指数
1
解决办法
235
查看次数

如何在正在运行的 Docker 容器中重新加载环境变量文件

我有一个正在运行的容器,其中安装了一个环境变量文件,如下所示:

docker run -d --env-file ./env.list my/image一切正常,现在我已经更新了我的./env.list文件,并希望反映更新的文件。尝试重新启动容器,但没有用。

environment-variables docker

5
推荐指数
1
解决办法
1万
查看次数

使用 AWS CodeDeploy 的环境变量

我有一个 Web 应用程序,它利用环境变量进行某些配置(数据库凭据、API 密钥等)。我目前正在使用 Elastic Beanstalk 进行部署,并且可以从 AWS 中轻松设置这些,这很棒,因为我的代码库中没有这些敏感数据。

但是,我正在考虑从 Elastic Beanstalk 切换,以便我可以利用我的 Web 实例的更多灵活性,并且自然地我正在考虑使用 CodeDeploy 进行部署(从我的 Codeship CI 设置)。CodeDeploy 相当简单,我已经将它与 Codeship 集成得很好,但我注意到没有内置功能可以像使用 Elastic Beanstalk 那样使用 CodeDeploy 设置环境变量。有没有人有这个过程的最佳实践?

unix environment-variables amazon-ec2 amazon-web-services

5
推荐指数
1
解决办法
3169
查看次数

如何在 IIS 7 应用程序中配置环境变量?

我需要COMPLUS_FORCEENC=1在 ASP.NET 应用程序中设置环境变量。这个变量必须在工作进程开始生效时设置。

因此,我这样做了:

  1. 使用计算机管理控制台创建一个新用户。
  2. 设置密码。
  3. 确保它的成员UsersIIS_IUSRS
  4. 配置 IIS 应用程序池以使用该用户并加载用户配置文件。这是使用自定义池,而不是默认池。
  5. 以该用户身份登录以设置变量。
  6. 重新登录以确保设置了变量。
  7. 重新启动操作系统。
  8. 确保应用程序加载并工作。

不幸的是,ASP.NET 应用程序没有看到该变量。我从应用程序中打印了整个环境。

当我在工作进程上使用 Process Explorer 时,我看到它在正确的用户下运行,但未设置变量。此外,该TEMP变量指向C:\Windows\Temp而不是(如预期)用户配置文件的临时目录(存在)。我知道这是未加载用户配置文件的标志。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist显示该用户的配置单元已加载。该Environment用户的密钥似乎已正确填充:

在此处输入图片说明

我做错了什么?我怎样才能让变量出现?

这是一台 Windows 7 机器。

windows iis environment-variables user-profile

5
推荐指数
2
解决办法
1万
查看次数

为什么“ansible -a“env””返回的环境路径与我的用户不同?

当我通过 ssh 进入远程服务器并运行时,env我返回以下路径:

PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/myusername/bin
Run Code Online (Sandbox Code Playgroud)

相反,当我执行 ansible 命令时ansible -a "env",我得到以下路径:

PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin
Run Code Online (Sandbox Code Playgroud)

可以想象,试图运行时,这会导致问题 sbin类似的命令servicentpdate等等,因为它需要打字的完整路径sbin目录命令。(是的,我知道有 ansible 模块可以做到这一点,但我正在尝试解决 PATH 被缩短/截断的原因。)

有谁知道为什么会这样?

编辑:我问这个的原因是我正在按照书中的例子进行操作,Ansible for DevOps并且由于这个原因,一些例子不起作用。

我试图开始工作的例子来自本书的第 28 页:

$ ansible multi -s -a "service ntpd stop"
$ ansible multi -s -a "ntpdate -q 0.rhel.pool.ntp.org"
$ ansible multi -s -a "service ntpd start"
Run Code Online (Sandbox Code Playgroud)

这些命令总是会引发错误。但是如果我将它们更改为包含完整路径,它们就可以工作。

$ ansible multi -s -a "/sbin/service ntpd stop"
$ ansible multi -s -a "/usr/sbin/ntpdate -q 0.rhel.pool.ntp.org"
$ ansible multi -s -a …
Run Code Online (Sandbox Code Playgroud)

environment-variables path ansible

5
推荐指数
2
解决办法
4841
查看次数

在nginx配置文件中,如何定义一个包含“$”符号的fastcgi_param?

我正在尝试为 PHP 应用程序定义一些环境变量,但其中一个变量包含“$”符号。当我使用 测试配置文件时nginx -t,我收到一条错误消息,告诉我变量不存在。好像把“$”后面的文字解释为变量名,当然没有定义。

也许我没有在正确的地方搜索,但我找不到有关如何转义“$”字符的信息。这可能吗?怎么做?

更新:我尝试在 d3ag0s 的评论之后将值括在单引号和双引号之间,但我收到了相同的错误消息。

configuration nginx fastcgi environment-variables escaping

5
推荐指数
1
解决办法
2985
查看次数