Linux shell 输入/输出重定向

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

在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

这个脚本的功能与上面一个脚本相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值