2014-02-13 108 views
0

我使用的是從System.ProcessrunCommand但我用如何在特定目錄下運行命令?

"cd " ++ path ++ " & " ++ args 

而且這也不好,如果路徑是Windows不同的本地驅動器上,甚至會無法正常工作。

如何處理runCommand的當前目錄更改?

+1

您是否從'System.Directory'嘗試過[setCurrentDirectory](http://hackage.haskell.org/package/directory-1.2.0.1/docs/System-Directory.html#v:setCurrentDirectory)?也許如果你在使用'runCommand'之前設置了主程序的工作目錄,那麼該命令就會在該目錄下運行。 –

+0

@enoughreptocomment謝謝,這就是我需要的。 – Cynede

+0

我已將我的評論更改爲答案,因爲它聽起來很有效。 –

回答

4

setCurrentDirectorySystem.Directory改變了主程序的工作目錄。

如果在使用runCommand之前執行此操作,該命令也應該使用該目錄。

2

通過查看runCommand的源代碼,你可以意識到僅僅是一個薄的包裝createProcess這是一個真正的工作。下面是從createProcess documentation取得的一個例子,爲了方便解決這個問題,編輯了這個例子。

(_, Just hout, _, _) <- createProcess (proc "/path/to/my/executable" []) 
          { cwd = Just "/path/to/working-directory" 
          , std_out = CreatePipe } 
+0

奇怪,我得到'createProcess:不存在(沒有這樣的文件或目錄)' – Cynede

+0

可執行文件的當前目錄由'cwd'指定。我認爲如果你的可執行文件不在你的env變量'PATH'中,你仍然需要將可執行文件的完整路徑傳遞給'proc'。 –

+0

我編輯了這個例子來澄清我的觀點。 –

相關問題