Shell 输入-输出重定向


Shell 输入-输出重定向

Shell 输入输出重定向是 shell 语言的一种机制,可以将命令的输入和输出进行自由的重定向。通常来说,输入重定向符号 < 将命令的输入重定向为文件,输出重定向符号 > 则将命令的输出重定向为文件。而在一些特殊情况下,需要使用特殊的重定向符号才能完成一些特殊的操作。

输入重定向(Standard Input)

输入重定向符号 < 用于将命令的输入来自于一个指定文件中,通过输入来自一个文件内部的数据来代替用户在终端上输入数据,这个称为输入重定向。

命令格式:

command < input_file

其中,command 表示要执行的命令,input_file 表示指定的输入文件。

下面是一个例子:

#!/bin/bash
# input_redirect.sh
echo "Please input your name:"
read name
echo "Your name is $name."

使用 echo 命令来提示用户输入名字,然后使用 read 命令让用户输入名字。如果在终端执行该脚本,则用户输入名字后在终端输出,如果使用输入重定向,则可以将用户输入名字的操作记录到一个文件中:

$ ./input_redirect.sh < input.txt
Your name is Alice.
$ cat input.txt
Alice

这里,使用 < 符号重定向用户名字文件(命名为 input.txt)来代替终端的输入,执行脚本后,输出的结果会写到终端。同时,输入的文本将被保存到 input.txt 文件中。

输出重定向(Standard Output)

输出重定向符号 > 从命令的输出中获取数据,并将其存储在指定的文件中,这个称为输出重定向。

命令格式:

command > output_file

其中,command 表示要执行的命令,output_file 表示指定的输出文件。

下面是一个例子:

#!/bin/bash
# output_redirect.sh
echo "stdout output"
echo "stderr output" >&2

执行以上命令可以输出到终端。但是可以使用 > 符号将该输出重定向到一个文件中:

$ ./output_redirect.sh > output.txt

这行命令将标准输出重定向到了一个名叫 output.txt 的文件中。如果不想覆盖原来的内容,则可以在 > 符号后面使用 >> 符号进行追加输出。

错误重定向(Standard Error)

错误重定向符号 2> 用于将命令输出的错误信息输入到指定文件中。

命令格式:

command 2> error_file

其中,command 表示要执行的命令,error_file 表示指定的输出文件。

下面是一个例子:

#!/bin/bash
# error_redirect.sh
echo "stdout output"
echo "stderr output" >&2

执行以上命令在终端上会输出两行文本。错误输出重定向则会将最后一行文本输出的信息重定向到一个文本文件中:

$ ./error_redirect.sh 2> error.txt
stdout output
$ cat error.txt 
stderr output

同时,还可以使用 &> 符号将标准输出和错误输出一起进行重定向:

$ ./error_redirect.sh &> output_and_error.txt
$ cat output_and_error.txt 
stdout output
stderr output

这里就将标准输出和错误输出一并覆盖了 output_and_error.txt 文件。

总结

Shell 输入输出重定向机制是一种实用的工具,可以方便地控制命令行工具的输入和输出。其中,输入重定向通过 < 符号获取指定文件中的输入数据,输出重定向通过 > 符号将命令的输出存储在指定文件中,错误重定向通过 2> 符号将命令的错误输出存储在指定文件中。