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

如何通过批处理向IEx Shell传入指令以启动Elixir程序?

解决IEx Shell启动后自动执行Elixir代码的批处理方案

嘿,这个问题我之前也碰到过——确实是因为iex -S mix会拉起一个交互式的IEx Shell,它会占住当前的命令行会话,所以后面的命令根本没机会在IEx里面跑。给你几个实用的解决办法,按需选就行:

方法1:用IEx的--eval参数直接执行单条命令

IEx本身自带了--eval(简写-e)参数,能让你在启动IEx的同时自动执行指定的Elixir代码,执行完还会保留交互式会话。把你的批处理改成这样就行:

@echo off
iex -S mix -e "Elevator.Supervisor.start()"

这样IEx启动完成后,会自动跑Elevator.Supervisor.start(),之后你还能继续在IEx里操作。

方法2:用脚本文件批量执行代码

如果要执行的代码不止一行,或者想让代码更清晰,你可以把要跑的Elixir代码写到一个单独的脚本文件里,比如命名为start_elevator.exs,内容如下:

Elevator.Supervisor.start()
# 这里还能加更多你需要自动执行的代码

然后在批处理里让IEx加载这个脚本:

@echo off
iex -S mix start_elevator.exs

IEx启动后会自动运行脚本里的所有代码,之后依然会保持交互式会话。

方法3:不需要交互的话,直接用mix run

如果你的程序启动后不需要留在交互式Shell里,其实完全可以跳过IEx,直接用mix run命令运行,这样就不会有嵌套会话的问题了。批处理可以这么写:

@echo off
mix run -e "Elevator.Supervisor.start()"

这个命令会先编译代码,然后执行指定的函数,跑完之后直接退出命令行,适合不需要手动交互的场景。

小提醒:如果Elevator.Supervisor.start()是个长期运行的进程(比如监督树启动后会一直跑),那前两种方法会让IEx一直保持会话,直到你手动退出;第三种方法则会让命令行窗口一直开着,直到进程终止。

内容的提问来源于stack exchange,提问作者C. K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:27:47