如何在Bash中使用Stdin、Stderr和Stdout流Stdin>、>>、<和其他运算符的使用示例2:Stdoutpipe(|)的使用管道字符和stdout例3:Stdin和Stdout的使用例4:Stderr的使用原文HowtoUsetheStdin,Stderr,andStdoutStreamsinBash–Linux顾问介绍Linux操作系统启动时,会打开三个流。它们是标准输入、标准输出和标准错误。stdin的全称是standardinput,用来接受用户的输入。stdout的完整形式是标准输出,用于将命令的输出存储到stdout流中。stderr的完整形式是标准错误,用于将任何命令产生的错误消息存储到数据流中。stdin、stdout、stderr对应的数字标识符值为0、1、2Stdin、Stdout、Stderr的重定向运算符Stdin、Stdout、Stderr的重定向运算符使用重定向符号:“<”或“0<”代表标准输入流。“>”或“1>”表示标准输出流。“2”用于stderr流。Stdin、Stdout和Stderr的使用下面是使用stdin、stdout和stderr的一些用例。此示例显示了获取文件内容并将其打印到终端的方法。示例1:使用Stdin>、>>、<等运算符运行下面的“cat”命令,创建一个名为testdata.txt的文本文件,其中包含一些内容。$cat>testdata.txt注意输入上面的命令后,shell会等待输入流的输入。这时候可以在控制台随意输入一些字符,然后按ctrl+c**结束输入。这时候ls当前可以看到会出现一个新的文件testdata.txt。请注意,如果我们重复此命令,每个新输入都会覆盖旧输入。ubuntu@VM-8-8-ubuntu:~$cat>testdata.txtabcdefg^Cubuntu@VM-8-8-ubuntu:~$cattestdata.txtabcdefg运行下面的“cat”命令将一些内容附加到测试数据。txt文件。$cat>>testdata.txt下面是练习代码:ubuntu@VM-8-8-ubuntu:~$cattestdata.txtabcdefgubuntu@VM-8-8-ubuntu:~$cat>>testdata.txthijklmn^Cubuntu@VM-8-8-ubuntu:~$cattestdata.txtabcdefghijklmn运行下面的“cat”命令,从testdata.txt文件中获取输入流并将其打印到终端。$cattestdata2.txtubuntu@VM-8-8-ubuntu:~$lstestdata2.txt运行如下“cat”命令查看testdata2.txt文件内容:testdata2.txt文件。ubuntu@VM-8-8-ubuntu:~$cattestdata2.txtLearnBashProgramming输出:执行前面的命令后出现如下输出。根据输出,“echo”命令的输出被写入了testdata2.txt文件:下面是两个命令合并后的输出结果:ubuntu@VM-8-8-ubuntu:~$echo"LearnBashProgramming"|cat>testdata2.txtubuntu@VM-8-8-ubuntu:~$lstestdata2.txtubuntu@VM-8-8-ubuntu:~$cattestdata2.txtLearnBashProgramming运行以下命令写入“ls–l”的输出”命令使用重定向运算符('>')写入名为list.txt的文本文件:运行以下命令将ls-l命令的输出写入名为list.txt的文本文件。ls-l>list.txt我个人实验结果如下:ubuntu@VM-8-8-ubuntu:~$ls-l>list.txtubuntu@VM-8-8-ubuntu:~$catlist.txt总计8-rw-rw-r--1ubuntuubuntu0Mar1413:18list2.txt-rw-rw-r--1ubuntuubuntu0Mar1413:22list.txt-rw-rw-r--1ubuntuubuntu23Mar1413:06testdata2.txt-rw-rw-r--1ubuntuubuntu16Mar1413:13testdata.txt示例3:使用Stdin和StdoutThemethodofusingbothstdinandstdouttotakeaninput从一个文件并将其写入一个文件中显示在这个例子中。本节介绍如何使用标准输入和标准输出。运行以下“cat”命令以获取testdata.txt文件的内容并将其写入testfile.txt文件和终端:以下cat命令可以将testdata.txt文件的内容打印到控制台并重定向输出流写入文件到另一个文件:ubuntu@VM-8-8-ubuntu:~$catotherfile.txtubuntu@VM-8-8-ubuntu:~$cattestdata.txtabcdefghijklmnubuntu@VM-8-8-ubuntu:~$catotherfile.txtabcdefghijklmnPS:为了便于理解,建议读者将上述命令分成两个操作,像这样:(catotherfile.txt。上面的命令可以看成两部分。第一部分是读取testdata.txt的内容作为输入流,然后输出到otherfile.txt。最后,两个文件的内容是一样的。这个操作的命令效果类似于cp复制一个文件:ubuntu@VM-8-8-ubuntu:~$cpotherfile.txtotherfile2.txt例子4:Stderr的使用可以打印出标准错误的内容终端或重定向到文件或发送到/dev/null就像回收站一样工作。本例展示了标准错误的不同传递方式输出到控制台或输出到文件,另一种方式是丢弃到/dev/null的“黑洞”中,下面的例子是stderr的一个使用案例:下面的命令是正确的,它打印出“Hellowithanewline”字符串。所以下面的命令没有产生标准错误。ubuntu@VM-8-8-ubuntu:~$printf"%s\n""Hello"Hello我们可以通过echo$?:ubuntu@VM-8-8-ubuntu:~命令来检查前面的命令是否正确$echo$?0下面是错误的,因为没有名为“pirntf”的命令。所以它会产生一个标准错误,并将错误打印到控制台。ubuntu@VM-8-8-ubuntu:~$pirntf"%s\n""Hello"Command'pirntf'notfound,didyoumean:command'printf'fromdebcoreutils(8.32-4.1ubuntu1)尝试:sudoaptinstall这时候查看之前的命令是否正确,结果返回非零值说明之前的命令错误:ubuntu@VM-8-8-ubuntu:~$echo$?127有时,它需要通过隐藏标准错误来打印自定义错误,以使用户更容易理解错误。可以通过将错误重定向到/dev/null来完成此任务。此处使用“2>”将错误重定向到/dev/null。有时,控制台需要通过隐藏标准错误来打印自定义错误,以方便用户理解错误。此任务可以通过将错误重定向到/dev/null来完成。这里“2>”用于将错误重定向到/dev/null。ubuntu@VM-8-8-ubuntu:~$pirntf"%s\n""Hello"2>/dev/nullubuntu@VM-8-8-ubuntu:~$echo$?127有时,标准错误需要存入供将来使用的文件。这个任务可以通过使用“2>”运算符将错误重定向到一个文件来完成。有时,标准错误需要存储在文件中以备将来使用(日志备份)。此任务也可以通过使用“2>”运算符将错误重定向到文件来完成。ubuntu@VM-8-8-ubuntu:~$pirntf"%s\n""Hello"2>error.txtubuntu@VM-8-8-ubuntu:~$caterror.txt命令'pirntf'未找到,didyoumean:command'printf'fromdebcoreutils(8.32-4.1ubuntu1)尝试:sudoaptinstall从结果可以看到标准错误在执行命令后正确写入了error.txt文件.总结本教程使用多个示例解释了stdin、stdout和stderr的使用,这将帮助Linux用户理解这些流的概念并在需要时正确使用它们。本教程解释了stdin、stdout和stderr,这将帮助Linux用户理解这些流的概念并在需要时正确使用它们。