是否有类似于`cabal run`的`stack run`命令?

19

直到最近,我一直使用这个美妙的方法来使用 stack 构建和运行项目:

stack build && .stack-work/install/x86_64-linux/lts-4.1/7.10.3/bin/<project-name>

我在IRC上被告知,这可以简化为:

stack build && stack exec <project-name>

这个能够再更简化一些吗,变成

stack run

或者至少

stack run <project-name>

如果我没记错的话,这是通过cabal run实现的。

编辑:

@haoformayor的评论已经接近了:

alias b='stack build --fast --ghc-options="-Wall" && stack exec'

虽然这还需要项目名称,对吧?

我也开始跟...亲近了。

function stack-run () { stack build && stack exec `basename "$PWD"` }

虽然这只有在项目名称与文件夹名称匹配时才能起作用。也许我们可以查询 .cabal 文件中第一个 executable 条目的 cabal/stack?或者我们可以使用 sed 完成它...


我不相信有一个等效的命令。我使用shell别名来做类似的事情。例如 alias b='stack build --fast --ghc-options="-Wall" && stack exec' - hao
@haoformayor 这已经接近我想要的了。等一下,我会稍微扩展一下我的问题。 - Wizek
1
如果需要,获取可执行文件名相当容易:grep '^executable' *.cabal | cut -d ' ' -f 2 | head -n 1 - hao
还有一个 stack runghc ./src/Main.hs - epsilonhalbe
1
这是一个老问题,但现在在最新版本中有一个真正的 stack run 命令! - bradrn
3个回答

13

也可以通过命令行参数传递一些参数:stack exec -- <项目名称> <参数1> <参数2> - max taldykin
7
嗯,这个回答让我有点困惑。@Govind,你的回答与我在问题中提到的“stack exec”有什么不同?我正在寻找一个命令,可以类似于我记得的“cabal run”那样进行“stack build”+“stack exec”项目。 - Wizek

11

我使用过以下工具,体验不错:

https://hackage.haskell.org/package/stack-run


编辑于2018-04-05:相关的 stack 问题.


旧回答:

目前我采用了这种方法。

#/usr/bin/env sh

stack build && stack exec `basename "$PWD"` "$@"

我把以下内容放到了一个名为stack-run的文件中,并将其放置在我的$PATH目录下。在我的情况下,是~/.local/bin/stack-run

这使得我可以

$ stack-run

在任何目录中,甚至

$ stack run

由于在我的几乎所有项目中,该项目的可执行文件与文件夹同名,因此这是有效的。但我希望还能支持不同名称。


编辑 2016-09-26:我也发现了这个,但还没有尝试过:https://hackage.haskell.org/package/stack-run


5
现在的 Stack 1.9.1 版本已经支持 stack run 命令了! - 谷口昂平

11

你可以使用 --exec 命令来告诉 stack 在构建成功后应该运行哪个程序:

stack build --exec <executable-name>

您还可以为可执行文件指定参数,例如:

stack unpack pandoc && cd pandoc*
stack build --exec "pandoc --version"

相比于cabal run,那可能是你能够得到的最接近的方式,因为stack exec--exec标志都需要可执行文件的名称。然而,最干净的变体将是一个额外的stack-run命令,它执行stack build --exec <.cabal中的第一个可执行文件>。这可能值得在该项目的GitHub问题跟踪器上提出一个功能请求


1
顺便说一下,如果您同时安装了 cabal 和 stack,您也可以运行 stack build --exec "cabal run"。但这有点牵强。 - Zeta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接