2017-03-09 51 views
0

我簡單的Fab文件不能我的FreeBSD系統上運行:Python的面料上的FreeBSD不能執行二進制

from fabric.api import run, env 
env.shell = '/usr/local/bin/bash' #Fabric doesn't know where to get bash on BSD correctly 

def host_type(): 
    run('uname') 

首先,我得到一個錯誤有關的外殼,至極我可以通過指定如圖所示的shell變量修復。 但後來我還是有錯誤:

/usr/bin/uname: /usr/bin/uname: cannot execute binary file.

回答

1

似乎根據的bash(1)的手冊頁,如:

Bash is an sh-compatible command language interpreter that executes commands read from the start input or from a file.

這意味着我們可以給慶典唯一的輸入是一個腳本或輸入通過stdin管道。但隨着-c選項

-c If the -c option is present, then commands are read from the first non-option argument command_string,...

因此,解決辦法是使用外殼與-c選項如下:

env.shell = '/usr/local/bin/bash -c' 

再完美的作品,我不不知道爲什麼針對unix系統的結構外殼對於在服務器上工作時如此陌生。

+1

從[docs/FAQS](http://docs.fabfile.org/en/1.6/faq.html#my-remote-system-doesn-t-have-bash-installed-by-default-do -i-need-to-install-bash):「雖然Fabric是用6bash編寫的,但這不是絕對的要求。」因此,如果你想使用FreeBSD,默認情況下它不使用bash([「Linux用戶常常驚訝地發現Bash不是FreeBSD的默認shell,事實上,Bash不包含在默認安裝中。」] (https://www.freebsd.org/doc/en/articles/linux-users/shells.html))。那麼您需要相應地配置Fabric,如他們在FAQ中所述。 – YellowShark

相關問題