如何使用Cabal运行可执行文件且无额外输出?
解决cabal run冗余输出的问题
以下几种方法可以避免cabal的冗余输出混入你的程序输出文件:
直接运行已构建的可执行文件
先执行构建命令完成编译:cabal build exe:output-test构建完成后,找到dist-newstyle目录下生成的可执行文件(路径类似你示例中的
/private/tmp/output-test/dist-newstyle/build/x86_64-osx/ghc-9.4.4/output-test-0.1.0.0/x/output-test/build/output-test/output-test),直接运行该文件并将输出重定向到目标文件:./dist-newstyle/build/x86_64-osx/ghc-9.4.4/output-test-0.1.0.0/x/output-test/build/output-test/output-test > result.txt分离cabal输出与程序输出
cabal的构建/状态信息默认输出到标准错误(stderr),而你的程序输出通常到标准输出(stdout)。利用这一点,你可以只重定向stdout到文件,同时将stderr丢弃:cabal run exe:output-test > result.txt 2>/dev/null这样程序的输出会保存到文件,cabal的冗余信息不会出现在终端也不会混入文件。
使用cabal exec运行已构建程序
如果已经完成过构建,使用cabal exec可以在项目环境中直接运行可执行文件,不会产生构建相关的输出:cabal exec -- output-test > result.txt
内容的提问来源于stack exchange,提问作者Noughtmare
相关产品推荐
相关产品推荐

