Bash编程010——输入输出重定向

Bash编程010——输入输出重定向

输入输出是任何一种编程环境中最基本的功能。我们在本节将会讨论Linux系统中输入输出的基本概念,然后介绍输入输出的重定向功能。

10.1 Linux输入输出基本概念

在任何一种操作系统中,程序开始读写一个文件的内容前,必须首先在程序和文件之间建立联系或者通信通道,这一过程称为打开文件。Linux系统中有两种机制用户描述程序与文件的这种连接:文件描述字和流。相应地,系统中关于I/O的操作也分为两大类。

文件描述字表示为int类型的对象,而流表示为指向FILE结构体的指针。

最常见到的文件描述符是 stdin, stdoutstderr,文件描述符的数字分别是0,1和2。

ls -l /dev/std*
# 输出:
lrwxrwxrwx 1 root root 15 1月   1 16:52 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 1月   1 16:52 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 1月   1 16:52 /dev/stdout -> /proc/self/fd/1

10.2 输入输出重定向

默认执行命令的输入是从标准输入读取,正确结果是输出到标准输出,错误输出到标准错误的。

我们可以通过>、>>、<、<<来重定向标准输入和标准输入到文件。

# 命令格式
command > filename # 重定向标准输出到文件filename,会清空原有文件内容
command >> filename # 重定向标准输出到文件filename,输出结果附加到原文件内容最后
command < filename # 重定向文件filename为标准输入
# 示例
cd ~
ls > ls.txt
cat ls.txt
# 输出结果:
Codes
Desktop
Documents
Downloads
fault.c
ls.txt
Music
Pictures
Public
snap
Templates
test.c
Video

# 示例
cd ~
ls / > ls.txt
cat ls.txt
# 结果:原有内容被清空
bin
boot
cdrom
dev
etc
home
initrd.img
initrd.img.old
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
snap
srv
sys
tmp
usr
var
vmlinuz
vmlinuz.old

# 示例:
cd ~
ls >> ls.txt
cat ls.txt
# 输出:未清空原有内容
bin
boot
cdrom
dev
etc
home
initrd.img
initrd.img.old
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
snap
srv
sys
tmp
usr
var
vmlinuz
vmlinuz.old
Codes
Desktop
Documents
Downloads
fault.c
ls.txt
Music
Pictures
Public
snap
Templates
test.c
Video

还可以将某个文件描述符重定向

# 格式
command fd > filename

比如讲标准错误输出重定向到某个文件

# 示例
rm a.txt # 确保当前目录下无a.txt这个文件
rm a.txt 2> error.txt
cat error.txt
# 结果: rm: 无法删除'a.txt': 没有那个文件或目录

你可能感兴趣的:(Bash编程010——输入输出重定向)