shell 输入/输出重定向 | 菜鸟教程


本站和网页 https://www.runoob.com/linux/linux-shell-io-redirections.html 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Shell 输入/输出重定向 | 菜鸟教程
菜鸟教程 -- 学的不仅是技术,更是梦想!
首页 HTML CSS JavaScript Vue Bootstrap NodeJS Python3 Python2 Java C C++ C# Go SQL Linux jQuery 本地书签 我的圈子 登录 --> JS Search Python3 教程 Python2 教程 Vue3 教程 vue2 教程
Bootstrap3 教程
Bootstrap4 教程
Bootstrap5 教程
Bootstrap2 教程
Linux 教程
Linux 简介
Linux 安装
Linux 云服务器
Linux 系统启动过程
Linux 系统目录结构
Linux 忘记密码解决方法
Linux 远程登录
Linux 文件基本属性
Linux 文件与目录管理
Linux 用户和用户组管理
Linux 磁盘管理
Linux vi/vim
linux yum 命令
Linux apt 命令
Shell
教程
Shell 教程
Shell 变量
Shell 传递参数
Shell 数组
Shell 运算符
Shell echo命令
Shell printf命令
Shell test 命令
Shell 流程控制
Shell 函数
Shell 输入/输出重定向
Shell 文件包含
参考手册
Linux 命令大全
Nginx 安装配置
MySQL 安装配置
Shell printf 命令
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。
重定向命令列表如下:
命令
说明
command > file
将输出重定向到 file。
command < file
将输入重定向到 file。
command >> file
将输出以追加的方式重定向到 file。
n > file
将文件描述符为 n 的文件重定向到 file。
n >> file
将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m
将输出文件 m 和 n 合并。
n <& m
将输入文件 m 和 n 合并。
<< tag
将开始标记 tag 和结束标记 tag 之间的内容作为输入。
需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
输出重定向
重定向一般通过在命令间插入特定的符号来实现。特别的,这些符号的语法如下所示:
command1 > file1
上面这个命令执行command1然后将输出的内容存入file1。
注意任何file1内的已经存在的内容将被新内容替代。如果要将新内容添加在文件末尾,请使用>>操作符。
实例
执行下面的 who 命令,它将命令的完整的输出重定向在用户文件中(users):
$ who > users
执行后,并没有在终端输出信息,这是因为输出已被从默认的标准输出设备(终端)重定向到指定的文件。
你可以使用 cat 命令查看文件内容:
$ cat users
_mbsetupuser console
Oct 31 17:35
tianqixin
console
ttys000
Dec
1 11:33
输出重定向会覆盖文件内容,请看下面的例子:
$ echo "菜鸟教程:www.runoob.com" > users
菜鸟教程:www.runoob.com
如果不希望文件内容被覆盖,可以使用 >> 追加到文件末尾,例如:
$ echo "菜鸟教程:www.runoob.com" >> users
输入重定向
和输出重定向一样,Unix 命令也可以从文件获取输入,语法为:
command1 < file1
这样,本来需要从键盘获取输入的命令会转移到文件读取内容。
注意:输出重定向是大于号(>),输入重定向是小于号(<)。
接着以上实例,我们需要统计 users 文件的行数,执行以下命令:
$ wc -l users
2 users
也可以将输入重定向到 users 文件:
wc -l < users
注意:上面两个例子的结果不同:第一个例子,会输出文件名;第二个不会,因为它仅仅知道从标准输入读取内容。
command1 < infile > outfile
同时替换输入和输出,执行command1,从文件infile读取内容,然后将输出写入到outfile中。
重定向深入讲解
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。
如果希望 stderr 重定向到 file,可以这样写:
$ command 2>file
如果希望 stderr 追加到 file 文件末尾,可以这样写:
$ command 2>>file
表示标准错误文件(stderr)。
如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:
$ command > file 2>&1
或者
$ command >> file 2>&1
如果希望对 stdin 和 stdout 都重定向,可以这样写:
$ command < file1 >file2
command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。
Here Document
Here Document 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。
它的基本的形式如下:
command << delimiter
document
delimiter
它的作用是将两个 delimiter 之间的内容(document) 作为输入传递给 command。
注意:
结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进。
开始的delimiter前后的空格会被忽略掉。
在命令行中通过
wc -l
命令计算 Here Document 的行数:
$ wc -l << EOF
欢迎来到
菜鸟教程
www.runoob.com
EOF
# 输出结果为 3 行
我们也可以将 Here Document 用在脚本中,例如:
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com
cat << EOF
执行以上脚本,输出结果:
/dev/null 文件
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:
$ command > /dev/null
/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。
如果希望屏蔽 stdout 和 stderr,可以这样写:
$ command > /dev/null 2>&1
0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
这里的
>
之间不可以有空格,
2>
是一体的时候才表示错误输出。
篇笔记
写笔记
#0
   hello world
  h64***q.com
  参考地址
