linux - 有没有办法使 linux CLI IO 重定向持久化?

标签 linux bash io-redirection

我有多个管道命令,如下所示:

find [options] | grep [options] | xargs grep [options]

它们中的每一个都可能产生我不感兴趣的错误(权限错误、文件名中的空格错误等)。因此,我想将所有错误重定向到/dev/null。我知道我可以使用 2>/dev/null 来做到这一点,对于每个命令。我可以持久设置IO重定向吗?理想情况下,我只会在命令的开头/结尾设置一次,然后它会影响所有后续/前面的管道命令。另外,是否可以永久设置 IO 重定向,以便在重置之前继续影响所有命令?

我正在使用 bash(我检查了 bash 内置函数的手册页,但没有在顶部看到“>”和“<”字符,所以我认为这是一个 linux 的东西......抱歉)

最佳答案

我假设您正在使用 bash,或者至少是某种类似 Bourne 的 shell。

我还假设您要避免的是以下内容:

find ... 2>/dev/null | grep ... 2>/dev/null | xargs ... 2>/dev/null

即为管道的每个段重复 2>/dev/null 部分。

你可以这样做:

( find ... | grep ... | xargs ... ) 2>/dev/null

您还可以按如下方式永久设置重定向:

exec 2>/dev/null

并且(假设 STDOUT 和 STDERR 之前都指向同一个地方),您可以通过以下方式撤消:

exec 2>&1

关于linux - 有没有办法使 linux CLI IO 重定向持久化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2821577/

相关文章:

java - 如何使用 Javas ProcessBuilder 进行输入重定向?

c - 在 C 中实现 << 重定向

c - &> 重定向在 UNIX shell 中是如何实现的?

linux - 删除shell脚本中字符串的一部分

linux - 为什么关闭死掉的tcp-socket会影响另一个打开的tcp套接字?

linux - sqlite3 和 bash,数据库设置

bash - 如何将 'reset' bash 恢复为出厂设置 - MacOS Sierra

c++ - 将共享内存指针类型转换为整数指针

linux - 在字符串中找到模式后评论 bash 行

regex - 为什么 grep 不从安全实用程序的输出中提取?从 echo 作品中进行比较提取