如何通过批处理向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.
相关产品推荐
相关产品推荐

