Questions tagged «environment-variables»

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

4
如何更改区域设置环境变量?
我已经生成了en_US.utf8,et_EE.iso88591和ru_RU.utf8本地化文件。现在,如果我尝试将任何语言环境变量更改为ru_RU.utf8或en_US.utf8,那么这将没有任何效果: # locale -a C en_US.utf8 et_EE et_EE.iso88591 POSIX ru_RU.utf8 # LC_TIME=ru_RU.utf8 # locale | grep LC_TIME LC_TIME="et_EE.iso88591" # LC_TIME="ru_RU.utf8" # locale | grep LC_TIME LC_TIME="et_EE.iso88591" # 但是,如果我更改LANG =变量,则除LANGUAGE =和LC_ALL =之外的所有其他变量都采用LANG =的值变量的值。有没有办法分别修改每个区域设置变量?另外,我是否纠正了语言环境变量不是常规shell变量,而更像是语言环境实用程序的参数的问题?

3
env,setenv,export和何时使用之间有什么区别?
最近,我注意到我们有3个设置环境变量的选项: export envVar1=1 setenv envVar2=2 env envVAr3=3 如果还有其他方法,请赐教。 我什么时候比另一个更喜欢?请提出准则。 至于外壳兼容性,哪一个是最广泛的(涵盖更多的外壳方言)? 我已经注意到了这个答案,但是我希望扩大使用范围env和使用偏好指南。


6
在非交互式外壳中运行脚本?
我有一个正在运行脚本的cron作业。当我通过交互式外壳程序运行脚本(将其shash为bash)时,它可以正常工作。当脚本通过cron自身运行时,它将失败。 我的猜测是它正在使用交互式外壳程序中设置的一些环境变量。我将对脚本进行故障排除并将其删除。 进行更改后,我知道可以将脚本在cron中排队以使其正常运行,但是有一种方法可以从命令行运行脚本,但告诉它可以从cron中运行-即在非交互式环境中?


2
如何通过脚本启动时设置全局环境变量,并使它们可用于登录前运行的应用程序?
我有一个在启动时运行的服务,在该服务中它在后台调用bash脚本,该脚本导出一些环境变量。我遇到的问题是那些环境变量没有被发送到后台进程的父级,因此一旦我的脚本执行完毕,它们就消失了。 另外,在脚本运行之后,服务会调用另一个脚本来启动我拥有的应用程序。该应用程序需要访问那些环境变量。 我运行它的RHEL系统意味着永远不会被用户登录,它只会启动并启动应用程序。我知道,父进程/ shell的环境变量实际上不能由子后台进程shell设置。 我需要一种通过服务调用的脚本来执行此操作的方法(虽然不一定在后台运行),而不是通过将其添加到服务中(对我也不起作用),而不是将其存储在/etc/environment或中.profile或诸如此类的东西。 在我的服务中,我尝试添加环境变量(不是我想做的): export TEST=192.168.1.1 我也在我的服务中尝试过此操作: TEST=192.168.1.1 export TEST=${TEST} 我尝试更改服务调用bash脚本的方式: /bin/asdf/script & 我也试过采购的脚本,使其在同一个外壳(这是我从运行了此): . ./bin/asdf/script #I'm very confused why this didn't work 我还发现这看起来很有趣,但在我看来并没有真正实现。

4
bash中PATH变量设置位置的完整视图
我已经读过几个PATH设置了/etc/profile或.profile主目录中文件。 这些是设置路径的唯一位置吗?我希望对此有更好的理解。 在/etc/profile文件中,如以下注释所示"system-wide .profile file for the Bourne shell"。这是否意味着概要文件是bash的主要配置文件? 在该文件中,我完全看不到PATHvar。在.profile主目录的文件中,有以下行: PATH="$HOME/bin:$PATH" 这是PATH通过外观重置的,因为它将正确设置的$PATH字符串连接起来了$HOME/bin:吗?但是,如果etc/profile和~/.profile是唯一的文件设置PATH($PATH如果未在其中定义)/etc/profile? 有经验的人可以对PATH变量进行广泛而详细的解释吗?谢谢!

4
shell变量和环境变量在用法上有什么区别?
我实际上不知道可以从命令行访问两种不同类型的变量。我所知道的是,我可以像这样声明变量: foo="my dear friends" bar[0]="one" bar[1]="two" bar[2]="three" 或使用$符号访问它们,例如: echo $foo echo ${bar[1]} 或使用内置变量,例如: echo $PWD PATH=$PATH:"/usr/bin/myProg" 现在,我听说有两种(至少?)变量类型:外壳变量和环境变量。 拥有两种不同类型的目的是什么? 我怎么知道变量是哪种类型? 每种的典型用法是什么?

3
如何设置PATH或其他环境变量,以便X应用程序可以访问它?
如何设置环境变量,以便KDE识别它们? 如何在非Shell环境(KDE)中设置路径? 与以上两个问题不同,我想知道如何为GNOME执行此操作。或者更好的是,有没有一种独立于窗口管理器的方法。对于外壳/终端,我通常进行编辑~/.bashrc。无论在何处使用窗口管理器,我都可以在哪里放置导出语句,以便所有X应用程序都可以使用环境变量?

