电脑技术学习

对话 UNIX,第 13 部分: 另外十种命令行组合

dn001

$ (cd $(grep strike /etc/passwd | cut -f6 -d':'); ls)

  这个命令在密码文件中搜索用户 strike 对应的条目,提取其 home 目录(密码文件中的第 6 个字段,如果您从 0 开始数)字段,更改到这个目录,并列出其中的内容。grep /etc/passwd strike | cut -f6 -d':' 的输出将在执行任何其他操作之前进行扩展。

  下面是另一个示例,这次的用户名来自于 whoami 的结果:

(cd $(grep $(whoami) /etc/passwd | cut -f6 -d':'); ls)

  因为子 Shell 有许多用途,所以与组合或者反勾号操作符相比,您可能更喜欢使用它。

  不再输入长路径名

  有些特性,如 PATH 和 MANPATH 环境变量,可以减少输入工作量。这两个变量分别为搜索可执行文件和 man 页面定义了一系列目录。

  Shell 支持另一个搜索路径:CDPATH。顾名思义,CDPATH 列出了搜索命名目录的目录列表。让我们看看它是如何工作的。

  假设您的 home 目录中有三个目录,它们分别是 tomb、current 和 personal。tomb 目录中包含旧的工作项目;current 目录中包含当前工作的内容;而 personal 目录中包含您所感兴趣的一些文件和内容。执行 ls -R tomb current personal 命令可以得到与下面所示类似的内容:

$ ls -R tomb current personal
current:
./    ../    einstein/ herbIE/
personal:
./    ../   fishing/ novel/
tomb:
./    ../   mariner/ marvin/ voyager/

  对于这种结构,如果不使用 CDPATH,要更改到任何目录都需要记住文件夹的位置,并输入完全限定的(或者相对的)路径名:

标签: