Bash 脚本:将标准错误消息更改为自定义错误消息

Bash 脚本:将标准错误消息更改为自定义错误消息

我一直在尝试编写自己的小备份脚本。当我运行脚本时遇到问题,并且该rm命令无关。我仍然想处理输出(又名根据操作是否失败显示不同的消息),但抑制rm.目前这个:
ls -t | tail -n +$startnumber | xargs -d '\n' rm && echo "Removed old backup(s)." || echo "No more than $keepnumber files; nothing to do."
不幸的是输出这个:
rm: missing operand Try 'rm --help' for more information. No more than 14 files; nothing to do.
我想去掉前两行,只输出我自己的“更清晰”的消息。我尝试过使用,rm -f但这总是(并且错误地)触发成功的输出。

答案1

这些rm消息被发送到标准错误 ( stderr)。您可以将标准错误输出 ( stderr) 重定向为/dev/null

xargs -d '\n' rm 2>/dev/null

这将防止这两行都打印在您的终端上,并且只会显示您的自定义消息。

答案2

我只是将文件列表保存在临时文件中,并在尝试之前计算其中的行数rm。 (或者先计算文件数。)

您还可以将错误从rmto重定向/dev/null,但这会掩盖有效的也有错误。

tmpfile=$(mktemp)
ls -t | tail -n +$startnumber > $tmpfile
if [ -s "$tmpfile" ] ; then
    echo not empty, do something with filelist in $tmpfile
else
    echo empty, do something else
fi
rm "$tmpfile"

当然,ls如果您的文件名由于某种原因包含换行符,这样使用会中断。 (是的,这是可能的。尽管在这种情况下,这仅意味着某些文件没有被删除,尽管它们应该被删除。)

相关内容