Linux下的输入输出重定向

时间:2023-06-08 阅读:1732 评论:0 作者:魏勇

输出重定向

cat /etc/profile可以在终端输出文件内容,如果我们想将输出的文件内容放到一个文件里,那么就需要将输出重定向这个文件,输出重定向符>可以帮我们做到这一点。

cat /etc/profile > /tmp/profile.txt将左侧的输出重定向至右侧的文件。输出重定向时会覆盖输出,即右侧文件原来的内容会被覆盖。

还有>>, 2>, &>可以进行输出重定向,与>含义略有区别,我举例说明他们的含义:

cat /etc/profile >> /tmp/profile.txt 左侧输出的内容重定向至右侧的文件,输出重定向时进行追加输出,即在右侧文件已有内容后面追加内容。

bash 1.sh 2> /tmp/1.txt 执行左侧命令的过程中,将产生的错误信息输出重定向至右侧的文件

bash 1.sh &> /tmp/1.txt 执行1.sh过程中产生的正确信息和错误信息都输出到文件

由此,可以概括一下输出重定向的基本格式:

{产生输出的命令} > {输出文件}

输出重定向符可以是>,>>,2>,&>

输入重定向

与输出重定向不同,输入重定向使用符号<,输入重定向时会将<右侧内容作为左侧的输入。

先使用read命令了解一下输入。read var在终端输入该命令后回车,可以在终端输入内容,输完内容后再次按回车结束输入。此时变量var的值就是刚才输入的内容,可以在终端执行命令echo $var显示刚才的输入。

如果我们想某个文件的内容作为输入时(假设a.txt中只有一行hello字符串),就可以使用输入重定向<,在终端执行下面的命令

read var < a.txt

然后再打印变量echo $var,可以在终端看到输出了hello。(注意:<右侧是一个文件名a.txt,不是cat a.txt)

输入重定向还可以使用<<,相比于<符号的右侧是文件名,<<符号右侧的则是一个标记内容,进行command << tag输入重定向时,遇到tag则结束输入。请看下面的示例:

# read var << abc
> xyz
> 123
> abc
# echo $var
xyz

(# 表示终端输入命令,>表示进入交互模式)

这个示例中,先在终端执行命令read var << abc(这意味着当遇到abc时结束输入),按回车后进入交互模式,此时可以输入任何内容了,从示例中我们看到了先是输入了xyz,回车然后输入了123,回车然后输入了abc,再按回车退出交互模式回到终端。(可以看到执行命令后就能一直输入了,直到输入了abc标记就结束了输入)。在终端执行echo $var命令,可以看到第一次输入的xyz作为了变量var的值。

总结一下输入重定向:

{有输入的命令} < {文件}
{有输入的命令} << {结束标记}

在linux下通常使用的结束标记是EOF,在新的一行开头按下Ctrl+D就代表了EOF(参见阮一峰博客:EOF是什么)。

我在刚了解重定向时,就难以理解输出重定向,例如:cat /etc/profile >> /tmp/profile.txt 按照我原先的理解,左侧产生的内容会存入右侧的文件,我的关注点在>>的右侧文件中,所以我潜意识里认为它应该是一个“输入”,我错误的认为左侧产生的内容”输入“至右侧文件。应该关注左侧的命令,左侧的命令会输出内容,输出重定向符会将输出的内容重定向至文件。

本文链接: https://django.org.cn/?id=12 转载请注明出处!

上一篇: Docker入门命令
下一篇: Centos7安装neo4j 4.4
评论区 交流一下吧!

共有0条评论来说两句吧...

欢迎 发表评论: