shell 的here document 用法、输入/输出重定向
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。
什么是Here Document
Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下
cmd << delimiter
Here Document Content
delimiter
它的作用就是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数。
比如在终端中输入cat << EOF
,系统会提示继续进行输入,输入多行信息再输入EOF,中间输入的信息将会显示在屏幕上。如下:
fish@mangos:~$ cat << EOF
> First Line
> Second Line
> Third Line EOF
> EOF
First Line
Second Line
Third Line EOF
注: >
这个符号是终端产生的提示输入信息的标识符
这里要注意几点
- EOF 只是一个标识而已,可以替换成任意的合法字符
- 作为结尾的delimiter一定要顶格写,前面不能有任何字符
- 作为结尾的delimiter后面也不能有任何的字符(包括空格)
- 作为起始的delimiter前后的空格会被省略掉
Here Document 不仅可以在终端上使用,在shell 文件中也可以使用,例如下面的here.sh 文件
cat << EOF > output.sh
echo "hello"
echo "world"
EOF
使用 sh here.sh
运行这个脚本文件,会得到output.sh 这个新文件,里面的内容如下
echo "hello"
echo "world"
实例
在命令行中通过 wc -l 命令计算 Here Document 的行数:
$ wc -l << EOF欢迎来到菜鸟教程www.runoob.com
EOF
3 # 输出结果为 3 行
$
-l << EOF欢迎来到菜鸟教程www.runoob.com
EOF
3 # 输出结果为 3 行
$
我们也可以将 Here Document 用在脚本中,例如:
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.comcat << EOF
欢迎来到
菜鸟教程
www.runoob.com
EOF
# author:菜鸟教程
# url:www.runoob.comcat << EOF
欢迎来到
菜鸟教程
www.runoob.com
EOF
执行以上脚本,输出结果:
欢迎来到
菜鸟教程
www.runoob.com
菜鸟教程
www.runoob.com
/dev/null 文件
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:
$ command > /dev/null
> /dev/null
/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。
如果希望屏蔽 stdout 和 stderr,可以这样写:
$ command > /dev/null 2>&1
> /dev/null 2>&1
注意:0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
Here Document的变形
delimiter 与变量
在Here Document 的内容中,不仅可以包括普通的字符,还可以在里面使用变量,例如将上面的here.sh 改为
cat << EOF > output.sh
echo "This is output"
echo $1
EOF
使用sh here.sh HereDocument
运行脚本得到output.sh的内容
echo "This is output"
echo HereDocument
在这里 $1
被展开成为了脚本的参数 HereDocument
但是有时候不想展开这个变量怎么办呢,可以通过在起始的 delimiter的前后添加 "
来实现,例如将上面的here.sh 改为
cat << "EOF" > output.sh #注意引号
echo "This is output"
echo $1
EOF
得到的output.sh 的内容为
echo "This is output"
echo $1
« 变为 «-
Here Document 还有一个用法就是将 '«' 变为 '«-'。 使用 <<-
的唯一变化就是Here Document 的内容部分每行前面的 tab (制表符)将会被删除掉,这种用法是为了编写Here Document的时候可以将内容部分进行缩进,方便阅读代码。
shell 的here document 用法、输入/输出重定向相关推荐
- Shell——输入/输出重定向
Shell 输入/输出重定向 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令 ...
- [linux] shell 输入/输出重定向 、 文件包含
Shell 输入/输出重定向 大多数 UNIX 系统命令从终端接受输入并将所产生的输出发送回到终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是自己的终端.同样,一个命令通常将 ...
- Linux之shell编程篇-----Shell 函数和Shell 输入/输出重定向
最近发现了一个挺厉害的人工智能学习网站,内容通俗易懂,风趣幽默,感兴趣的可以点击此链接进行查看:床长人工智能教程 废话不多说,请看正文! Shell 函数 1. 自定义函数 linux she ...
- linux here用法,linux shell的here document用法(cat EOF)
什么是Here Document? Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下 cmd << delimiter Here Doc ...
- Shell 输入/输出重定向
概述 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端. 一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端. 同样,一个命令通常将其输出写入到标 ...
- Shell中的数据重定向--输入/输出重定向
在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读 ...
- 15-shell 输入/输出重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端. 一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端. 同样,一个命令通常将其输出写入到标准输出,默 ...
- linux shell的here document用法(cat EOF)
什么是Here Document? Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下 cmd << delimiter Here D ...
- Linux:输入/输出重定向
文章目录 1 输入重定向 2 输出重定向 3 标准错误文件重定向 4. Here Document 5 /dev/null 文件 6. 追加重定向 一个命令通常从一个叫标准输入的地方读取输入,默认情况 ...
最新文章
- mybatis常用标签和动态查询
- font-family字体总结
- linux命令怎么打开优盘,Linux下U盘使用具体步骤
- 最佳调度问题pascal程序
- python中tkinter的使用-下
- 2 使用_索尼黑卡RX100M6的使用指南2
- 机器学习基石--学习笔记02--Hard Dual SVM
- tcp并发服务器_在Go中构建并发TCP服务器
- ajax jinja,在向Flask发出jQuery AJAX请求后渲染Jinja
- javascript监听输入框_html通过JS/jQuery实现 实时监听输入框input的内容
- 一、虚拟机,CentOS安装教程,Linux文件系统结构,Linux文件命名规则
- 重装系统四种方法(CGI还原,NTSetup安装,GHOST还原,手动GHOST)的区别
- Send函数和Recv函数解析
- python学习第二天——编写名片
- pm9screw php,PHP使用Screw把源代码加密
- 怎样推导圆面积计算公式?
- nginx php fastcgi curl locahost 48 timeout
- 居于canvas的原生js抽奖小程序
- The types of the interface org.apache.flink.util.OutputTag could not be inferred.
- Python操控微信,实现微信机器人
热门文章
- 【LeetCode - 32】最长有效括号
- 【HDU - 5876】Sparse Graph(补图bfs,STLset)
- linux串口写入命令失败,linux – 从串口读取失败
- java日志级别的作用_Java系统日志级别对性能的影响性
- 腾讯云COS对象存储图片文件API的详细步骤过程
- 遍历这些字符串,如果字符串没有包含数字的, * 就将字符串中的小写字母转成大写字母并打印字符串
- php curl 数据采集 空,PHP curl从网站返回空数组的数据
- linux安装下载中文包,linux下安装中文包和字体
- leetcode124. 二叉树中的最大路径和
- redis——旧版复制