Как изменить каталог в командной строке с помощью Clojure?

То, что я ищу, - это взаимодействие командной строки в командной строке Windows:

C:\temp1>clj some_script.clj
C:\temp2>

Где some_script.clj содержит что-то вроде:

(cd "c:\\temp2")

Итак, вопрос в том, как реализовать функцию cd? Экспериментировали с clojure.java.shell, но это не похоже на lib, который мне нужен. Это может быть простой вопрос, может быть, проблема в том, что я не владею Java?!

Ответ 2

clojure может это сделать. Вам нужно только изменить динамическую глобальную переменную с именем *sh-dir*. запустите следующий код в вашем реплике:

 (use '[clojure.java.sh])
 (sh "ls")
    => {:exit 0, :out "LICENSE\nREADME.md\nauto_deploy.iml\ndoc\nproject.clj\nresources\nsrc\ntarget\ntest\n", :err ""}

    (binding [*sh-dir* "c:/"] (sh "ls"))
{:exit 0,
 :out "$360Section
       $GetCurrent
       $Recycle.Bin
       Boot
       Documents and Settings
       ImbaMallLog.txt
       Intel
       MSOCache
       OEMSY
       PerfLogs
       Program Files
       Program Files (x86)
       ProgramData
       Python27
       Recovery
       System Volume Information
       Users
       Windows
       apache-ant-1.9.3
       bootmgr
       hiberfil.sys
       inetpub
       pagefile.sys
       ",
 :err ""}

см. документ для получения дополнительной информации. вы можете использовать (alter-var-root #'clojure.java.shell/*sh-dir* (constantly "the-cd-path")) для его постоянного изменения. Спасибо, что isaac рассказал мне об этом. Надеюсь, это поможет.