Linux: 输入和输出的重定向

2023-09-30  本文已影响0人  LET149

对shell中的输入和输出进行重新定向

1. 标准输入和输出

所谓标准输入和输出就是指shell中默认的输入和输出方向

名称 标准输入 标准输出 标准错误输出
方向 从键盘鼠标输入 输出到屏幕 输出到屏幕
文件描述符 0 1 2

以下是标准错误输出的一个示例

(base) [zhiyong@malab Learn]$ ll uu  #uu这个文件是不存在于当前目录下的
ls: cannot access uu: No such file or directory   #系统的报错信息

除了用户想要输出的内容以外的所有输出,包括各种报错和提示,都属于错误输出

2. 重定向输出
  • 语法
    cat file_name [文件描述符]> 目的文件名
    cat file_name [文件描述符]>> 目的文件名
  • 当目的文件名代表的文件存在时,新内容会被写入此文件;当目的文件名代表的文件不存在时,此文件会被创建并被写入新内容
  • 文件描述符:1代表输出,2代表错误输出,不写则默认为1
  • >表示覆盖原有内容;>>表示追加输入,即将新内容添加到原有内容的后面
  • 文件描述符和重定向符号之间不能有空格
  • 同时将标准输出和标准错误输出重定向
    cat uu > aa 2>> bb
  • 查看一个文件,把标准输出重定向到aa这个文件中,把标准错误输出重定向到bb这个文件中
  • 标准输出与标准错误输出之间的重定向
    cat uu 1>&2 将标准输出重定向给标准错误输出
    cat uu 2>&1 将标准错误输出重定向给标准输出
3. 特殊文件
  • Linux中的 /dev/null 是一个特殊的文件,类似一个黑洞,无论向这个文件中写入多少内容,最后都会消失
  • 如果想让输出的内容从这台计算机上消失,则把这些输出的内容重定向到 /dev/null 这个文件中
4. 重定向输入
  • 标准输入是指从键盘和鼠标进行输入,这是一种交互式输入,如果在脚本中需要非交互式的方式进行输入,则需要进行输入的重定向
4.1 输入重定向为文件
(base) [zhiyong@malab Learn]$ cat pp  #构建一个文件
abcde
12345
qwert
45678

(base) [zhiyong@malab Learn]$ cat < pp  #最简单的输入重定向,把pp重定向输入给cat命令
abcde
12345
qwert
45678

(base) [zhiyong@malab Learn]$ cat > bb <pp  #将pp重定向输入给cat命令,cat命令的输出重定向给bb

(base) [zhiyong@malab Learn]$ ll
total 12
-rw-rw-r--. 1 zhiyong zhiyong  24 12月  6 11:55 bb  #目录中新增加bb这个文件
-rwxr--r--. 1 zhiyong zhiyong 196 12月  6 09:24 kk.sh
-rw-rw-r--. 1 zhiyong zhiyong  24 12月  6 11:54 pp

(base) [zhiyong@malab Learn]$ cat bb  #对bb的内容进行查看,发现其内容和pp相同,运算正确
abcde
12345
qwert
45678
4.2 输入重定向为非文件
(base) [zhiyong@malab Learn]$ cat  pp.sh 
#! /bin/bash

cat > bb <<EOF  #用<<进行份非文件的输入重定向,以一个大写字符串开始,最后以相同的大写字符字符串结束,这两个大写字母字符串不会被当成是输入的一部分
asd
asdd
ggh
EOF   #大写字符字符串可任选,推荐EOF

(base) [zhiyong@malab Learn]$ ll
total 16
-rw-rw-r--. 1 zhiyong zhiyong  13 12月  6 12:10 bb
-rwxr--r--. 1 zhiyong zhiyong 196 12月  6 09:24 kk.sh
-rw-rw-r--. 1 zhiyong zhiyong  24 12月  6 11:54 pp
-rw-rw-r--. 1 zhiyong zhiyong  46 12月  6 12:09 pp.sh

(base) [zhiyong@malab Learn]$ cat bb 
asd
asdd
ggh
  • 在输入重定向时,重定向操作之前不能有管道操作
  • 当重定向操作之间有两个或以上的操作是,重定向操作均是针对第一个命令进行的
  • 如果需要进行管道操作,管道操作可以放在重定向操作之后
上一篇 下一篇

猜你喜欢

热点阅读