Questions tagged «environment-variables»

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

4
sudo可以在什么环境下使用?
当我运行sudo时,我的环境到底发生了什么? 当我运行时sudo command,似乎看不到我或root的环境。例如,我的两个路径都包含/usr/local/bin,但是如果我尝试在没有完整路径的情况下运行程序之一,则它将失败。 我以为sudo是root用户,因此得到了root用户的环境。bash在sudo下执行的方式与root或普通用户下执行的方式不同吗? 编辑: 我sudo -i最近一直在使用,但是最近由于我当前的工作目录设置为,导致了问题/root。这是符合预期的(sorta),但是我仍然不明白为什么sudo无法识别中的可执行文件/usr/local/bin。 编辑: 我正在运行Fedora 15。

1
为什么bash参数扩展在systemd服务文件中不起作用?
我正在尝试使用systemd的,EnvironmentFile并在文件中设置命令时向命令添加选项。我在单位文件中具有以下内容: ExecStart=/usr/bin/bash -c "echo ${PORT:+port is $PORT}" 当我启动服务时,它什么也没有回应。 预期的工作如下: ExecStart=/usr/bin/bash -c "echo port is $PORT" 这表示文件已正确读取。 参数替换也可以在命令行上使用: $ PORT=1234 bash -c 'echo ${PORT:+port is $PORT}' port is 1234 我想念什么?

3
为什么运行新的shell时$ SHELL不变?
$ echo $SHELL /bin/bash $ /bin/ksh93 $ echo $SHELL /bin/bash $ file /bin/ksh93 /bin/ksh93: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped $ getent passwd test111 test111:x:1008:1008:,,,:/tmp:/bin/ksh93 $ ssh test@localhost test@localhost's password: $ echo $SHELL /bin/ksh93 $ bash $ echo $SHELL …

1
如何在Systemd服务中设置环境变量
我正在使用ROS,它已经正确安装在Ubuntu上。 要运行ROS,我们必须先source /opt/ros/kinetic/setup.bash执行roscore。如果我roscore不执行source setup.bash该命令,roscore则找不到该命令。 现在,我想在系统启动时执行ROS。 我已阅读此链接:https : //askubuntu.com/questions/814/how-to-run-scripts-on-start-up 看来我只需要创建一个自定义服务文件并将其放入/etc/systemd/system/。但是我仍然不确定该怎么做,因为我需要source setup.bash在执行之前设置一些必要的环境变量roscore。 是否可以在服务文件中设置环境变量?为了我的需要,我不仅要为执行roscore系统设置这些环境变量,还要为整个系统设置这些环境变量。 我有另一个想法,那就是我设置了这些环境变量/etc/profile并仅为该命令编写了一个服务文件roscore,它将起作用吗?

2
在Wayland上为gnome设置环境变量,在虚拟终端(或ssh)上为bash设置环境变量
Gnome 3.22默认使用Wayland。Wayland上的Gnome无法读取~/.profile(或~/.bash_profile或/etc/profile)。见https://bugzilla.gnome.org/show_bug.cgi?id=736660。 我的初始化文件设置如下: .bash_profile什么也不做,但源.profile和.bashrc .profile只设置环境变量,例如PATH和LC_MESSAGES .bashrc为诸如less和的应用程序设置一些特定于bash的设置,别名和环境变量grep。 效果(在Wayland之前)如下: 当我以图形方式登录时.profile,会读取并设置PATH和LC_MESSAGES设置环境变量。当我在终端仿真器中打开bash时,会.bashrc被读取。 当我在虚拟终端下登录时.bash_profile,将读取.profile并依次读取和.bashrc。 当我使用ssh登录时,行为类似于虚拟终端。 在所有情况下.profile,.bashrc均已阅读并且设置了我的环境。 因此,现在gnome 3.22使用了Wayland,而Wayland无法读取.profile。如何设置初始化文件,以便再次获得如上所述的效果? 请注意,我不坚持.profile读取某些文件(如)。我想要以一种明智的方式来设置我的环境。这意味着我想将bash特定设置保留在bash初始化文件中,并将其他设置保留在其他初始化文件中。另外,我也不想在其他文件上复制设置。 我使用arch linux。欢迎所有发行版本的答案。当提出解决方法时,请同时描述副作用以及优缺点。 更新2017年11月:据我了解GNOME开发者都承认,人们期待他们的登录shell的配置文件(.profile并.bash_profile在bash的情况下)在登录后采购。无论是文本登录还是图形登录。因此,我上面概述的用例再次起作用。 gnome开发人员仍然希望远离启动登录shell。看来他们的发展方向是使用systemd环境的: https://in.waw.pl/~zbyszek/blog/environmentd.html 似乎需要一段时间才能使所有登录方法适应环境。

