用于Windows的Git Bash无法正常运行' lein repl'命令

时间:2016-09-29 04:07:12

标签: clojure leiningen git-bash

我实际上是使用git bash而不是默认的windows命令shell(cmd)。
但我无法运行lein repl'在git bash中。
它没有显示任何内容,我必须按crtl + c重新获得控制权。

有什么建议吗? 谢谢。

- 编辑

我正在运行lein而不是lein.bat,因为我在.bashrc中添加了alias lein=lein.bat,因此我认为这不是问题。

lein run在Git Bash中正常工作,leiningen在windows cmd中工作正常。问题是明确lein repl

当我运行which lein时,我得到which: no lein in ([MY-PATH-VAR])

5 个答案:

答案 0 :(得分:1)

首先使用命令提示符中的以下命令检查是否已在Windows中安装了lein.bat 莱恩--version

然后如果lein可用,则在git bash中键入以下命令 别名lein ='lein.bat'

然后运行您的lein命令,它肯定可以工作...

答案 1 :(得分:1)

我遇到了与 ThomasH 完全相同的问题,从 Emacs shell 调用 lein repl 会得到介绍性消息和提示......

nREPL server started on port 55801 on host 127.0.0.1 - nrepl://127.0.0.1:55801
REPL-y 0.4.4, nREPL 0.8.3
Clojure 1.10.1
Java HotSpot(TM) 64-Bit Server VM 15.0.2+7-27
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
    Exit: Control+D or (exit) or (quit)
 Results: Stored in vars *1, *2, *3, an exception in *e

...但是当我试图让它做任何事情时似乎冻结,例如:

user=> (+ 1 2 3 8) 

当我打开任务管理器时,我可以无缘无故地看到底层 Java 程序在大约 30% 的 CPU 上持续运行,而我能够可靠地摆脱它的唯一方法是从那里结束 Java 进程。< /p>

但是经过一番努力,我终于弄清楚发生这种情况的原因是shell环境变量TERM=emacs。每当您调用 M-x shell 时,函数 comint-term-environment 都会为您放入。

(根据 comint.el 中的源代码,这样做是为了“让我们指定宽度”。它还提到“如果 TERM不是有效的终端类型”。所以你知道了 - 看起来 Java 就是其中之一。)

要解决此问题,您可以在调用 system-uses-terminfo 之前将变量 't 设置为 M-x shell

(setq system-uses-terminfo t) 

这样做之后,Java 现在终于可以响应了,我可以评估 repl 中的内容。

user=> (+ 1 2 3 8) 
14

如果您遇到这个问题并且有幸在这里偶然发现,我希望这会有所帮助! =D

答案 2 :(得分:1)

以下内容对我有用,可以在 Windows 10 上的 Git bash 中运行它。当我最初使用它时,它冻结了,但是 this post 帮助我弄清楚了如何通过包含 winpty 来修复。

  1. 如果您尚未将 lein.bat 文件添加到 Path 变量,请执行步骤 1-3。否则,跳到 4. 在系统属性 -> 高级 -> 环境变量区域,选择 Path 变量
  2. 单击编辑并将包含 lein.bat 的目录添加到此。我的是 C:\Program Files (x86)\lein - lein.bat 存储在 lein 文件夹中
  3. 单击“确定”直到您关闭提示
  4. 通过打开命令提示符(Windows 键,然后键入 cmd)确认更新成功
  5. 输入 lein。如果您还没有,它应该提示您运行安装命令。如果出现提示,请执行此操作,然后再次输入 lein 以确保其有效(应输出帮助菜单)
  6. 如果已经打开,请关闭 Git bash,然后再次打开
  7. 输入 alias repl='winpty lein.bat repl'。你可以选择你想要的别名,我用了 repl
  8. 输入 repl(或您添加的任何别名)。应该花一点时间,然后开始 REPL 提示

答案 3 :(得分:0)

使用GitBash作为终端,您可以安装lein script而不是lein.bat脚本。

lein script将在GitBash中正确运行(因为它实际上是Unix环境)。

我建议在您的用户帐户目录中的bin目录中安装lein script,例如:

c:/Users/your-account/bin

lein script放在bin中将允许您在GitBash命令行的任何位置运行lein命令。

关于Emacs,lein和windows

的注释

假设您从GitBash终端运行Emacs,也可以从Emacs正确调用lein脚本,即。 runemacs。将Emacs安装目录添加到您的用户帐户PATH环境变量中,GitBash将在命令行中找到它。

在Windows上安装的Emacs在从GitBash终端运行时效果更好,因为您可以在Emacs中使用ediff,这需要GitBash终端提供的diff命令。

我建议的Windows安装Emacs

答案 4 :(得分:0)

我的经验是,lein repl(并且我确实使用了lein bash脚本)可以正常启动,也可以将lein命令的启动消息打印到shell中,但是随后将停止输出任何内容(尽管进程可能运行正常),部分。不提供交互式提示(第一个除外),不回显用户输入(第一个除外),也不打印评估结果。当使用Ctrl-C终止该过程时,我的所有输入都将传递到底层shell(具有有趣的结果,例如$ (+ 3 4) bash: +: command not found)。

我的解决方案是将Git CMD用于交互式命令,例如lein repllein figwheel等,(不幸的是,看起来很不错)。在另一个终端仿真(Cmder)中运行Git sh进程也为我提供了一个工作的交互式环境。