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

Python doit模块运行任务动作时如何选择指定使用的shell?

doit指定Bash作为执行Shell的解决方法

报错的根本原因是[[属于Bash专属扩展语法,doit默认调用/bin/sh执行命令动作,而多数Linux发行版的/bin/sh是不支持Bash扩展语法的Dash,因此执行时会抛出[[: not found错误,返回码127表示对应语法无法识别。

方案1:全局设置默认Shell(推荐)

直接在dodo.py文件开头添加如下代码,即可将所有任务的默认执行Shell改为/bin/bash,无需修改原有任务的动作定义:

import doit
doit.action.DEFAULT_SHELL = "/bin/bash"

方案2:为单个任务指定Shell

如果仅部分任务需要使用Bash执行,不需要全局修改,可以对需要的任务显式使用CmdAction类并指定shell参数:

from doit.action import CmdAction

def task_phase_dataset():
    return {
        "actions": [
            CmdAction("[[ ! -d phasing ]] && mkdir phasing", shell="/bin/bash")
        ],
        # 其余任务配置(target、file_dep等)保持不变
    }

替代方案:兼容POSIX Shell语法

如果不想修改Shell配置,可以将命令改写为符合POSIX标准的写法,原生支持/bin/sh执行:
原命令[[ ! -d phasing ]] && mkdir phasing可改写为以下任意一种:

  • 用POSIX兼容的条件判断:[ ! -d phasing ] && mkdir phasing
  • 直接使用mkdir的-p参数,无需提前判断目录是否存在:mkdir -p phasing

内容的提问来源于stack exchange,提问作者Pedro Inácio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:48:03