5
在bash和鱼之间共享环境变量
bash和fish脚本不兼容,但是我想拥有一个文件,该文件定义了一些由bash和fish初始化的环境变量。 我建议的解决方案是定义一个~/.env文件,其中包含以下环境变量列表: PATH="$HOME/bin:$PATH" FOO="bar" 然后,我可以仅以bash形式提供它,并制作一个脚本,将其转换为fish格式并以fish形式提供。 我当时想可能有比这更好的解决方案,所以我想寻求一种更好的方法来在bash鱼之间共享环境变量。 注意:我正在使用OSX。 这是一个示例.env文件,我希望fish和bash都使用荒谬的fish语法处理(假设〜/ bin和〜/ bin2是空目录): setenv _PATH "$PATH" setenv PATH "$HOME/bin" setenv PATH "$PATH:$HOME/bin2" setenv PATH "$PATH:$_PATH"


2
设置LC_ *但不设置LC_ALL
我想使用德语(奥地利)语言环境(A4纸张大小,24小时制,yyyy-mm-dd),但是使用英语用户界面(我不喜欢翻译不佳)。我认为实现此目标的正确方法是LC_按照以下步骤设置变量.bashrc(如果我输入错误,请更正): LC_MESSAGES=en_US.UTF-8 LC_$everythingelse=de_AT.UTF-8 有没有更优雅的方法来设置LC_ $ everythingelse而不是设置每个值?设置LC_ALL是不可选项,因为它优先于LC_MESSAGES: $ export LC_ALL=de_AT.UTF_8 $ export LC_MESSAGES=en_US.UTF_8 $ echo $LC_MESSAGES en_US.UTF_8 $ locale | grep LC_MESSAGES LC_MESSAGES="de_AT.UTF_8" PS:这是一台共享计算机,我也不是很随便,因此不能更改系统范围的设置。


2
Linux上的特权用户是否可以看到环境变量?
我试图确定在Linux中,其他(非root)用户是否可以观察到进程的环境变量。 立即使用的情况是将机密放入环境变量中。整个网络上很多地方都在讨论这是不安全的,但是我无法将Linux的确切暴露点归零。 请注意,我并不是在谈论将明文秘密放入文件中。另请注意,我并不是在谈论暴露于root帐户(我认为试图以root为首发身份隐藏来自对手的秘密)。 这个问题似乎是在解决我的问题,并提出了将环境变量分类为完全不具有安全性或仅被混淆的注释,但是人们如何访问它们呢? 在我的测试中,一个没有特权的用户无法通过进程表('ps auxwwe')观察另一位用户的环境变量。设置环境变量(例如,导出)的命令是shell内置程序,它们不会使其进入进程表,并且扩展名不在/ proc / $ pid / cmdline中。/ proc / $ pid / environ仅可由进程所有者的UID读取。 也许混淆是在不同的操作系统或版本之间。网络上的各种(最新)资源都在谴责环境变量的不安全性,但是我对不同的Linux版本进行抽查似乎表明,这种情况至少可以追溯到2007年(可能更进一步,但我没有发现问题)进行测试)。 在Linux中,非特权用户如何观察另一个进程的环境变量?


2
在“ while IFS = read ..”中,IFS为什么无效?
我可能有绝对错误的提示,但令我信服的是,将IFS设置为预先执行/完成列表中的命令之一绝对没有任何效果。在下面的脚本中显示的所有示例中,都 使用外部IFS(在while构造之外)。 这里发生了什么?在这种情况下,我对IFS的功能是否有误解?我希望将数组拆分的结果显示在“预期”列中。 #!/bin/bash xifs() { echo -n "$(echo -n "$IFS" | xxd -p)"; } # allow for null $IFS show() { x=($1) echo -ne " (${#x[@]})\t |" for ((j=0;j<${#x[@]};j++)); do echo -n "${x[j]}|" done echo -ne "\t" xifs "$IFS"; echo } data="a b c" echo -e "----- -- -- …

2
“ export”命令的用途是什么?
我在一个终端窗口中创建了一个环境变量,并试图在另一个终端窗口中回显它。那什么也没显示。 $TEST=hello 之后,我将其导出,然后echo在另一个终端窗口中再次尝试。结果和以前一样。 export TEST 但是,如果我在登录时执行相同的代码(将代码附加到~/.profile文件中),则可以在任何终端窗口中使用变量。这是怎么回事 在终端中执行代码与登录时执行代码有什么区别?

1
在tmux.conf文件中使用环境变量
是否可以在tmux.conf文件中使用环境变量?我正在尝试为环境变量设置默认路径。目前我正在尝试的是: set -g default-path $MYVAR 此外,我想检查$ MYVAR是否已设置,所以我可以这样做: if($MYVAR == "") set-environment -g MYVAR /somepath/ 有任何想法吗?

2
通过ssh运行命令时未获取点文件
当我交互式运行程序时,它可以正常运行: ssh somehost $ ~/some/path/somescript.py 当我直接通过ssh运行程序时,它不起作用。该变量PYTHONPATH未设置,因为.bashrc它不是源变量。 ssh somehost ~/some/path/somescript.py 如果我运行ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py',它将正常运行。 但是后者不适用于其他一些人,例如,使用tcsh却根本不使用a ~/.bashrc)。 通过ssh在适用于所有shell的另一台主机上运行事物的命令是什么?

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.