我正在尝试将多个目录添加到我的路径中,以便该目录中的文件及其子目录可以在命令提示符下跨会话使用。
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
到我export PATH
的{{1}}行并获取它并没有帮助。我究竟做错了什么?当我尝试访问说.bashrc
的文件时,我不能。
我在这里读了几篇文章,但他们根本没有帮助。我错过了冒号,分号,美元符号吗?
答案 0 :(得分:3)
听起来你可能误解了$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
对子目录无用。如果可执行文件名包含$PATH
,Bash将永远不会搜索/
。例如,这个命令:
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为你找到它。 (但是,如果不同子目录中的文件之间没有名称冲突,这只能正常工作。)
答案 1 :(得分:1)
您可以在.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