6
在bash脚本(.bashrc等)中检测X会话
最近我放到xset b off了我的.bashrc。现在,当我通过tty或ssh登录(即在X会话外部)登录时弹出的错误让我很烦。 我想到的第一件事是[[ -z "$SOME_VAR" ]] && xset b off(嗯,事实证明,设置测试变量与清空测试变量是一个不同的问题)。但是哪个SOME_VAR是正确的呢? 因此,我将tty的set输出和urxvt的set输出进行了比较,以查看X中设置了哪些变量而tty中缺少了哪些变量。如预期的那样,存在很多差异(仅列出那些与我相关的差异): DESKTOP_SESSION DISPLAY GDMSESSION SESSION_MANAGER WINDOWID WINDOWPATH XAUTHORITY XDG_SESSION_COOKIE XDG_CONFIG_DIRS XDG_DATA_DIRS XDG_MENU_PREFIX 为了检测我是否在X会话中,哪个是最正确,最通用的测试?可以在尽可能多的发行版,平台和桌面环境中工作的东西吗? 还是有比测试环境变量更好的方法?

4
使用多行语法将路径添加到PATH
据我了解,将路径添加到PATH环境变量的通常方法是串联由:字符分隔的路径。 例如,如果我想三个路径添加到它/my/path/1,/my/path/2并且/my/path/3,我会做到这一点,如下所示: PATH=$PATH:/my/path/1:/my/path/2:/my/path/3 这不容易阅读。 有没有一种方法可以使用多行语法来定义或向变量添加路径?也许使用数组?我正在寻找这样的东西:PATH PATH = $PATH /my/path/1 /my/path/2 /my/path/3 如果有一些特定于Shell的有趣解决方案,那么我正在zsh中寻找解决方案。

1
如何使用pkexec以root用户身份运行GUI应用程序?
我正在使用Trisquel GNU / Linux-Libre,它随Gnome3闪回桌面环境一起提供。 我知道我可以通过sudo&以root身份运行GUI应用程序,gksudo但是我想知道如何在...的帮助下以root身份运行GUI应用程序pkexec? 当我尝试运行gedit(或像任何其他应用程序:nautilus)由pkexec gedit然后,它会提示输入密码进行验证: - 输入密码后,错误退出: $ pkexec gedit error: XDG_RUNTIME_DIR not set in the environment. (gedit:6135): Gtk-WARNING **: cannot open display: 因此,显示环境似乎出了问题。 我也尝试过DISPLAY=:0 pkexec gedit但不起作用。 以下信息可从以下网站获得man pkexec: 为了避免通过LD_LIBRARY_PATH或类似机制注入代码,将PROGRAM运行它的环境设置为最小的已知和安全环境。另外,PKEXEC_UID环境变量设置为调用pkexec的进程的用户ID。结果,由于未设置$ DISPLAY和$ XAUTHORITY环境变量,pkexec将不允许您以其他用户身份运行X11应用程序。如果将动作上的org.freedesktop.policykit.exec.allow_gui批注设置为非空值,则将保留这两个变量;否则,将保留这两个变量。但是不建议这样做,并且仅应将其用于旧版程序。 现在,我不知道该怎么做才能完成此任务。 因此,帮助我找出如何通过来以root身份运行GUI应用程序pkexec。还是有可能吗? 顺便说一句,受gparted-pkexec命令启发,效果很好。如何gparted使用pkexec?

1
环境中缺少LD_LIBRARY_PATH变量是否正常?
我偶然发现在我的Debian Jessie上没有LD_LIBRARY_PATH变量(确切地说,printenv | grep LD没有显示与链接程序有关的任何内容,echo "$LD_LIBRARY_PATH"也没有显示任何内容)。 x终端仿真器(由于setgid可能会清除它)以及基本终端(Ctrl+Alt+F1)就是这种情况。 我知道这LD_LIBRARY_PATH 可能被认为是很糟糕的,所以Debian可能会以某种方式阻止它,但是另一方面/etc/ld.so.conf.d/,其中有些文件包含要添加到的目录LD_LIBRARY_PATH。我所知道的rc文件都没有一个与之LD_LIBRARY_PATH混淆。 为什么我看不到LD_LIBRARY_PATH变量?

2
如何创建一个干净的shell环境以供临时使用?
我经常在以Unix为重点的常见问答网站上回答问题,在我的许多回答中,我都提供了使用bashShell的示例。但是,每次执行此操作时,我都必须手动完成创建干净环境的过程,以确保对每个步骤都进行了说明和记录。如何使该过程更简单?理想情况下,我希望键入一个命令并获得一个干净的环境,并在完成后删除该临时环境的所有痕迹。

2
正确设置环境
我正在使用zsh和gdm运行gnome。前一段时间,我发现变量设置不正确。例如LANG / LC_ALL不正确(""而不是en_GB.UTF-8)。 我将.zshrc分为.zshrc和.profile。在后者中,我设置了环境变量,但是如何在会话开始之前设置变量?我尝试了几种选择(.xinitrc,.xsessionrc),但似乎都没有用。 编辑进行澄清-我在中使用.profile和手动获取了它.zshrc。无论如何它不会改变问题。

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.