【问题标题】:Adding to path so that file is available everywhere - bash添加到路径以便文件在任何地方都可用 - bash
【发布时间】:2025-11-22 06:20:03
【问题描述】:

我正在尝试将几个目录添加到我的路径中,以便该目录及其子目录中的文件可以从命令提示符跨会话访问。

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/username/OpenFOAM/OpenFOAM-2.1.0/etc/bashrc:/usr/share/texmf-texlive/tex/latex:/etc/crontab:/home/username/Research/Dissertation/wigner/ic/L=lambda:/home/username/Research/Dissertation/wigner/ic/L=2lambda:/home/username/Research/Dissertation/wigner/ic/L=3lambda:/home/username/Research/Dissertation/wigner/ic

添加以下内容

 /home/username/Research/Dissertation/wigner/ic/L=lambda:/home/username/Research/Dissertation/wigner/ic/L=2lambda:/home/username/Research/Dissertation/wigner/ic/L=3lambda:/home/username/Research/Dissertation/wigner/ic

到我的.bashrcexport PATH 行并采购它并没有帮助。我究竟做错了什么?当我尝试从 /home/username/Research/Dissertation/wigner/ic 访问文件时,我不能。

我在这里阅读了一些帖子,但它们根本没有帮助。我是否缺少冒号、分号、美元符号?

【问题讨论】:

  • 您尝试调用的文件是否可由用户执行?
  • @choroba 不,我正在尝试使用montage 将图片连接在一起(eps、png 等)以并排比较它们。麻烦的是,这些图片在不同的目录下……
  • 这不是 $PATH(或其他任何东西)可以改变的。
  • @choroba 所以基本上我被压裂了?
  • 所有这些文件会有不同的名称吗?

标签: bash unix path terminal ubuntu-11.10


【解决方案1】:

听起来您可能误解了$PATH 的用途。 $PATH 只是告诉 Bash 在哪里寻找可执行文件和脚本。比如这个命令:

foo bar.txt

将(通常)在$PATH 中搜索名为foo 的可执行文件,并使用以下命令:

bash foo.sh
. foo.sh

将(通常)在$PATH 中搜索foo.sh,除非当前目录中有foo.sh;但是这些命令:

cat foo.txt
vi foo.txt
less foo.txt

不会$PATH 中搜索foo.txt

此外,您写的是“该目录中的文件及其子目录”,但 $PATH 对子目录没有用处。如果可执行文件名包含/,Bash 将永远不会搜索$PATH。比如这个命令:

foo/bar baz.txt

将运行./foo/bar,并且不会$PATH 中搜索名为foo 的目录。


编辑添加:那么,你可以做些什么呢。 . .

最终,您需要在montage 命令中包含目录信息:

cd /home/username/Research/Dissertation/wigner/ic
montage -geometry +4+4 L=3lambda/three.jpg L=2lambda/two.png output.jpg

如果每次都输入目录信息太麻烦,可以在.bashrc中设置自己的变量,然后显式使用。例如,.bashrc 可能有:

export IC=/home/username/Research/Dissertation/wigner/ic
export ICL=$IC/L=lambda
export ICL2=$IC/L=lambda2
export ICL3=$IC/L=lambda3

然后你可以写:

montage -geometry +4+4 $ICL3/three.jpg $ICL2/two.png output.jpg

如果您甚至不想记住给定文件所在的子目录,则可以使用 fileglob:

export IC=/home/username/Research/Dissertation/wigner/ic
export ICLs=$IC/L=lambda*

然后写:

montage -geometry +4+4 $ICLs/three.jpg $ICLs/two.png output.jpg

让 shell 为你找到它。 (当然,这只有在不同子目录中的文件之间没有名称冲突的情况下才能正常工作。)

【讨论】:

  • 好的...所以添加到路径对我没有帮助...我该怎么办?我正在尝试使用蒙太奇将图片连接在一起(eps、png 等)以并排比较它们。麻烦的是,这些图片在不同的目录下……
  • 哦,废话,我实际上这样做是为了将我到dissertation 的路径保存在一个名为 $dissertation 的变量中!谢谢,我确信这会奏效。
【解决方案2】:

您可以在 .bashrc 中定义一些变量:

H="/home/username/Research/Dissertation/wigner/ic"    
oneLam="$H/L=lambda"
twoLam="$H/L=2lambda"
threeLam="$H/L=3lambda"

这样就可以像这样从任何地方引用文件:

user@box:/some/horrendously/deep/path/$ vi $twoLam/some_file.txt

【讨论】:

    最近更新 更多