Ответ 1
Вы не можете сделать это на Java, поэтому вы не можете сделать это в Clojure. См. Изменение текущего рабочего каталога на Java?
То, что я ищу, - это взаимодействие командной строки в командной строке Windows:
C:\temp1>clj some_script.clj
C:\temp2>
Где some_script.clj содержит что-то вроде:
(cd "c:\\temp2")
Итак, вопрос в том, как реализовать функцию cd? Экспериментировали с clojure.java.shell, но это не похоже на lib, который мне нужен. Это может быть простой вопрос, может быть, проблема в том, что я не владею Java?!
Вы не можете сделать это на Java, поэтому вы не можете сделать это в Clojure. См. Изменение текущего рабочего каталога на Java?
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 рассказал мне об этом.
Надеюсь, это поможет.