Shell 元字符
Shell 元字符是特定的字符,通常是符号,在 Shell 中具有特殊含义。
bash 支持的元字符如下所示:
- | : 将命令的输出发送到左侧作为符号右侧命令的输入
- & :在后台运行进程,允许我们继续在命令行上工作
- ; : 允许我们在一行中列出多个命令,以该字符分隔
- () :将命令分组并将其输出发送到同一位置
- < :从该符号右侧列出的文件中获取左侧命令的输入
: 将左边命令的输出发送到这个符号右边命名的文件中
- 空格 tab键
注意:创建文件名和目录名时不要使用这些元字符。这些字符在 shell 中具有特殊意义。
重定向元字符
命令重定向由以下 shell 元字符启用: - 标准输入的重定向 (<)
- 标准输出的重定向 (>)
- 标准错误的重定向 (2>)
- 管道字符 (|)
重定向标准输出
大于 (> ) 元字符将标准输出定向到文件,而不是将输出打印到屏幕。
# command > filename
或者
# command 1> filename
如果文件不存在,系统会创建它。
当我们使用单个大于 (>) 元字符时,如果文件已存在,该命令将覆盖文件的原始内容。
当我们使用两个大于号 (>>) 字符时,该命令会将输出添加到文件的原始内容。
$ command >> filename
文件描述符
每个进程都使用文件描述符。
文件描述符确定命令输入的来源以及输出和错误消息的目的地。
该表解释了文件描述符。
文件描述符编号 | 文件描述符缩写 | 定义 |
---|---|---|
0 | 标准输入 | 标准命令输入 |
1 | 标准输出 | 标准命令输出 |
2 | 标准错误 | 标准命令错误 |
重定向标准输入
小于 (< ) 元字符将文件作为标准输入处理,而不是从键盘读取输入。
# command < filename
或者
# command 0< filename
例如,使用 data.txt 文件作为 mailx 命令的输入。
# mailx -s test test@example.com < data.txt
命令重定向
默认情况下,shell 从标准输入(键盘)接收或者读取输入,并将输出和错误消息显示到标准输出(屏幕)。
输入重定向强制命令从文件而不是从键盘读取输入。
输出重定向将命令的输出发送到文件中,而不是将输出发送到屏幕。
重定向标准错误
使用文件描述符编号 (2) 和大于号 (>) 的命令会将任何标准错误消息重定向到 /dev/null 文件。
$ command 2> /dev/null
以下示例显示了重定向到 data.txt 文件的标准输出和标准错误。
$ ls /tmp 1> data.txt 2>&1
注意:语法 2>&1 指示 shell 将 stderr (2) 重定向到接收 stdout (1) 的同一文件。
管道符
管道字符将标准输出从一个命令重定向到另一个命令的标准输入。
第一个命令将输出写入标准输出,第二个命令从前一个命令读取标准输出作为标准输入。
$ command | command
例如,使用 who 命令的标准输出作为 wc -l 命令的标准输入。
$ who | wc -l 35
要查看位于 /etc 目录中的所有子目录的列表,请输入以下命令。
$ ls -F /etc | grep "/" X11/ acct/ apache/ apache2/
使用 head 命令的输出作为 'xargs ls' 命令的输入。
head -10 data.txt | xargs ls