[英]How to hide error notifications in linux bash aliases?
我写了一个别名来显示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'
在这里,将整个代码包装在{ }
使我们可以在整个块上执行一次重定向,而无需花费子外壳程序(如将代码包装在( )
会创建的那样( )
。
其他说明:
find -exec ... {} +
是POSIX指定的,并且具有与find ... -print0 | xargs -0
相同的效率提高find ... -print0 | xargs -0
find ... -print0 | xargs -0
(在产卵比必要的子进程没有更多的情况而言),实际上会更有效,因为它避免了对外部需求xargs
过程。 */
告诉全局仅扩展到目录名称。 使用--
变量优先级可以使du
将该点之后给出的所有自变量解释为文件名或目录名,即使您的名称以-
开头。 port install coreutils
gsort
( port install coreutils
),所以使用了sort() { gsort "$@"; }
sort() { gsort "$@"; }
包测试时,sort命令。 尝试将du
命令的stderr流传递到/dev/null
du -sh * 2>/dev/null | sort -hr
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.