可能重复:
如何设置用户环境变量?(永久,不是会话)
要更改 PATH 变量的数量,我使用: export PATH=...
但是当我关闭终端时,PATH 的数量变成了最初的样子。
我想保存更改,以便在关闭终端或注销后数量将是我想要的。
我怎样才能完成这项工作?
我使用 Fedora 17,内核:3.4.3
在特定主机上,当我 ssh 进入机器并输入时,echo $PATH我得到
/home/wxy/bin64:/home/wxy/bin:/usr/kerberos/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin
Run Code Online (Sandbox Code Playgroud)
如果我执行ssh host 'echo $PATH'我看到这个:
/usr/local/bin:/bin:/usr/bin
Run Code Online (Sandbox Code Playgroud)
为什么会出现这种差异?
如果我想使用后一个命令查看前一个结果,我该怎么办?
来源的 shell 脚本是否有可能知道它的位置?我读过确定来源的shell脚本路径,但答案集中在bash和tcsh,如果使用POSIX外壳失败。$0也不是解决方案并产生错误的结果。
解决方案不需要 100% 可靠。路径不太可能包含硬链接或符号链接。
# sourcing the script should yield the absolute path to the script
. somedir/thescript
# within “thescript”
-> /tmp/foo/bar/somedir
Run Code Online (Sandbox Code Playgroud)
一些背景:该脚本是现有应用程序的一部分,其中包含bin与源脚本相关的已知位置(因架构而异)的目录中的数十个二进制文件。要使用该应用程序,用户需要将bin目录PATH放在 .
在 Ubuntu 中,如果 $HOME/bin 存在,它会自动添加到 PATH,但在 Debian 中不会发生这种情况。
我如何将它永久添加到给定用户的 PATH 中,但仅限于他,而不是所有用户?我希望它也对 GUI 程序有效,而不仅仅是对终端有效。
编辑:澄清一下,我使用 LXDE,并且来自登录管理器,即不是startx. .bashrc不适用于我在终端外启动的程序。
在 中安装了一些程序后/opt/xxx/bin,我想为所有用户的非登录 shell添加/opt/xxx/bin到系统$PATH中。我该怎么办?
每当我打开一个新的 TMux 会话时,我都会看到以下内容:
/home/foo/.oh-my-zsh/oh-my-zsh.sh:3: command not found: env
env_default:1: command not found: env
env_default:1: command not found: grep
env_default:1: command not found: env
env_default:1: command not found: grep
Run Code Online (Sandbox Code Playgroud)
我已经删除了我的.tmux.conf文件,以下是文件中的行oh-my-zsh.sh:
1 # Check for updates on initial load...
2 if [ "$DISABLE_AUTO_UPDATE" != "true" ]; then
3 env ZSH=$ZSH DISABLE_UPDATE_PROMPT=$DISABLE_UPDATE_PROMPT zsh -f $ZSH/tools/check_for_upgrade.sh
4 fi
5
Run Code Online (Sandbox Code Playgroud)
常规终端会话没有这个问题...但是,由于某种原因,这确实...好吧,我应该说,它不会显示这些错误。可能还有一个我不知道的问题。现在想起来,oh-my-zsh 要求更新自己已经有一段时间了。
另外,Vim 似乎.vimrc也没有在 Tmux 中加载...这是 PATH 问题吗?
对这里可能出什么问题有什么想法吗?
编辑
这是我的.tmux.conf
# remap prefix from 'C-b' to 'C-a' …Run Code Online (Sandbox Code Playgroud) 该蟒蛇蟒蛇框架包括它自己的Qt的共享库,其他中。由于框架的性质,它必须首先出现在PATH环境变量中,因此它的 Python 二进制文件优先于系统的二进制文件。
当人们想将系统的 Qt 共享库用于与 python 无关的项目时,这会产生冲突。编译 Qt 项目时,它将使用qmake来自 anaconda的二进制文件及其共享库。
可以qmake通过将其路径添加到PATH变量来强制使用二进制文件,但这不适用于共享库。我尝试更改,LD_LIBRARY_PATH但它一直选择 anaconda 的。
我发现的“解决方案”:
PATH变量,有一个容易获得的脚本,它的预规划每当我需要它,建议在这里。问题是我习惯于让我的 python 二进制文件随时可用,并且当我在不知不觉中使用系统的 python 二进制文件时很容易出错。如何让 ash 在启动时加载一些环境变量?
只需将它们放在 /etc/profile 中
/etc/profile 仅为登录 shell 读取;使用 docker(使用 alpine>busybox>ash)时经常弹出的非登录 shell 呢?
如果在环境变量 ENV 中指定,则非登录 shell 将读取文件
太好了,我如何确保设置了 ENV?它本身是一个环境变量,默认为空白。
本质上,我正在寻找一些保证 ash 可以读取的总体配置文件。对 busybox 使用的 ash 版本的偏好(BusyBox v1.28.4,如果你想准确的话)。这样的事情存在吗?是的,我知道 docker 中的 ENV 指令,它可用于在构建 docker 镜像时设置 $ENV;我仍然想知道这在 docker 之外是否可行。
作为旁注,谁能解释这种在高山的奇怪行为?
$docker run -it alpine
/ # echo $CHARSET #proof /etc/profile has not run
/ # echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/ # env -i sh -c 'echo $PATH'
/sbin:/usr/sbin:/bin:/usr/bin
/ # echo $ENV
/ #
Run Code Online (Sandbox Code Playgroud)
当我们可以显示 /etc/profile 没有时,与为新 …
我安装了最新版本的 Debian (netinstall)。
我遇到的问题是,终端不知道shutdown、reboot等命令。
当我whereis shutdown这样做时,它告诉我它在/usr/sbin.
我通过写入写入的位置/usr/sbin尝试在不同的安装上修复了此问题。
但这一次没有成功。/etc/profile$PATH
我查看了这个: https: //wiki.debian.org/EnvironmentVariables,但是这些文件不存在或者我不知道在哪里放置路径。
而且做的事情export PATH=$PATH:usr/sbin不是永久的,重启后就消失了,所以这也是垃圾。
编辑:等等,也许我必须更改 PATH /etc/environment?!
当我再次尝试 Debian 时,我必须对此进行测试。
在符合 POSIX 标准的系统中,是否出现(可能重叠)/./已被替换的路径/保证通向与原始路径相同的目标?
例子:
#!/bin/bash
shopt -s extglob
some_command -- "${@//\/+(.\/)//}"
Run Code Online (Sandbox Code Playgroud)
鉴于评论,它不等同,所以我将更新问题:
在符合 POSIX 标准的系统中,是否出现的路径(可能重叠)/././已被替换为/./保证导致与原始路径相同的目标?