2017-03-09 10 views
0

私の簡単なのFabファイルは私のFreeBSDシステム上で実行することはできません実行することはできません。Pythonのファブリックはバイナリ

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') 

最初に私が示したように、私はシェル変数を指定することによって修正することができますWICH、シェルに関するエラーが発生します。

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

答えて

1

それはbashの(1)のmanページによるように思える: はしかし、その後、私はまだエラー持っている私たちbashを与えることができる唯一の入力を意味

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を念頭に置いて書かれていますが、絶対的な要件ではありません。したがって、デフォルトでbashを使用しないFreeBSDを使用したいのであれば(Linuxユーザーは、FreeBSDのデフォルトシェルではないことに驚くことがありますが、実際にはBashはデフォルトインストールに含まれていません。 (https://www.freebsd.org/doc/en/articles/linux-users/shells.html))。 FabricをFAQに記載されているように適切に設定する必要があります。 – YellowShark

関連する問題