118
&
没有固定的意思
放在
后面的
,表示重定向的目标不是一个
文件
,而是一个
文件描述符
,内置的文件描述符如下
1 => stdout
2 => stderr
0 => stdin
换言之
2>1
代表将
stderr
重定向到当前路径下文件名为
regular file
中,而
2>&1
重定向到
的文件(即
/dev/stdout
)中,这个文件就是
stdout
file system
中的映射
&>file
是一种特殊的用法,也可以写成
>&file
,二者的意思完全相同,都等价于
>file 2>&1
此处
&>
>&
视作整体,分开没有单独的含义
顺序问题:
find /etc -name .bashrc > list 2>&1
# 我想问为什么不能调下顺序,比如这样
find /etc -name .bashrc 2>&1 > list
这个是从左到右有顺序的
第一种
xxx > list 2>&1
先将要输出到
的内容重定向到文件,此时文件
list
就是这个程序的
,再将
,也就是文件
第二种
xxx 2>&1 > list
的内容重定向到
,此时会产生一个
stdout的拷贝
,作为程序的
,而程序原本要输出到
的内容,依然是对接在
stdout原身
上的,因此第二步重定向
,对
不产生任何影响
hello world
7年前 (2017-08-15)
   Jinke2017
  hjk***jddbd@qq.com
51
对于上面 '2>&1',举个例子,比如说:
$ find /etc -names "*.txt"
>list 2>&1
从左往右执行,执行到 >list,此时的 stdout 为 list;而执行到 2>&1,表示 stderr 重定向到 stdout,这里也就是 list 文件。
因为
[ find /etc -names "*.txt" ]
这条命令是错误的( -names 应该是 -name)。
本来要输出到终端屏幕的错误信息:
find: unknown predicate `-names`
被重定向到了 stdout 也就是 list 文件中,所以屏幕不会出现错误信息,而是打印到了 list 文件中。
cat list
可以查看到 find: unknown predicate `-names'
就在里面。
Jinke2017
6年前 (2018-09-21)
   闪亮的马路
  152***71596@126.com
31
直接在 FreeBSD 或者 csh 中使用
command > file 2>&1
时候会得到这个错误:
Ambiguous output redirect
出错的原因在于 FreeBSD 默认使用 csh,在 csh 中如果想把标准输出和错误输出同时重定向到一个文件,需要用下面命令
command >& file
闪亮的马路
5年前 (2018-11-26)
点我分享笔记
笔记需要是本篇文章的内容扩展!
文章投稿,可点击这里
注册邀请码获取方式
分享笔记前必须
取消
分享笔记
昵称
昵称 (必填)
邮箱
邮箱 (必填)
引用地址
分类导航
HTML / CSS
HTML 教程
HTML5 教程
CSS 教程
CSS3 教程
Font Awesome 教程
Foundation 教程
JavaScript 教程
HTML DOM 教程
jQuery 教程
AngularJS 教程
AngularJS2 教程
Vue.js 教程
React 教程
TypeScript 教程
jQuery UI 教程
jQuery EasyUI 教程
Node.js 教程
AJAX 教程
JSON 教程
Echarts 教程
Chart.js 教程
Highcharts 教程
Google 地图 教程
服务端
Python 教程
Python2.x 教程
Docker 教程
Ruby 教程
Java 教程
C 教程
C++ 教程
Perl 教程
Servlet 教程
JSP 教程
Lua 教程
Rust 教程
Scala 教程
Go 教程
PHP 教程
数据结构与算法
Django 教程
FastAPI 教程
Zookeeper 教程
设计模式
正则表达式
Maven 教程
Verilog 教程
ASP 教程
AppML 教程
VBScript 教程
数据库
SQL 教程
MySQL 教程
PostgreSQL 教程
SQLite 教程
MongoDB 教程
Redis 教程
Memcached 教程
数据分析
NumPy 教程
Pandas 教程
Matplotlib 教程
Scipy 教程
R 教程
Julia 教程
移动端
Android 教程
Swift 教程
jQuery Mobile 教程
ionic 教程
Kotlin 教程
XML 教程
DTD 教程
XML DOM 教程
XSLT 教程
XPath 教程
XQuery 教程
XLink 教程
XPointer 教程
XML Schema 教程
XSL-FO 教程
SVG 教程
ASP.NET
ASP.NET 教程
C# 教程
Web Pages 教程
Razor 教程
MVC 教程
Web Forms 教程
Web Service
Web Service 教程
WSDL 教程
SOAP 教程
RSS 教程
RDF 教程
开发工具
Eclipse 教程
Git 教程
Svn 教程
Markdown 教程
网站建设
HTTP 教程
网站建设指南
浏览器信息
网站主机教程
TCP/IP 教程
W3C 教程
网站品质
Advertisement
反馈/建议
在线实例
·
HTML 实例
CSS 实例
JavaScript 实例
Ajax 实例
jQuery 实例
XML 实例
Java 实例
字符集&工具
HTML 字符集设置
HTML ASCII 字符集
JS 混淆/加密
PNG/JPEG 图片压缩
HTML 拾色器
JSON 格式化工具
随机数生成器
最新更新
SVG VScode
HTML AI 编程助手
C++ vector 容器
免费开源,无需 ...
C VScode
JavaScript VScode
Java AI 编程助手
站点信息
意见反馈
免责声明
关于我们
文章归档
关注微信
Copyright © 2013-2024
 
runoob.com
All Rights Reserved. 备案号:
闽ICP备15012807号-1
微信关注