您可以通过两种方式显示shell脚本的输出,在屏幕上显示输出或者将输出发送到文件。
在本教程中我们说明shell脚本中必不可少的知识,即标准输入、标准输出和重定向。
在linux 一切都是文件,包括输入和输出。每个进程都可以同时打开九个文件描述符。保留的文件描述符0、1、2提供shell进程使用。
0表示标准输入。1表示标准输出。2标准错误。您可以使用这些文件描述符来控制程序或者脚本的输入和输出。
您需要完全理解这三个概念,因为它是shell脚本或者程序的支柱。因此,我们将详细描述它们中的每一个。
标准输入stdin代表标准输入,也就是文件描述符1,默认为键盘。您可以使用重定向符号<将指定文件作为标准输入。
如果你将标准输入替换为文件,重定向符号<会将的文件数据作为标准输入传递给指定的程序。
例如命令cat archive.tar.gz使用重定向符号>,>将标准输出重定向到文件。
您可以使用重定向符号>>将数据追加到指定文件。例如命令pwd >> log会将pwd命令的标准输出追加到文件log。
而重定向符号>则会使用标准输出覆盖指定文件。例如命令> filename将会清空文件filename。
pwd >> log> filename标准错误ls file2 > file命令尝试使用重定向>符号将标准输出重定向到文件。如果你的计算机没有xfile文件。
ls命令将会打印一个错误ls: cannot access 'file2': no such file or directory,这通常称为标准错误stderr。
默认情况下,shell将标准错误发送到屏幕。如果您需要将标准错误重定向到日志文件,可以使用重定向符号>/>>重定向错误。
ls file2 > filels: cannot access 'file2': no such file or directory重定向错误正如引言所提到文件描述符2是标准错误,因此我们将文件描述符2放在重定向符号之前来重定向错误。
假设当前目录不存在文件xfile,现在运行ls -l xfile 2> log命令将会把错误重定向到文件log,2>表示重定向标准错误。
如您所见错误消息并没有打印在屏幕,而是写入到文件,你可以运行cat命令查看文log文件内容。
ls -l xfile 2> log重定向错误与标准输出要重定向错误和标准输出,您必须在每个重定向符号之前添加正确的文件描述符。在同一命令可以使用多个重定向符号来实现标准错误和标准错误的重定向。
假设当前目录存在文件file1,但不存在文件file2。现在运行命令ls flie1 file2将会同时产生标准错误和标准输出。
出于某种原因,你可能需要标准错误写入到文件error.log,而标准输出写入文件access.log。
此时你就可以使用文件描述1和重定向符号>写入到access.log文件,组合之后的符号是1>。
使用文件描述符2和重定向符好>送到写入到error.log文件,组合之后的符号是2>。因此最终的命令是ls file1 file2 2> error.log 1> access.log。
除此之外您还可以使用&>符号将标准输出和标准错误重定向到同一个文件。例如命令ls file1 file2 &> log。
ls file1 file2 2> error.log 1> access.logls file1 file2 &> log永久重定向输出重定向有两种方式临时重定向和永久重定向。对于 临时重定向 ,您可以使用>或者>>符号。如果您有很多数据需要重定向,您可以使用exec命令进行永久重定向。
永久重定向并不是真的就一直唯一类型的重定向,可以随时使用exec命令进行修改。
永久重定向相当于为进程创建一个文件描述符,接下来运行命令的标准输出,标准错误,标准输入都使用同一文件描述符。
例如std.sh脚本将会重定向exec命令之后的所有标准输出,也就是echo生成的标准输出。如果运行cat命令查看log文件,我们将看到echo命令的标准输出。
你可以多次使用exec命令多次重定向不同的文件描述符,例如命令exec 2> error.log将标准错误重定向到文件error.log。
std.sh
#!/bin/bashexec 1> log #永久重定向标准输出echo permanent redirectionecho from a shell to a file.echo without redirecting every lineexec 2> error.log #永久重定向标准错误echo script begining ...echo redirecting output除了使用exec命令重定向标准输出,标准错误。你还可以使用exec命令重定向标准输入。默认的标准输入stdin,也就是文件描述符1,通常是键盘。
命令exec 0< log 将使用log文件作为标准输入stdin,而不是默认的键盘。通常linux系统管理员使用这种技术来读取日志文件进行处理。
stdin.sh脚本很简单。您应该知道如何使用read 命令获取用户输入。如果将文件重定向到标准输入stdin,read命令将尝试读取文件的内容。
stdin.sh
#!/bin/bashexec 0&1,但很少使用这种方式2> /dev/null 1> /dev/null重定向到空设备文件/dev/null。
其实ls -al file1 file2 2> /dev/null 1> /dev/null和ls -al file1 file2 > /dev/null 2>&1是不相等的命令。
2> /dev/null 1> /dev/null是直接将标准错误重定向到空设备文件,而> /dev/null 2>&1是将标准错误先重定向到标准输出,然后再重定向到空设备文件。
ls -al file1 file2 2> /dev/null 1> /dev/nullls -al file1 file2 > /dev/null 2>&1如果2>&1是将标准错误信息重定向到标准输出,你可能会想问2>1结果是什么,我们可以运行命令ls -al file1 file2 2>1来验证这一点。
运行命令后你可能注意到当前目录存在文件1,运行命令cat 1你会发现标准错误都写入文件1。
也就是说2>1会将标准错误重定向到文件1里面,所以2>&1中的&1指标准输出。
ls -al file1 file2 2>1cat 1ls: cannot access 'file2': no such file or directory结论现在您了解标准输入、标准输出、标准错误以及如何重定向它们。
高压放大器
奥睿科HUB猪评测 兼具实用的同时又狠狠的卖了个萌
字符串函数strlen的深入研究
加密项目中快钱和慢钱的基本概念阐述
低价拓宽物联网传感器应用边界
一文了解标准输入、标准输出、标准错误
如何在UE4中设置光线追踪功能
当人工智能时代真正到来,人类会怎样?
!二手 吉时利 2000 吉时利2000 三用表 谭艳飞1
智慧园区通道闸管理,启用人脸识别门禁系统更高效更安全
微波参量放大器,微波参量放大器是什么意思
光伏电站工作原理
高分辨活体成像技术在活体胚胎研究的应用
边缘计算:智能制造不可或缺的一环
深度学习科普文:最通俗易懂 从老虎机到电子游戏
喜报|立仪科技荣获“2023年深圳市专精特新中小企业”
罗德与施瓦茨公司易用型台式示波器增加逻辑分析功能
异形折弯铜排 T2紫铜排表面做可镀银,镀锡,镀银处理
FPGA的多芯片封装技术介绍
小米否认收购江淮汽车传闻