linux bash的重定向

上周我的朋友在学习 Linux bash 脚本时提到了重定向的概念。
他说,I/O 重定向包括捕获命令输出,然后将其重定向到另一个位置,例如文件。

例如,他编写了一个命令 ls /dev,将 /dev 目录中的文件列表打印到屏幕上。
他解释说,这里/dev是ls命令的标准输入,屏幕上显示的是标准输出。

然后他展示了如何使用重定向。
示例: ls /dev > filename:此命令将 ls 的输出重定向到文件 filename,而不是屏幕。
如果使用>>,它将被附加到文件末尾。

他还提到标准输入、输出和错误可以通过文件标识符重定向。
例如,ls -qw /dev 2 > filename 将错误消息重定向到该文件。

我的朋友还说可以使用exec命令重新定义文件标识符。
例如,exec 5 >&1 将文件标识符 5 重定向到标准输出。

他还提到可以通过 grep 命令重定向标准输入。
例如,grep search-word 默认为键盘输入,但您也可以指定文件作为输入。

最后他问我:标准文件标识符是什么?我的答案是0,即标准输入。
他还说,可以使用echo命令将字符串写入文件,或者使用exec命令打开文件并指定文件标识符。

我不确定这部分,但我的朋友说禁用文件标识符的命令是 &-,例如B.2 >&
关闭标准错误输出。
他还提到了一些其他命令,例如用于删除或追加文件内容的 > 和 >>。

Linux 输出重定向>和>>的区别是什么?

这是一个陷阱。
不要使用&大于符号直接覆盖日志文件。
这样做可能会导致历史数据丢失。

Linux进阶命令-重定向

说白了,Linux中的redirect命令就是用来控制命令的输入输出流程的。
其实很简单。
主要分为三种:输出重定向、输入重定向和错误重定向。
我们先来说说最重要的事情。
输出重定向有两种形式。
一种是标准输出重定向 (>)。
例如,在我们去年运行的项目中,我们使用 echo 命令将一些信息生成到文件中。
如果文件存在,内容将被覆盖。
语法是 command>file,就像这样 echo "Hello, World!">output.txt。
还有一点是,添加标准输出(>>)也是一种输出重定向。
它将把信息添加到文件末尾。
如果该文件不存在,则会创建该文件。
去年,我们处理了大约 3 ,000 个震级的数据集。
我们使用这个方法来添加注册表信息。

起初我以为输出重定向只会覆盖文件,但后来发现这是错误的。
添加功能也很实用。
输入重定向 (<) 也很重要。
它允许您使用文件的内容作为标准命令输入。
这在处理大量数据时特别有用。
例如,可以使用sort命令进行排序。
您只需将文件内容重定向到它,就像 sort
错误重定向也有两种形式。
标准错误重定向 (2 >) 用于将错误信息重定向到文件。
去年我们遇到了权限不足的问题,就用这个方法来记录错误日志。
语法是命令2 >文件。
还有另一个关键细节。
添加标准错误 (2 >>) 将错误信息添加到文件末尾。

等等,还有一件事,合并重定向(&>或2 >&1 )可以将标准输出和标准错误同时重定向到同一个文件,这对于调试程序非常有用。
去年我们调试了一个复杂的项目,并使用这种方法来合并输出和错误信息。
至于丢弃输出并将其直接重定向到/dev/null,说实话这个函数相当棘手,因为它会隐藏所有输出,包括错误消息,所以使用它时要小心。

最后,使用 > 覆盖文件并使用 >> 添加内容。
合并输出和错误时,最好使用 &> (Bash) 或 >file2 >&1 (通用)。
当您丢弃输出时,它会直接重定向到/dev/null。
很多人没有注意到这一点,但我认为值得一试。