2013-11-29 53 views
1

我見過this question,但它似乎並不適用於此。從SBCL訪問自定義bash腳本

使用SBCL,這工作得很好:

(run-program "/bin/ls"() :output *standard-output*)

那麼,這是否:

(run-program "/Applications/Safari.app/Contents/MacOS/Safari"())

它啓動一個Safari窗口。

我可以在我的bin目錄只是有這它創建一個bash腳本:

/Applications/Safari.app/Contents/MacOS/Safari

當我運行從終端這個bash腳本,Safari瀏覽器打開。

但我不能從裏面SBCL運行此腳本:

(run-program "/Users/myhome/bin/safariscript"())

REPL報道:

Couldn't execute "/Users/myhome/bin/safariscript": Exec format error 
[Condition of type SIMPLE-ERROR] 

劇本肯定自身工作正常。我已經在這個錯誤的意義上搜索了ad nauseum,沒有任何適用於lisp環境的幫助,所以我想知道在這裏玩是否有更廣泛的問題?

回答

3

Shell腳本需要一個shell-bang行,以便通過execve或使用它的任何內容(如run-program)運行。所以,你應該使用它作爲您的文件的內容:

#!/bin/sh 
exec /Applications/Safari.app/Contents/MacOS/Safari 
+0

沒錯,這做到了,感謝 – johnbakers

+0

@OpenLearner它從殼工作的原因是,它會很有幫助(或者「有益」)看到的錯誤exec「,然後轉而」我知道,讓我們來執行我自己的路徑,將腳本的路徑作爲第一個參數!「。然後它看起來像一切都很好,但事實上並非如此。 – Vatine