ls - ltr 错误,因为文件夹中没有任何内容

ls - ltr error because nothing in folder

我有一个脚本,在脚本中我是 运行 下面的命令。

ls -1tr ${ARCH1_DIR}/* | grep ${LOG_PREFIX} > $copied_binlog_set

如果文件夹为空,我会收到错误消息。

ls: cannot access /n01/mysqlarch1/*: No such file or directory

此时脚本停止处理。有没有办法让脚本在文件夹为空的情况下继续处理。

你可以试试:

ls -1tr ${ARCH1_DIR}/* 2>/dev/null | grep ${LOG_PREFIX} > $copied_binlog_set

当你写 2> file 时,它会将 stderr 重定向到 file,但你可以使用 null 设备并抛出它获得的输入。你可以把它想象成你系统的黑洞。

* 由 shell 扩展,而不是 ls 命令。这意味着,如果没有文件,shell 不会扩展 *,并且 ls 会尝试显示 named 文件的列表* 在目标目录中 -- 不存在,因此出现错误。

您可以重定向错误消息 (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 允许检索管道链中任何命令的 return 值 ($?)。 ($? 只会 return 链中 last 命令的值)。 PIPESTATUS 数组中的索引是管道链中命令的索引。