在Linux上,如何将目录添加到$PATH,使其在不同会话中保持持久性?

Background

我正在try 向路径中添加一个目录,以便它始终位于我的Linux路径中.我试过:

export PATH=$PATH:/path/to/dir

这是可行的,但是每次我退出终端并启动一个新的终端实例时,这个路径就会丢失,我需要再次运行export命令.

我该怎么做才能永久设置?

推荐答案

有多种方法可以做到这一点.实际解决方案取决于目的.

变量值通常存储在分配列表或在系统或用户会话开始时运行的shell脚本中.对于shell脚本,必须使用特定的shell语法和exportset命令.

全系统

  1. /etc/environment独特任务列表.允许引用.非常适合添加系统范围的目录,比如/usr/local/something/binPATH变量或定义JAVA_HOME.由PAMsystemd使用.

  2. /etc/environment.d/*.conf个独特的任务列表.允许引用.非常适合添加系统范围的目录,如/usr/local/something/binPATH变量或定义JAVA_HOME.配置可以分为多个文件,通常每个工具(Java、Go和Node.js)一个.systemd使用,设计时不会将这些值传递给用户登录shell.

  3. 启动X Window系统会话时执行/etc/xprofile个Shell脚本.这是 for each 登录到X Window系统的用户运行的.对于PATH个条目来说,这是一个不错的 Select ,这些条目对每个用户都有效,比如/usr/local/something/bin个.该文件包含在其他脚本中,因此请使用POSIX shell语法,而不是用户shell的语法.

  4. /etc/profile/etc/profile.d/* Shell脚本.对于纯shell系统来说,这是一个很好的 Select .在登录模式下,Shell只能读取这些文件.

  5. /etc/<shell>.<shell>rc.Shell脚本.这是一个糟糕的 Select ,因为它是单壳特定的.在非登录模式下使用.

用户会话

  1. ~/.pam_environment.唯一分配列表,不允许引用.如果是X Window系统会话或shell,则在每个用户会话开始时由PAM加载.您不能引用其他变量,包括HOMEPATH,因此它的用途有限.帕姆用过.

  2. ~/.xprofile个Shell脚本.这是在用户登录X Window系统时执行的.这里定义的变量对每个X应用程序都是可见的.使用~/bin~/go/bin等值扩展PATH或定义特定于用户的GOPATHNPM_HOME的完美 Select .该文件包含在其他脚本中,因此请使用POSIX shell语法,而不是用户shell的语法.通过快捷方式启动的图形文本编辑器或IDE将看到这些值.

  3. ~/.profile~/.<shell>_profile~/.<shell>_login Shell脚本.它将仅对从终端或终端模拟器启动的程序可见.对于纯shell系统来说,这是一个很好的 Select .Shell在登录模式下使用.

  4. ~/.<shell>rc.Shell脚本.这是一个糟糕的 Select ,因为它是单壳特定的.在非登录模式下由Shell使用.

笔记

GNOME on Wayland启动用户登录shell以获取环境.它有效地使用了登录shell配置~/.profile~/.<shell>_profile~/.<shell>_login文件.

手册页

特定于分发的文档

Difference between Login Shell and Non-Login Shell?

Linux相关问答推荐

Linux内核中维护进程无关寄存器失败

C++17:G++8.5版似乎无法正确生成无符号64位伪随机整数

在不影响ROS2安装的情况下更新Ubuntu Linux中的CMake

如何调试tokio任务挂起的位置?

如何在我的 PC 上配置 GitLab 和 GitHub ssh 密钥

为什么组合的查找和重命名命令在 bash shell 下不能按预期工作?

使用 AWK 过滤 Linux 输出

awk/sed 命令仅在模式 2 匹配时打印模式 1

当 skylake 有 fsgsbase 时,为什么使用 __builtin_ia32_wrfsbase64 会收到非法指令?

编译过度对齐的动态分配变量时出现 icpc 错误

查找在特定日期从特定机器登录的所有用户

Linux 进程在后台 - 在作业(job)中 Stopped停止?

GLIBCXX 版本

如何更改目录中所有文件中所有出现的单词

如何优雅地退出 X11 事件循环?

如何在没有 IDE 的情况下构建和部署三星 SmartTV 应用程序(例如:在 Linux 上)

Colored shell 脚本输出库

使用sudo apt-get install build-essentials

当父进程被杀死时,使用 fork() 创建的子进程是否会自动被杀死?

Ionic android 构建错误 - 找不到ANDROID_HOME环境变量