我有一个脚本,在脚本中我正在运行以下命令。
ls -1tr ${ARCH1_DIR}/* | grep ${LOG_PREFIX} > $copied_binlog_set
如果文件夹为空我收到错误。
ls:无法访问/ n01 / mysqlarch1 / *:没有这样的文件或目录
此时脚本停止处理。有没有办法让脚本可以在文件夹为空时进行处理。
答案 0 :(得分:0)
您可以尝试:
ls -1tr ${ARCH1_DIR}/* 2>/dev/null | grep ${LOG_PREFIX} > $copied_binlog_set
当您编写2> file
时,它会将stderr重定向到file
,但您可以使用null
设备并抛出它获得的输入。您可以将其视为系统的黑洞。
答案 1 :(得分:0)
*
由shell扩展,而不是ls
命令。这意味着,如果没有文件,shell不会展开*
,ls
会尝试显示名为 *
的文件的列表。目标目录 - 不存在,因此出错。
您可以重定向错误消息(ls ... 2>/dev/null
),并通过bash变量PIPESTATUS
捕获错误条件:
if [ ${PIPESTATUS[0]} != 0 ]
then
# whatever error handling your script needs at this point
echo "ls failed!"
fi
PIPESTATUS
允许检索管道链中任何命令的返回值($?
)。 ($?
只返回链中 last 命令的值)。 PIPESTATUS
数组的索引是管道链中命令的索引。