Questions tagged «environment-variables»

对于与环境变量有关的问题,一组动态变量可能会影响正在运行的进程的行为和对资源的访问。使用此标记可解决有关环境变量的问题,或有关在运行过程行为和对资源的访问中因设置或修改变量值的影响而引起的问题的问题。

2
变量分配影响当前正在运行的外壳
在编写一些代码时,我发现这一行: $ TZ="America/Los_Angeles" date; echo "$TZ" Thu Dec 24 14:39:15 PST 2015 正确给出“洛杉矶”的实际时间,并且TZ不保留变量的值。一切都应该预期。 但是,使用此行(我以前用来扩展某些格式,并且基本上执行相同的操作)保留了TZ的值: TZ="America/Los_Angeles" eval date; echo "$TZ" Thu Dec 24 14:41:34 PST 2015 America/Los_Angeles 经过多次测试后,我发现这仅在某些shell中发生。它发生在破折号,ksh中,但不发生在bash或zsh中。 Q的 问题是: 为什么现在的外壳中保留TZ的值? 如何避免/控制这种情况(如果可能)? 额外。 我使用以下两行在几个shell中运行测试: myTZ="America/Los_Angeles" unset TZ; { TZ="$myTZ" date; } >/dev/null; echo -n " direct $TZ" unset TZ; { TZ="$myTZ" …


2
如何防止在sudo中使用调用方的shell
我在CentOS 6.5上运行sudo-1.8.6。我的问题很简单:如何防止SHELL从用户环境传播到sudo环境? 通常人们会选择另一种方式-他们想要保留环境变量。但是,我的用户“ zabbix”的shell /sbin/nologin尝试通过sudo运行命令时遇到问题。Sudo保留,/sbin/nologin以便root无法运行子shell。(更新:这部分是正确的,但不是SHELL环境变量。这是从/ etc / passwd中提取的shell值。) 我提供了一个可以说明问题的测试;这不是我的实际用例,而只是说明保留了调用用户的SHELL。我有一个以用户身份运行的程序zabbix。它调用/usr/bin/sudo -u root /tmp/doit(程序作为zabbix守护程序运行,因此/sbin/nologin密码文件中的shell不会阻止它运行)。/tmp/doit是一个shell脚本,仅具有: #!/bin/sh env > /tmp/outfile (模式显然是755)。在outfile我可以看到的SHELL是/sbin/nologin。但是,此时脚本通过sudo以root身份运行,因此它不应该具有先前用户的环境变量,对吗? 这是我的/ etc / sudoers: 默认要求 默认值!visiblepw 默认为always_set_home 默认值env_reset 默认值env_keep =“颜色显示主机名历史记录输入INPUTRC KDEDIR LS_COLORS” 默认值env_keep + =“邮件PS1 PS2 QTDIR用户名LANG LC_ADDRESS LC_CTYPE” 默认值env_keep + =“ LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES” 默认值env_keep + =“ LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER …

3
取消所有与_PROXY匹配的ENV变量
我正在尝试取消匹配的所有环境变量_PROXY: env | grep -i _proxy | column -t -s '=' | awk '{ print $1 }' | grep -iv 'no_proxy' | xargs -0 -I variable unset variable 却失败了xargs: unset: No such file or directory。 但是,如果尝试更改unset为echo,那么一切似乎都可以按预期进行:我得到了一组已设置的变量。 env | grep -i _proxy | column -t -s '=' | awk '{ print …

4
将修改环境的命令输出保存到变量中
如何保存将环境修改为变量的命令的输出? 我正在使用bash shell。 假设我有: function f () { a=3; b=4 ; echo "`date`: $a $b"; } 现在,我可以使用命令来运行f: $ a=0; b=0; f; echo $a; echo $b; echo $c Sat Jun 28 21:27:08 CEST 2014: 3 4 3 4 但是我想将输出保存f到variable c,所以我尝试了: a=0; b=0; c=""; c=$(f); echo $a; echo $b; echo $c 但不幸的是,我得到了: …

2
如何保证$ BASH_ENV的可用性
非交互式,非登录外壳程序将尝试获取$ BASH_ENV中指定的任何脚本。但是,如何确保在cron作业或脚本有机会为任何特定会话设置$ BASH_ENV之前设置$ BASH_ENV?是使用硬编码编译Bash的唯一选择吗?


1
环境变量和外壳变量之间的区别
据说环境变量是在子进程中继承的,而shell变量不是。但是,以下测试表明,在子进程中可以看到shell变量,就像在环境变量中一样。有什么区别? > bash --version GNU bash, version 3.2.39(1)-release (x86_64-suse-linux-gnu) Copyright (C) 2007 Free Software Foundation, Inc. > export TEST="ENV_TEST" #env var > sh -c "echo \$TEST" ENV_TEST > TEST="SHELL_TEST" #shell var > sh -c "echo \$TEST" #shell var is seen in child process SHELL_TEST

2
(G)VIM使用与我的系统不同的$ PATH
因为Ubuntu没有提供TeXLive的最新软件包,所以我手动安装了它。但是,某些程序需要TeXLive作为依赖项。因此,我要做的是从2009版本安装了Ubuntu存储库中的TeXLive软件包。然后,我将$ PATH更改为包含手动安装的2011版本,因此程序仍然始终指向并使用最新的TeXLive版本。到目前为止,一切正常。 但这很简单:当我切换到VIM来编辑LaTeX文件时,我感到头疼的是,VIM只看到TeXLive2009!看到此屏幕截图,左为VIM,右为终端: 然后,我检查了$ PATH VIM使用的是什么,事实证明,它使用的是另一种,没有指向TeXLive2011。请参见此屏幕截图: VIM: :! echo $PATH /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 终奌站: echo $PATH /usr/local/texlive/2011/bin/x86_64-linux:/usr/local/texlive/2011/bin/x86_64-linux:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 您是否知道如何解决此问题,以便我的LaTeX插件可以使用TeXLive 2011,也许可以使VIM使用相同的$ PATH?任何帮助将不胜感激!

2
告诉pkg-config在系统范围内的/ usr / local / lib / pkgconfig中也查找* .pc文件
目前pkg-config只在中显示/usr/lib/pkgconfig。我可以通过导出PKG_CONFIG_PATH环境变量来为用户调整它,但是我又一次忘记了为root用户设置它,并且浪费了时间,想知道为什么我的插件未正确安装(使用了makefile pkg-config)。那么,如何在整个系统范围内设置它,以便始终查看/usr/lib和/usr/local/lib?


4
我可以产生一个新终端,它是当前终端的副本吗?
假设我正在目录/ asdf / qwer / dfgh / wert / asdf / qwer中开发代码,并且我在路径中添加了大约三个类似的目录,并且设置了许多奥秘的环境变量。然后,我意识到我确实需要以相同的方式打开另一个终端并进行设置(尽管这种需求不会再次发生,因此我只需要更改.bashrc即可)。是否有任何命令打开一个新的终端窗口,该窗口正是此窗口的精确副本?


2
同一用户的多个虚拟配置文件
很多时候,一个用户使用多个“身份”:工作,开源,学术界等,所有这些都需要不同的ssh密钥,编辑器配置,git config等。 我想知道是否有任何工具可以在具有相同UNIX用户的“虚拟配置文件”之间进行切换。最好可以使您也具有不同的默认二进制文件/库(例如,在一个配置文件中,“ python”将运行python2.7,而在另一个配置文件中将运行python3)。 我知道可以使用环境变量,别名和链接文件的组合来设置它,但是我想知道是否有更干净的选择,例如python提供的virtualenv。

1
ssh保留环境
我想向客户端服务器发送命令 ssh <client-machine> command 但是,命令是在发送命令的计算机上定义的别名。我也在命令脚本中使用变量,例如: export PORJECT=submariner export location=/under/water export PWD=$PWD 有什么简单的方法可以保存所有内容吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.