我在 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 中。
我进行了一些实验,它指出有三种解决方法:
PATH="c:\app\bin";c:\app\runtime;%PATH% 关于解决方案 2 的奇怪部分是,如果我向第一个路径添加引号,或者如果我更改路径的顺序,它不会改变任何内容。
有人知道为什么我的原始脚本不起作用吗?我需要让它运行,因为它是由程序自动创建的,我无法更改生成 bat 文件的应用程序。
我正在尝试 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不起作用
我可以访问大量不同的 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 的任何建议?
朋友们,
我在 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)
当然,那对我来说非常无用,而且非常恼人!然后我需要手动添加环境变量名称,这根本不是我想要做的!
我希望它完成它: …
背景:
在PATH环境变量指定通过时的命令而不指定路径发出搜索的目录。"sbin" 路径 ( /sbin, /usr/sbin) 旨在容纳管理实用程序,因此许多 *nix 发行版不将这些目录包含在PATH. 也就是说,在许多情况下,非管理帐户合法地需要访问这些实用程序,并且必须指定完整路径或修改其PATH变量才能这样做。此任务相对容易执行,但对于新用户来说可能很麻烦。更糟糕的是,当您涉及 PAM、sudo、ssh 和其他与PATH环境。对该站点或整个互联网的搜索会产生许多这些问题的样本,这些问题困扰着新老用户。
问题:
有了上述背景,是否有充分的理由不将 sbin 目录添加到默认 PATH ?(推测是通过/etc/profile,/etc/profile.d或等同物)
我承认“好”是主观的,但在我看来,这里有一些不成立的原因。也许你不同意?
不好的理由:
r-x)无关。可能会提出一个默默无闻的论点,即足够不熟练的坏人找不到“隐藏的”实用程序,但这将是一个可悲的透明幕布。reboot命令,他们可以通过自己的自定义目录访问这些命令,并将其添加到PATHsbin 目录中,而系统默认值会胜过他们的配置。这是一个极端情况,并且有问题的用户已经了解PATH含义并且可以修改他们的配置以在序列中更早地使用他们的目录。我有一个正在运行的容器,其中安装了一个环境变量文件,如下所示:
docker run -d --env-file ./env.list my/image一切正常,现在我已经更新了我的./env.list文件,并希望反映更新的文件。尝试重新启动容器,但没有用。
我有一个 Web 应用程序,它利用环境变量进行某些配置(数据库凭据、API 密钥等)。我目前正在使用 Elastic Beanstalk 进行部署,并且可以从 AWS 中轻松设置这些,这很棒,因为我的代码库中没有这些敏感数据。
但是,我正在考虑从 Elastic Beanstalk 切换,以便我可以利用我的 Web 实例的更多灵活性,并且自然地我正在考虑使用 CodeDeploy 进行部署(从我的 Codeship CI 设置)。CodeDeploy 相当简单,我已经将它与 Codeship 集成得很好,但我注意到没有内置功能可以像使用 Elastic Beanstalk 那样使用 CodeDeploy 设置环境变量。有没有人有这个过程的最佳实践?
我需要COMPLUS_FORCEENC=1在 ASP.NET 应用程序中设置环境变量。这个变量必须在工作进程开始生效时设置。
因此,我这样做了:
Users和IIS_IUSRS。不幸的是,ASP.NET 应用程序没有看到该变量。我从应用程序中打印了整个环境。
当我在工作进程上使用 Process Explorer 时,我看到它在正确的用户下运行,但未设置变量。此外,该TEMP变量指向C:\Windows\Temp而不是(如预期)用户配置文件的临时目录(存在)。我知道这是未加载用户配置文件的标志。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist显示该用户的配置单元已加载。该Environment用户的密钥似乎已正确填充:
我做错了什么?我怎样才能让变量出现?
这是一台 Windows 7 机器。
当我通过 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类似的命令service,ntpdate等等,因为它需要打字的完整路径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) 我正在尝试为 PHP 应用程序定义一些环境变量,但其中一个变量包含“$”符号。当我使用 测试配置文件时nginx -t,我收到一条错误消息,告诉我变量不存在。好像把“$”后面的文字解释为变量名,当然没有定义。
也许我没有在正确的地方搜索,但我找不到有关如何转义“$”字符的信息。这可能吗?怎么做?
更新:我尝试在 d3ag0s 的评论之后将值括在单引号和双引号之间,但我收到了相同的错误消息。