在Linux shell中,可以通过输入/输出重定向的方式将标准输入stdin、标准输出stdout、标准错误输出stderr重定向到文件。下表总结了常用符号:
| 符号 | 释义 |
|---|---|
| 0 | 标准输入 |
| 1 | 标准输出 |
| 2 | 标准错误输出 |
| < | 输入重定向 |
| > | 输出重定向 |
| << | 输入追加重定向 |
| >> | 输出追加重定向 |
| <<< | 输入重定向到字符串(仅限bash) |
| >>> | 输出重定向到字符串(仅限bash) |
| & | 合并 |
介绍两个常用的命令
command > 1.log 2>&1
该命令把command的标准输出和标准错误输出同时写到文件1.log中.
其中"2>&1"的"2"表示标准错误输出,"&"表示合并,"1"表示标准输出.
command >> 1.log 2>&1
该命令把command的标准输出和标准错误输出以追加方式同时写到文件1.log中.
注意仍然是"2>&1"而不是"2>>&1".
举个例子,在shell中执行
echo da_kao_la
# da_kao_la
会直接在命令行输出.
如果将输出重定向到文件1.log
echo da_kao_la > 1.log
则此时命令行没有输出,输出的内容跑到了1.log中
cat 1.log
# da_kao_la
追加方式与非追加方式的区别是,再次执行非追加的重定向
echo da_kao_la > 1.log
新的输出会覆盖老的输出,1.log中只有一行"da_kao_la",而如果再次执行的是追加的重定向
echo da_kao_la >> 1.log
则1.log中会有两行"da_kao_la",新的内容不会覆盖老的内容
cat 1.log
# da_kao_la
# da_kao_la
尝试一下合并标准输出和标准错误输出到同一个文件
ls not_found.php > 1.log 2>&1 # not_found.php文件不存在
cat 1.log # 标准输出为空,只有标准错误输出
# ls: cannot access not_found.php: No such file or directory
最后看一个输入重定向到字符串的例子,编写bash脚本"1.sh",从字符串按行读入,合并成一行输出
while read line
do
echo $line
done <<< "aaa\nbbb\nccc\n"
命令行执行
bash 1.sh
命令行输出
aaanbbbncccn
输入/输出重定向可以重定向到变量,例如
multiline="aaa\nbbb\nccc\n"
while read line
do
echo $line
done <<< $multiline
这个脚本的功能与上面一个脚本相同。

本文介绍了Linux shell中的输入/输出重定向,包括如何将标准输入、输出和错误输出重定向到文件。重点讲解了命令`command > 1.log 2>&1`和`command >> 1.log 2>&1`的区别,前者用于覆盖输出,后者用于追加。还通过实例演示了如何合并标准输出和错误输出,并展示了输入重定向到字符串的用法。

1273

被折叠的 条评论
为什么被折叠?



