Skip to content

搞英语 → 看世界

翻译英文优质信息和名人推特

Menu
  • 首页
  • 作者列表
  • 独立博客
  • 专业媒体
  • 名人推特
  • 邮件列表
  • 关于本站
Menu

如何将目录添加到 PATH

Posted on 2025-02-14

今天我正在和一个朋友谈论如何将目录添加到您的 PATH 中。因为我已经使用终端很长时间了,所以这对我来说是“显而易见的”,但是当我搜索如何执行此操作的说明时,我实际上找不到解释所有步骤的东西 – 很多人只是说“将其添加到~/.bashrc ”,但是如果您不使用 bash 怎么办?如果您的 bash 配置实际上位于不同的文件中怎么办?您应该如何确定要添加哪个目录?

因此,我想尝试写下一些更完整的指导,并提及我多年来遇到的一些问题。

这是一个目录:

  • 第1步:你使用什么外壳?
  • 第 2 步:找到 shell 的配置文件
    • 关于 bash 配置文件的注释
  • 第 3 步:找出要添加的目录
    • 步骤 3.1:仔细检查它是正确的目录
  • 第 4 步:编辑 shell 配置
  • 第 5 步:重新启动 shell
  • 问题:
    • 问题1:运行了错误的程序
    • 问题 2:程序没有从您的 shell 运行
  • 笔记:
    • 关于来源的注释
    • 关于fish_add_path的注释

第1步:你使用什么外壳?

如果您不确定自己使用的是什么 shell,可以通过以下方法找到答案。运行这个:

 ps -p $$ -o pid,comm=
  • 如果你使用bash ,它会打印出97295 bash
  • 如果您使用zsh ,它会打印出97295 zsh
  • 如果你使用的是fish ,它会打印出一个错误,比如“Infish,请使用$fish_pid”( $$在fish中不是有效的语法,但无论如何,错误消息会告诉你你正在使用fish,你可能已经知道了)

此外,bash 是 Linux 上的默认设置,zsh 是 Mac OS 上的默认设置(截至 2024 年)。我将仅介绍这些方向的 bash、zsh 和 Fish。

第 2 步:找到 shell 的配置文件

  • 在 zsh 中,它可能是~/.zshrc
  • 在 bash 中,可能是~/.bashrc ,但它很复杂,请参阅下一节中的注释
  • 在fish中,它可能是~/.config/fish/config.fish (如果你想100%确定,你可以运行echo $__fish_config_dir )

关于 bash 配置文件的注释

Bash 有三个可能的配置文件: ~/.bashrc 、 ~/.bash_profile和~/.profile 。

如果您不确定您的系统设置为使用哪一个,我建议您通过以下方式进行测试:

  1. 将echo hi there添加到你的~/.bashrc中
  2. 重新启动您的终端
  3. 如果您看到“hi There”,则意味着~/.bashrc正在被使用!万岁!
  4. 否则删除它并尝试使用~/.bash_profile进行相同的操作
  5. 如果前两个选项不起作用,您也可以尝试~/.profile 。

(有很多详细的流程图解释了 bash 如何决定使用哪个配置文件,但在我看来,这是不值得的,只是测试是最快的确定方法)

第 3 步:找出要添加的目录

假设您正在尝试安装并运行一个名为http-server程序,但它不起作用,如下所示:

 $ npm install -g http-server $ http-server bash: http-server: command not found

如何找到http-server所在的目录?老实说,一般来说这并不那么容易——答案通常是“这取决于 npm 的配置方式”。一些想法:

  • 通常,在设置新的安装程序(如cargo 、 npm 、 homebrew等)时,当您第一次设置它时,它会打印出一些有关如何更新 PATH 的说明。因此,如果您注意的话,您就可以获得指示。
  • 有时安装程序会自动更新您的 shell 的配置文件以更新您的PATH
  • 有时只需谷歌搜索“npm 在哪里安装东西?”将会出现答案
  • 有些工具有一个子命令,可以告诉您它们被配置为安装的位置,例如:
    • Node/npm: npm config get prefix (然后附加/bin/ )
    • 去: go env | grep GOPATH (然后追加/bin/ )
    • asdf: asdf info | grep ASDF_DIR (然后附加/bin/和/shims/ )

