Bash Shell查找并运行命令

Bash Shell查找并运行命令,你需要在 bash 下查找并运行特定的命令。

解决方案

可以试试 type、which、apropos、locate、slocate、find 和 ls 命令。

讨论

bash 会在环境变量 PATH 中保留一个用于查找命令的目录列表。内建命令 type 会在环境(包括别名、关键字、函数、内建命令、$PATH 中的目录以及命令散列表)中搜索匹配其参数的可执行文件并显示匹配结果的类型和位置。该命令有多个选项,其中值得注意的是 -a,它会打印出所有的匹配结果,而不是只找出第一个匹配。which 命令与 type 类似,但它只搜索$PATH(以及 csh 别名)。在不同的系统中,which 的形式各异(通常在 BSD 中是一个 csh 脚本,但在 Linux 中是一个二进制文件),不过一般有 -a 选项。如果已知命令名,想知道其确切位置或想看看其是否存在于系统中,可以借助这两个命令。例如:

$ type which
which is hashed (/usr/bin/which)
$ type ls
ls is aliased to `ls -F -h'
$ type -a ls
ls is aliased to `ls -F -h'
ls is /bin/ls
$ which which
/usr/bin/which

几乎所有的命令都自带某种形式的用法帮助。通常采用的是称为手册页(manpage)的在线文档,其中 man 是 manual(手册)的简写。可以使用 man 命令访问这些手册页,man ls 会显示 ls 命令的相关文档。很多程序还有内建的帮助机制,通过 -h 或 –help 这样的“帮助”选项就能使用。尤其是在其他操作系统中的一些程序,如果不提供命令参数,就会直接显示帮助信息。部分 Unix 命令也会这么做,不过大多数没有这种功能。这是因为 Unix 命令还要组合起来形成管道,后面我们会讲到。但如果你不知道或忘记了命令名,该怎么办呢?apropos 命令可以根据所提供的正则表达式参数搜索手册页名称及描述。在你忘记所需要的命令名时,该命令尤其管用。它和 man -k 的效果一样:

$ apropos music
cms (4) - Creative Music System device driver
$ man -k music
cms (4) - Creative Music System device driver

locate 和 slocate 通过查询系统数据库文件(通常由调度程序 cron 运行的作业负责编译和更新)来查找文件或命令,几乎立刻就能得到结果。实际数据库文件的位置、索引内容、检查频率都因系统而异。具体细节可以查阅系统的手册页。slocate(secure locate)存储了权限信息(除文件名和路径之外),以免列出用户没有权限访问的程序。在多数 Linux 系统中,locate 是指向 slocate 的符号链接;在其他系统中,两者可能是不同的程序,也可能根本就没有 slocate。以下就是一个示例:

$ locate apropos
/usr/bin/apropos
/usr/share/man/de/man1/apropos.1.gz
/usr/share/man/es/man1/apropos.1.gz
/usr/share/man/it/man1/apropos.1.gz
/usr/share/man/ja/man1/apropos.1.gz
/usr/share/man/man1/apropos.1.gz

最后同样重要的是 ls 命令。记住,如果你想要执行的命令位于当前目录,则必须在命令前加上./,这是出于安全方面的考虑,因为当前目录通常并不在 $PATH 中。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!