如何完全抑制Perl“无用户”错误

时间:2014-09-16 07:20:09

标签: shell find

好的,所以我有一个相当简单的脚本,后台find命令可以对结果运行命令。但是,脚本有时会在关闭时运行,并不总是干净地关闭(我的陷阱并不总是触发,这是launchd个作业的恼人的OS X怪癖。)

无论如何,当发生这种情况时,脚本会在"perl: no user 501"的日志文件中生成一堆错误,大概是因为脚本的用户正在注销。

这不是一个真正的问题,因为它不会破坏任何东西,并且脚本不会尝试做任何事情,但我似乎无法阻止这些错误被记录,因为重定向stderr似乎不会帮助。

这是一个严重修剪的脚本版本:

#!/bin/sh
trap 'rm -f /tmp/files_buffer 2>/dev/null' INT HUP TERM EXIT
mkfifo /tmp/files_buffer

filter() { [[ "$1" < "$2" ]] || return $?; }
export -f 'filter'
{ find "$1" -type f -iname '*.foo' -exec bash -c 'filter \"$@\"' -- {} "$2" \; -print0 >/tmp/files_buffer 2>/dev/null; printf '\0'; } &

while read path; do
    [ -z "$path" ] && break

    read inode modified <<<$(stat -f '%i %m' "$path" 2>/dev/null)
    checksum=$(shasum -a 256 "$path" 2>/dev/null | awk '{print $1}')

    echo "$path ($inode, $modified) = $checksum"
done </tmp/files_buffer

正如您所看到的,我已经从所有重复的命令重定向stderr,但错误仍然是从某个地方生成的。很好,也很混乱,因为它是一个perl错误,但我不是直接在任何地方调用perl;)

我错过了哪些可能的错误来源,以及我可以抑制它的任何方式?

0 个答案:

没有答案