什么是“ $ PATH”和“〜/ bin”?我如何拥有个人脚本?


29

什么$PATH

如何获得仅适用于我的命令/程序?
我已经看过~/bin前面提到的这条路径,但是它的用途是什么,如何使用它?


我正在做一些试验,因为这是比“实际问题”更多的FAQ或Wiki资料。出现提示是因为我在上一个答案(在右侧的链接侧栏中)中提到了〜/ bin,并且有人评论了如何将其添加到PATH中:现在,代替简短的评论,我们可以在〜/ bin为提到。

Answers:


26

$ PATH是用于查找命令的环境变量。〜是您的主目录,因此〜/ bin将是/ home / user / bin; 这是一个普通目录。

例如,在外壳程序中运行“ ls”时,实际上是在运行/ bin / ls程序。确切的位置可能会有所不同,具体取决于您的系统配置。发生这种情况是因为/ bin在$ PATH中。

要查看路径并找到任何特定命令的位置,请执行以下操作:

$ echo $PATH
/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:...
$ which ls     # searches $PATH for an executable named "ls"
/bin/ls
$ ls           # runs /bin/ls
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...
$ /bin/ls      # can also run directly
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...

要拥有自己的专用bin目录,只需将其添加到路径中。为此,请编辑〜/ .profile(一个隐藏文件)以包括以下几行。如果对行进行注释,则只需取消注释即可。如果他们已经在那儿,那就大功告成!

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ]; then
  PATH="$HOME/bin:$PATH"
fi

现在,您需要创建〜/ bin目录,因为.profile在登录时运行,并且仅在当时存在〜/ bin时添加,所以您需要再次登录以查看更新的PATH。

让我们测试一下:

$ ln -s $(which ls) ~/bin/my-ls   # symlink
$ which my-ls
/home/user/bin/my-ls
$ my-ls -l ~/bin/my-ls
lrwxrwxrwx 1 user user 7 2010-10-27 18:56 my-ls -> /bin/ls
$ my-ls          # lookup through $PATH
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...
$ ~/bin/my-ls    # doesn't use $PATH to lookup
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...

3
使用哪种方法时要注意的一件事是,它将仅查找文件系统中的二进制命令,而不报告外壳程序内置,别名或函数。通常,使用typeshell查看实际命令将如何使用更为有用。例如:which echo并且type echo将报告不同的内容,which返回'/ bin / echo',但是'type'返回它是shell内置的,相对于'/ bin'中的文件,shell会更喜欢。
史蒂夫·比蒂

@Steve Beattie,+ 1。which最好用交互式shell 替换typecommand在交互式shell中使用,并且在脚本中完全没有用。
geirha

我刚刚注意到的一件事- 出于某种原因,$HOME变量$PATH不起作用,即必须使用~符号代替。
Hi-Angel

19

关于~/bin和命令/程序仅对您的用户可用

最新的Ubuntu版本在~/bin目录中包含该目录$PATH,但前提是该~/bin目录存在。

如果不存在:

  1. 确保您~/.profile包含以下节(缺省值~/.profile已经包含):

    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi
    
  2. 创建~/bin目录:

    mkdir -p ~/bin
    
  3. 重新启动计算机,或强制bash重新读取~/.profile

    exec -l bash
    

感谢您的“重新启动或exec -l bash”提示。什么是-l标志吗?我在中找不到解释man exec
evanrmurphy 2013年

3
exec -l将执行bash作为登录shell [ wiki.bash-hackers.org/commands/builtin/exec]。简而言之,它迫使bash重新阅读/etc/profile~/.profile。刚运行exec bash只会重新读取~/.bashrc
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.