好的,所以我有一个相当简单的脚本,后台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;)
我错过了哪些可能的错误来源,以及我可以抑制它的任何方式?