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

使用固定随机种子调用shuf执行sh脚本时报文件不存在错误如何解决?

问题诱因
  • 脚本中使用的<(命令)属于进程替换语法,是Bash、Zsh等Shell的扩展特性,并未纳入POSIX标准sh的功能范围
  • 执行sh run.sh时调用的是POSIX标准sh解释器,无法识别进程替换语法,会直接将<(get_seeded_random 42)作为普通文件名传递给shuf,shuf找不到对应路径的文件就会抛出该报错
  • source run.sh是在当前交互Shell(多数系统默认是Bash或Zsh,支持进程替换)中直接执行脚本内容,因此不会触发报错
  • 同类写法在sort命令中可正常运行,本质是测试时直接在交互Shell执行了命令,而非通过sh 脚本的方式调用,若用sh执行包含进程替换的sort命令同样会报错
解决方法
  • 方法1:指定支持进程替换的Shell执行脚本
    两种实现方式任选其一:
    1. 在脚本首行添加Shebang声明#!/bin/bash,给脚本添加执行权限(chmod +x run.sh)后直接用./run.sh运行
    2. 执行脚本时直接指定Bash解释器:bash run.sh
  • 方法2:兼容POSIX sh标准写法,避免使用进程替换
    先将随机种子生成的内容写入临时文件,再传递给shuf调用,示例代码如下:
    function get_seeded_random() {
      seed="$1"
      openssl enc -aes-256-ctr -pass pass:"$seed" -nosalt \
        </dev/zero 2>/dev/null
    }
    # 生成临时随机源文件,$$为当前进程ID避免重名冲突
    get_seeded_random 42 > /tmp/seeded_random.$$
    shuf -i1-100 --random-source=/tmp/seeded_random.$$
    # 执行完成后删除临时文件
    rm -f /tmp/seeded_random.$$
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:48:00