You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks Notebook中cat命令错误信息捕获失败问题咨询

解决Cat命令错误信息无法捕获的问题

问题原因

你当前的命令中,重定向顺序导致错误信息被写入输出文件而非捕获到变量:

err=$(cat /dbfs/mnt/devl/header_file/*.csv /dbfs/mnt/devl/data_files/*.csv > /dbfs/mnt/devl/output.txt 2>&1)

> /dbfs/mnt/devl/output.txt先将标准输出(stdout)指向文件,随后2>&1把标准错误(stderr)重定向到当前的stdout(也就是输出文件)。最终cat的正常输出和错误信息全部写入output.txt,$(...)无法捕获到错误内容,导致err为空。

而ls命令没有标准输出重定向,2>&1直接把错误信息导向子shell的stdout,因此能被正常捕获。

解决方案

方案1:使用命令组分离输出与错误

通过命令组{ ...; }将cat的正常输出定向到文件,同时把命令组的错误信息重定向到子shell的stdout,从而捕获到err变量:

err=$( { cat /dbfs/mnt/devl/header_file/*.csv /dbfs/mnt/devl/data_files/*.csv > /dbfs/mnt/devl/output.txt; } 2>&1 )
RC=$?
if [ $RC -ne 0 ]; then
  echo "Error code : $RC"
  echo "Error msg : $err"
fi

这个方法无需临时文件,直接通过shell语法实现输出分离。

方案2:使用临时文件存储错误信息

如果环境不支持命令组,可以用临时文件中转错误信息:

# 将错误信息写入临时文件
cat /dbfs/mnt/devl/header_file/*.csv /dbfs/mnt/devl/data_files/*.csv > /dbfs/mnt/devl/output.txt 2>/tmp/cat_error.tmp
RC=$?
if [ $RC -ne 0 ]; then
  err=$(cat /tmp/cat_error.tmp)
  echo "Error code : $RC"
  echo "Error msg : $err"
  # 清理临时文件
  rm /tmp/cat_error.tmp
fi

内容的提问来源于stack exchange,提问作者Sarath Subramanian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 18:10:56