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

使用EagleC处理.mcool文件时遇/dev/tty设备错误求助

问题:运行EagleC批量处理脚本时出现/dev/tty错误

当前目录下存在多个多分辨率.mcool文件,使用以下EagleC脚本批量处理,计划将输出(含.stderr和.log文件)保存至./../EagleC_output目录,但执行时出现/dev/tty: No such device or address错误。

执行脚本

for mcool_file in *.mcool; do

  OUTPUT=$(echo $mcool_file | grep -oE "[A-Z0-9]*\.hg38" | cut -d '.' -f 1)

  cooler ls $mcool_file | grep -E '\/[1][0]{4}$|\/[5][0]{3,4}$' \
  | tr '\n' '\t' \
  | parallel --colsep '\t' --link -j16 \
  --eta --progress --bar --joblog $mcool_file'_parallel.log' \
  predictSV --hic-5k {1} --hic-10k {2} --hic-50k {3} \
  -O './../EagleC_output/'$OUTPUT -g hg38 --balance-type ICE --output-format full \
  --prob-cutoff-5k 0.8 --prob-cutoff-10k 0.8 --prob-cutoff-50k 0.99999 2> $mcool_file'.stderr'
  # | tr -d "'"

done

错误回溯

sh: /dev/tty: No such device or address
0% 0:1=0s A001C007.hg38.nodups.pairs.mcool::/resolutions/5000 A001C007.hg38.nodush: /dev/tty: No such device or address
0% 0:1=0s A001C007.hg38.nodups.pairs.mcool::/resolutions/5000 A001C007.hg38.nodush: /dev/tty: No such device or address

单个.mcool文件的cooler ls结果

执行命令:

cooler ls ./../input/A001C007.hg38.nodups.pairs.mcool

输出:

./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/200
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/500
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/1000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/2000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/5000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/10000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/20000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/50000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/100000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/250000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/500000
./../input/A001C007.hg38.nodups.pairs.mcool::/resolutions/1000000
(EagleC) 

解决方案

1. 移除parallel的终端依赖参数

错误核心是parallel的--eta、--progress、--bar参数需要访问终端输出进度,但当前运行环境(如后台执行、非交互式shell)无可用终端。移除这些参数即可解决,同时优化脚本的可靠性:

for mcool_file in *.mcool; do
  # 确保输出目录存在,避免写入失败
  mkdir -p ./../EagleC_output

  # 更可靠地提取输出前缀,避免依赖grep正则的兼容性问题
  OUTPUT=$(basename "$mcool_file" .mcool | cut -d '.' -f 1)

  cooler ls "$mcool_file" | grep -E '\/(5000|10000|50000)$' \
  | tr '\n' '\t' \
  | parallel --colsep '\t' --link -j16 \
  --joblog "$mcool_file"_parallel.log \
  predictSV --hic-5k {1} --hic-10k {2} --hic-50k {3} \
  -O "./../EagleC_output/$OUTPUT" -g hg38 --balance-type ICE --output-format full \
  --prob-cutoff-5k 0.8 --prob-cutoff-10k 0.8 --prob-cutoff-50k 0.99999 2> "$mcool_file".stderr
done

2. 强制parallel不使用终端(如需保留进度)

如果需要保留进度显示,给parallel添加--no-tty参数,强制其不尝试访问终端设备:

for mcool_file in *.mcool; do
  mkdir -p ./../EagleC_output
  OUTPUT=$(basename "$mcool_file" .mcool | cut -d '.' -f 1)

  cooler ls "$mcool_file" | grep -E '\/(5000|10000|50000)$' \
  | tr '\n' '\t' \
  | parallel --colsep '\t' --link -j16 --no-tty \
  --eta --progress --bar --joblog "$mcool_file"_parallel.log \
  predictSV --hic-5k {1} --hic-10k {2} --hic-50k {3} \
  -O "./../EagleC_output/$OUTPUT" -g hg38 --balance-type ICE --output-format full \
  --prob-cutoff-5k 0.8 --prob-cutoff-10k 0.8 --prob-cutoff-50k 0.99999 2> "$mcool_file".stderr
done

3. 排查predictSV的终端依赖

如果上述方法无效,检查predictSV是否存在未指定的交互式参数,确保所有必要参数都已明确设置,避免其尝试读取终端输入。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:02:32