Articles of 环境variables

为什么'ansible -a'env''返回一个不同于我的用户的环境path?

当我SSH入远程服务器并运行env我回来以下path: PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/myusername/bin 相反,当我执行ansible- ansible -a "env"命令时,我得到以下path: PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin 可以想象,当尝试运行sbin命令(如service , ntpdate等)时会导致问题,因为它需要inputsbin命令的完整path。 (是的,我知道有一些可行的模块可以做到这一点,但我试图解决为什么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" 这些命令总是会引发错误。 但是,如果我改变他们包括完整的path,他们的工作。 $ ansible multi -s -a "/sbin/service ntpd stop" $ ansible multi -s -a […]

grep不一致默认为grep -P?

我有一个脚本,当从交互式shell调用时,它可以完美地工作,但是在被cron调用时什么也不做。 为了解决这个问题,我使用以下命令启动了一个带有“空白”环境的shell: env -i /bin/bash –noprofile –norc 使用这个空白的env我挖了我的脚本,发现下面的grep将不匹配任何文件: grep -il "^ws_status\s*=\s*[\"']remove[\"']$" 但是,从交互式shell运行时,该命令将返回匹配文件的文件名。 注意,expression式是匹配的行如: WS_STATUS = "remove" 通过反复试验,我发现在选项[Perl regex]中join-P ,命令开始在'空白'shell中正常工作。 但是,我不知道为什么我的loginshell似乎默认为grep -P 。 只有一个grep二进制文件/bin/grep 没有为grep=pgrep或grep="grep -P"定义别名 没有定义envvariablesGREP_OPTIONS 。 这里的交易是什么? 注意:OS是RHEL v5.10,Bash是v3.2.25,grep是v2.5.1

传递variables以用于Debian Jessie安装的预置文件

是否可以通过引导提示将variables添加到Debian安装程序中,以便variables可以用于预定义文件? 特别是,我试图解决以下问题: 我们有一个非常广泛的安装后的脚本,通常从服务器上下载。 但是现在我想创buildPacker映像,并将版本控制中的安装后脚本与其他Packer文件一起保存。 为了访问preseed,我可以在启动命令中执行“preseed / url = http:// {{.HTTPIP}}:{{.HTTPPort}} / preseed.cfg”。 但是现在我希望安装程序从同一位置下载安装后的脚本。 目前,安装后的钩子看起来像这样: di preseed/late_command string wget -q -O /tmp/postinstall.sh http://our.public.server/postinstall.jessie.sh ; sh /tmp/postinstall.sh 理想情况下,我想要做一些事情: di preseed/late_command string wget -q -O /tmp/postinstall.sh http://{{ .HTTPIP }}:{{ .HTTPPort }}/postinstall.jessie.sh ; sh /tmp/postinstall.sh 但是,Debian安装程序当然不会取代那些所需的值。 所以我在想,可以将类似环境variables的variables传递给我们可以在预先定义的文件中使用的安装程序。 任何提示或技巧,表示赞赏! 编辑:试图将late_command添加到启动命令,但没有拿起。 编辑:尝试preseed /运行,但它运行在不允许in-target命令的不同的环境。 编辑:这可以是一个解决方法: 如何在一个debian preseed文件中一起pipe道命令? 但我宁愿将脚本放在单独的文件中。 如果这是不可能的,但这是不可能的。

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

我可以访问大量不同的ssh帐户,我想象了几百个,我在不同的场合使用。 其中一些是个人的,其中一些是我从客户那里获得的,并且是共享的,而其中的一些是暂时的。 创build一次使用,一段时间后会自动删除。 现在我的问题是,我使用两个.dircolors,一个灯光和一个黑暗的主题。 我非常喜欢这个设置,但是这意味着每当我login到一台服务器上时,都会拷贝一个新的.dir文件,而共享的帐号偶尔也会让其他人恼火。 我试图修改我的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 –noprofile –norc'它可以工作,但不完全可用,因为它忽略了所有的系统默认信息。 如果我使用: ssh -t vps2 'export LS_COLORS="'$LS_COLORS'"; exec /bin/bash' ssh -t vps2 'export LS_COLORS="'$LS_COLORS'"; exec /bin/bash'这是行不通的,因为bash通过.profile并加载一个不同的LS_COLORS。 有关如何加载默认的.bash_profile / .bashrc并有我自己的LS_COLORS的build议?

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

我试图sudo一些自定义path中的二进制文件。 当我运行sudo时,这个自定义path被删除,但sudo -E应该保留我的path。 为什么不起作用? $ env | egrep ^ PATH PATH = /家庭/ codemonkey / .nvm / V0.6.1 /斌:在/ usr / local / bin目录:在/ usr / bin中:/ bin中:在/ usr /本地/ GAM ES:在/ usr /游戏 $ sudo env | egrep ^ PATH PATH =在/ usr / local / sbin中:在/ usr / local / bin目录:/ usr / […]

是否有一个很好的理由不将sbin添加到默认的PATH?

背景: PATH环境variables指定在发出命令而不指定path时要search的目录。 “sbin”path( /sbin , /usr/sbin )用于存放pipe理实用程序,因此很多* nix发行版不包含PATH默认设置中的这些目录。 也就是说,在很多情况下,非pipe理帐户都需要访问这些实用程序,并且必须指定完整path或修改其PATHvariables才能这样做。 这个任务相对容易执行,但对新用户来说可能很麻烦。 更糟糕的是,当涉及PAM,sudo,ssh和其他与PATH设置交互并且有时修改PATH设置的实用程序时,会遇到更多的难题。 对这个网站或互联网的大量search产生了许多这些问题的例子,这些问题折磨着新老用户。 问题: 有了前面提到的背景,是不是有一个很好的理由不把sbin目录添加到默认的PATH中? (大概是通过/etc/profile , /etc/profile /etc/profile.d或者等价的) 我认识到“好”是主观的,但是这里有一些我认为不成立的理由。 也许你不同意? 不好理由: 安全 提升特权和持有实用工具的目录与全球可访问的目录( rx )无关。 可能会提出一个模糊不清的论点,认为充分无技能的坏人找不到“隐藏的”工具,但这将是一个令人遗憾的透明的幕布。 命名空间 有人可能会争辩说,用户可能希望编写自己的reboot命令,通过他们自己的自定义目录访问他们自己的自定义目录,并将其添加到他们的PATH ,并且在sbin目录中的系统默认值将胜过他们的configuration。 这是一个angular落的情况,以及有问题的用户已经注意到了PATH含义,并且可以修改他们的configuration以使用序列中的前一个目录。 标准 这绝不是对文件系统层次结构标准的改变; 实用程序仍按其function组织到其目录中。 没有解决问题,因为“我们习惯了这个问题”是愚蠢的。

你如何在Nginx中设置服务器特定的ENV值?

我开始一个项目,使用环境variables来设置数据库连接和其他一些事情。 (他们不想使用configuration文件,因为人们粗心大意并覆盖它们)。 无论如何,我正在使用nginx,虽然它支持env – 它似乎并没有足够好的支持 。 您不能在每个服务器块的基础上设置env值。 换句话说,这是行不通的。 server { listen 80; server_name domain; env FOO = "bar"; } 你必须这样做: env FOO = "bar"; http { server { listen 80; server_name domain; } } 这意味着我不能具有特定于虚拟主机的值。 所以我必须为每个站点创build一个完整的虚拟主机configuration,并且只激活一个我想要的那一刻,以便正确设置该值。 有什么办法可以解决这个问题吗?

在Apache加载之前设置服务器variables

我们有运行Apache的CentOS。 基本上,我在/ etc / environment中有一些variables,它们使用PassEnv传递给我们的Apacheconfiguration。 问题是,因为Apache在/ etc / environment之前没有findvariables。 是否有一个类似的/ etc / environment文件,我可以添加我的全局环境variables到Apache(httpd)之前执行,还是我必须开始编辑运行级别? 亲切的问候, 史蒂夫

如何覆盖sudo中的PATH环境variables?

我在/etc/profile设置了PATH。 在一般用户的情况下,我没有任何问题,但是当我成为sudo的根权限时,PATH不会去。 你会怎样重写由/etc/profile设置的PATH ,即使我成为sudo的root权限?

PYTHONPATH环境variables…我如何使每个子目录之后?

我目前这样做: PYTHONPATH=/home/$USER:/home/$USER/respository:/home/$USER/repository/python-stuff 我怎样才能让PYTHONPATH包含一切子目录? PYTHONPATH = /home/$USER/….and-all-subdirectories