为什么面料使用/ bin / sh

时间:2013-06-05 21:45:23

标签: python fabric

我正在尝试在远程服务器上运行某些命令。我需要在那里获取一些bash文件。不幸的是,似乎结构(突然,最近?)开始使用/bin/sh,并且它因我在脚本中使用bash语法而中断。我找到了this

  

如果shell为True(默认值),run将通过shell解释器执行给定的命令字符串,其值可以通过设置env.shell来控制(默认为类似于/ bin / bash -l -c) “”。)当shell为True时,命令中的任何双引号(“)或美元符号($)字符将自动转义。

我没有更改env.shell,所以我不知道为什么Fabric开始使用sh。在任何情况下,我都会覆盖它,但仍然没有运气:

env.shell = "/bin/bash"

可能导致这种情况的原因是什么?我该怎样做才能强制结构使用bash

1 个答案:

答案 0 :(得分:5)

需要一些挖掘,但这是我发现的:

可以看到幕后正在做什么面料:

from   fabric.api                                        import output

FAB_SHOW_RUNNING  = True   # Show the command that fabric runs
FAB_SHOW_STDOUT   = False  # Show the stdout of the command run
FAB_SHOW_STDERR   = False  # Show the stderr of the command run
FAB_SHOW_DEBUG    = True   # Increase logging detail for messages
FAB_SHOW_USER     = True
FAB_SHOW_STATUS   = False  # Prevent fabric from using print in some situations (at least in disconnect_all)
FAB_SHOW_WARNINGS = False  # Avoid fabric from showing messages about failed commands

output['running']  = FAB_SHOW_RUNNING
output['stdout']   = FAB_SHOW_STDOUT
output['stderr']   = FAB_SHOW_STDERR
output['debug']    = FAB_SHOW_DEBUG
output['user']     = FAB_SHOW_USER
output['status']   = FAB_SHOW_STATUS
output['warnings'] = FAB_SHOW_WARNINGS

事实证明它不是使用/bin/sh的结构,但是,因为我(在这种特殊情况下)运行本地命令,罪魁祸首是subprocess模块。要指定要使用的shell,您需要指定shell=Trueexecutable='/bin/bash'