【问题标题】:Git Bash for Windows not working 'lein repl' command适用于 Windows 的 Git Bash 无法使用“lein repl”命令
【发布时间】:2017-02-07 05:51:41
【问题描述】:

我实际上使用的是 git bash 而不是默认的 windows 命令 shell (cmd)。
但我无法在 git bash 中运行“lein repl”。
它没有显示任何东西,我必须按 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])

【问题讨论】:

  • 刚刚检查过,当我在 git bash 中运行 lein.bat 时,它对我有用。您能否提供更多详细信息 - 您的 PATH,您如何尝试在 bash 下运行 lein,是否可以在 bash 中运行 java 等?
  • 我添加了一个编辑。如果您需要更多信息,请告诉我。谢谢
  • 嗯.. 不知道如果lein run 有效而lein repl 无效会发生什么。你在一个项目中吗?您可以在任何项目之外尝试lein repl 吗?甚至可能没有 lein 个人资料。只是在黑暗中拍摄。

标签: clojure leiningen git-bash


【解决方案1】:

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

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

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

c:/Users/your-account/bin

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


关于 Emacs、lein 和 windows 的注意事项

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

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

我推荐的 Windows 版 Emacs 安装

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      如果 lein 可用,那么在你的 git bash 中输入以下命令 别名 lein='lein.bat'

      运行你的 lein 命令它肯定会工作......

      【讨论】:

        【解决方案4】:

        我遇到了和 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 进程。

        但经过一番努力,我终于弄明白,这是一个shell环境变量TERM=emacs造成的。每当您调用M-x shell 时,函数comint-term-environment 都会为您提供服务。

        (根据comint.el中的源代码,这样做是为了“让我们指定宽度”。它还提到“如果TERM不是一个有效的终端,一些使用terminfo的程序会很困惑type”。所以你有了它 - 看起来 Java 就是其中之一。)

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

        (setq system-uses-terminfo t) 
        

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

        user=> (+ 1 2 3 8) 
        14
        

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

        【讨论】:

        • OP 在 Emacs 中不起作用,所以我不确定这个答案是否有帮助。
        【解决方案5】:

        以下内容帮助我在 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 提示

        【讨论】:

          猜你喜欢
          • 2019-05-07
          • 1970-01-01
          • 2023-01-29
          • 1970-01-01
          • 1970-01-01
          • 2016-11-04
          • 2016-05-24
          • 2016-09-12
          • 2018-07-29
          相关资源
          最近更新 更多