而且,bash 无法将输出重定向到多个目标。例如,您可从 bash 命令行中输入指令 bighairyscript > ~/log | mail -s "Important stuff" team。
但在相对较新的 shell 如 Z shell(zsh;请参阅参考资料)中,可以在同一命令行内处理多个输入和输出。例如,使用以下命令可将 stdout 保存到名为 log 的文件中并通过电子邮件发送给您自己:
清单 6. Z shell
zsh% bash < tellme > log | mail -s "Who you are" 'whoami'
bash: line 4: systemname: command not found
zsh% <log
Your current login, working Directory, and system are...
strike
/home/strike
(短语 “whoami运行命令 whoami 并将该命令的结果插入到短语所在位置。它类似于在运行命令行的其他部分之前先运行一条短小 shell 命令。)
现在我们对上一条命令从左向右进行分析。bash 命令创建文件 log 并将在 tellme 文件中找到的命令的 stdout 发送给您自己。由于 stderr 没有通过 > 或管道进行定向,因此错误消息将被打印到 stdout。命令 <log 为另一个 Z shell 快捷方式,它与 cat 相同。(因此,命令 > file 等同于 cat > file。)
Z shell 还可处理多个输入重定向。Z shell 命令行 cat < file1 < file2 < file3 等同于 cat file1 file2 file3。显然,原有语法较后者更加繁琐,总的来说,多个 stdout 重定向要更加常用的多。但是,如果您要运行的实用工具不接受多个输入参数,则可使用 Z shell 的多个输入重定向。
Z shell 中还具有其他新特性,包括更好的 globbing(通配符匹配)、先进的模式匹配和扩展的命令自动完成系统,从而减少您在命令行中的字符输入。本系列中的后续两篇文章将进一步探讨 Z shell。
标签: