我正在使用Clojure库来简化我的项目的子进程管理。它基本上以更Clojuric的方式包装Java的ProcessBuilder
。我想做的一件事是捕获任何缺少的命令 - 也就是说,如果用户想要使用this-command-not-found
作为shell命令,我的代码应该抛出异常。
看起来这对ProcessBuilder
来说很难或不可能。我是否需要以某种方式获取用户$PATH
并在那里搜索以检查有效命令,还是有更好的方法?
编辑:这应该在没有的情况下完成 - 请参阅下面的评论。
答案 0 :(得分:2)
是的,当然有一种比搜索$PATH
更好的方法:只需运行用户要求您运行的命令。使用ProcessBuilder或任何其他机制都无法实现更智能的解决方案,因为用户可以使用的shell集是开放式的,并且不要求他们的shell甚至具有$PATH
的概念供您搜索。您所能做的就是尽力做到用户想要的,如果发生错误,请让他们知道。
答案 1 :(得分:0)
您从Process
获得ProcessBuilder.start()
。
然后您可以从Process.getErrorStream()
阅读并在Windows下查看
'this-command-not-found' is not recognized as an internal or external command, operable program or batch file.
答案 2 :(得分:0)
您可以使用ProcessBuilder执行which
命令来了解命令是否存在。这需要which
出现在系统上。