步骤 3.1:仔细检查它是正确的目录

一旦您找到了您认为可能正确的目录,请确保它确实正确!例如,我发现在我的机器上, http-server位于~/.npm-global/bin中。我可以通过尝试在该目录中运行程序http-server来确保它是正确的目录,如下所示:

 $ ~/.npm-global/bin/http-server Starting up http-server, serving ./public

成功了!现在您知道需要将哪个目录添加到PATH中,让我们进入下一步!

第 4 步:编辑 shell 配置

现在我们有了所需的 2 条关键信息:

  1. 您尝试添加到 PATH 的目录(例如~/.npm-global/bin/ )
  2. shell 的配置在哪里(例如~/.bashrc 、 ~/.zshrc或~/.config/fish/config.fish )

现在您需要添加的内容取决于您的 shell:

bash 和 zsh 说明:

打开 shell 的配置文件,然后添加如下行:

 export PATH=$PATH:~/.npm-global/bin/

(显然将~/.npm-global/bin替换为您要添加的实际目录)

鱼的使用说明:

在fish中,语法是不同的:

 set PATH $PATH ~/.npm-global/bin

(在fish中你也可以使用fish_add_path ,下面有一些注释)

第 5 步:重新启动 shell

现在,一个极其重要的步骤:如果不重新启动 shell,更新配置将不会生效!

有两种方法可以做到这一点:

  1. 打开一个新终端(或终端选项卡),也许关闭旧终端,这样你就不会感到困惑
  2. 运行bash启动一个新的 shell(如果您使用 zsh,则运行zsh ;如果您使用fish ,则运行 Fish)

我发现这两种方法通常都能很好地工作。

你应该完成了!尝试运行您想要运行的程序,希望它现在可以运行。

如果没有,您可能会遇到以下几个问题:

问题1:运行了错误的程序

如果程序运行的版本错误,您可能需要将该目录添加到 PATH 的开头而不是末尾。

例如,在我的系统上安装了两个版本的python3 ,我可以通过运行which -a来查看它们:

 $ which -a python3 /usr/bin/python3 /opt/homebrew/bin/python3

您的 shell 将使用的是列出的第一个。

如果您想使用 Homebrew 版本,则需要将该目录 ( /opt/homebrew/bin ) 添加到 PATH 的开头,方法是将其放入 shell 的配置文件中(它是/opt/homebrew/bin/:$PATH而不是通常的$PATH:/opt/homebrew/bin/ )

 export PATH=/opt/homebrew/bin/:$PATH

或在鱼中:

 set PATH ~/.cargo/bin $PATH

问题 2:程序没有从您的 shell 运行

所有这些指示仅在您从 shell运行该程序时才有效。如果您从 IDE、GUI、cron 作业或其他方式运行程序,则需要以不同的方式将该目录添加到 PATH,具体细节可能取决于具体情况。

在 cron 作业中

一些选项:

  • 使用您正在运行的程序的完整路径,例如/home/bork/bin/my-program
  • 将您想要的完整 PATH 作为 crontab 的第一行(类似于 PATH=/bin:/usr/bin:/usr/local/bin:…)。您可以通过运行echo "PATH=$PATH"来获取在 shell 中使用的完整 PATH。

老实说,我不确定如何在 IDE/GUI 中处理它,因为我已经很长时间没有遇到这个问题了,如果有人给我指出正确的方向,我会在这里添加说明。

关于source的注释

当您第一次安装cargo (Rust 的安装程序)时,它会为您提供有关如何设置 PATH 的说明,其中根本没有提及特定目录。

 This is usually done by running one of the following (note the leading DOT): . "$HOME/.cargo/env" # For sh/bash/zsh/ash/dash/pdksh source "$HOME/.cargo/env.fish" # For fish

这个想法是,您将该行添加到 shell 的配置中,它们的脚本会自动为您设置PATH (以及可能的其他内容)。

