gpt4 book ai didi

linux - 如何在 linux bash 别名中隐藏错误通知?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:46:53 27 4
gpt4 key购买 nike

我写了一个别名来显示 10 个最大的文件和 10 个最大的目录,所以我试图隐藏“du 无法访问”和“没有这样的文件或目录”错误,但没有成功。

在我写的别名下面:

alias big="echo 'Big Files:';find . -type f -print0 | xargs -0 du -h | sort -hr | head -10 2>/dev/null;echo 'Big Directories:';du -sh * | sort -hr | head -n10 2>/dev/null"

感谢帮助

最佳答案

第一:改用函数。这种应用程序完全是别名的错误用例。一个函数可以让你在多行中编写你的逻辑;在执行时可以有条件逻辑(例如,你可以查看你的函数是否有参数,如果有参数则表现不同);并且可以使用相同的语法调用(在任何一种情况下都可以调用 big)。

第二:为整个事情重定向 stderr,而不仅仅是最后一段。

big() {
{ # <-- open a block we can redirect
echo 'Big Files:'
find . -type f -exec du -h -- '{}' + |
sort -hr |
head -10

echo 'Big Directories:'
du -sh -- */ |
sort -hr |
head -n10
} 2>/dev/null # <-- close, and redirect, that block
}

您也可以在继续使用别名的同时做同样的事情(不过,同样,您不应该这样做):

alias big='{ echo "Big Files:";find . -type f -print0 | xargs -0 du -h | sort -hr | head -10;echo "Big Directories:";du -sh * | sort -hr | head -n10; } 2>/dev/null'

在这里,将整个代码包装在 { } 中,让我们可以在整个 block 中执行一次重定向,而无需子 shell(通过将代码包装在 ( )


其他说明:

  • find -exec ... {} + 是 POSIX 指定的,并且具有与 find ... -print0 | 相同的效率增益xargs -0(根据不生成不必要的子进程实例而言),实际上效率更高,因为它避免了对外部 xargs 的需要 过程。
  • 在“大目录”段中使用 */ 告诉 glob 只扩展到目录名。使用 -- 之前的参数告诉 du 将超过该点的所有参数解释为文件或目录名称,即使您的名称以 - 开头
  • 对于尝试在 MacOS 上测试此答案的人,请注意它取决于 GNU 排序。我个人通过 macports (port install coreutils) 安装了 gsort,所以使用了 sort() { gsort "$@"; } 在测试时包装排序命令。

关于linux - 如何在 linux bash 别名中隐藏错误通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41729215/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com