这很常见(例如Homebrew建议您 eval brew shellenv ),有两种方法可以解决此问题:

  1. 只需按照该工具的建议进行操作(例如将. "$HOME/.cargo/env"添加到 shell 的配置中)
  2. 找出他们告诉您运行的脚本将添加到您的路径中的哪些目录,然后手动添加它们。我是这样做的:
    • 跑步. "$HOME/.cargo/env"我的 shell 中的. "$HOME/.cargo/env" (如果使用 Fish,则为 Fish 版本)
    • 运行echo "$PATH" | tr ':' '\n' | grep cargo找出它添加了哪些目录
    • 看到它显示/Users/bork/.cargo/bin并将其缩短为~/.cargo/bin
    • 将目录~/.cargo/bin添加到 PATH (使用本文中的说明)

我不认为按照该工具的建议进行操作有什么问题(这可能是“最好的方法”!),但就我个人而言,我通常使用第二种方法,因为我更喜欢确切地知道我正在更改的配置。

关于fish_add_path的注释

Fish 有一个名为fish_add_path的方便函数,您可以运行它来将目录添加到您的PATH中,如下所示:

 fish_add_path /some/directory

这会将目录添加到您的PATH中,并使用新的PATH自动更新所有正在运行的 Fish shell。您根本不必更新配置!这非常方便,但一个缺点(也是我个人停止使用它的原因)是,如果您需要在几周或几个月后从您的PATH中删除该目录,因为您可能犯了一个错误,这是很难做到的(尽管在这个 github 问题的评论中有说明)。

就这样

希望这会对一些人有所帮助。如果您在将目录添加到 PATH 时遇到其他主要问题,或者您对本文有疑问,请告诉我(在 Mastodon 或 Bluesky 上)!

原文: https://jvns.ca/blog/2025/02/13/how-to-add-a-directory-to-your-path/

本站文章系自动翻译,站长会周期检查,如果有不当内容,请点此留言,非常感谢。
  • Abhinav
  • Abigail Pain
  • Adam Fortuna
  • Alberto Gallego
  • Alex Wlchan
  • Answer.AI
  • Arne Bahlo
  • Ben Carlson
  • Ben Kuhn
  • Bert Hubert
  • Bits about Money
  • Brian Krebs
  • ByteByteGo
  • Chip Huyen
  • Chips and Cheese
  • Christopher Butler
  • Colin Percival
  • Cool Infographics
  • Dan Sinker
  • David Walsh
  • Dmitry Dolzhenko
  • Dustin Curtis
  • Elad Gil
  • Ellie Huxtable
  • Ethan Marcotte
  • Exponential View
  • FAIL Blog
  • Founder Weekly
  • Geoffrey Huntley
  • Geoffrey Litt
  • Greg Mankiw
  • Henrique Dias
  • Hypercritical
  • IEEE Spectrum
  • Investment Talk
  • Jaz
  • Jeff Geerling
  • Jonas Hietala
  • Josh Comeau
  • Lenny Rachitsky
  • Liz Danzico
  • Lou Plummer
  • Luke Wroblewski
  • Matt Baer
  • Matt Stoller
  • Matthias Endler
  • Mert Bulan
  • Mostly metrics
  • News Letter
  • NextDraft
  • Non_Interactive
  • Not Boring
  • One Useful Thing
  • Phil Eaton
  • Product Market Fit
  • Readwise
  • ReedyBear
  • Robert Heaton
  • Ruben Schade
  • Sage Economics
  • Sam Altman
  • Sam Rose
  • selfh.st
  • Shtetl-Optimized
  • Simon schreibt
  • Slashdot
  • Small Good Things
  • Taylor Troesh
  • Telegram Blog
  • The Macro Compass
  • The Pomp Letter
  • thesephist
  • Thinking Deep & Wide
  • Tim Kellogg
  • Understanding AI
  • 英文媒体
  • 英文推特
  • 英文独立博客
©2025 搞英语 → 看世界 | Design: Newspaperly WordPress Theme