猿问

为什么Fabric使用/ bin / sh

我试图在远程服务器上运行一些命令。我需要在此来源一些bash文件。不幸的是,fabric似乎已经(突然之间,最近?)开始使用/bin/sh,并且由于我在脚本中使用bash语法而中断了。我发现了这个:

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

我还没有更改env.shell,所以我不知道为什么fabric开始使用sh。无论如何,我都将其覆盖,但是仍然没有运气:

env.shell = "/bin/bash"

是什么原因造成的?我该如何强迫面料使用bash


慕森卡
浏览 229回答 1
1回答

RISEBY

进行了一些挖掘,但这是我发现的内容:可以看到幕后结构在做什么:from   fabric.api                                        import outputFAB_SHOW_RUNNING  = True   # Show the command that fabric runsFAB_SHOW_STDOUT   = False  # Show the stdout of the command runFAB_SHOW_STDERR   = False  # Show the stderr of the command runFAB_SHOW_DEBUG    = True   # Increase logging detail for messagesFAB_SHOW_USER     = TrueFAB_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 commandsoutput['running']  = FAB_SHOW_RUNNINGoutput['stdout']   = FAB_SHOW_STDOUToutput['stderr']   = FAB_SHOW_STDERRoutput['debug']    = FAB_SHOW_DEBUGoutput['user']     = FAB_SHOW_USERoutput['status']   = FAB_SHOW_STATUSoutput['warnings'] = FAB_SHOW_WARNINGS事实证明,它不是使用Fabric,/bin/sh而是因为(在这种情况下)我正在运行本地命令,所以罪魁祸首是子流程模块。为了指定要使用的外壳,您需要指定shell=True和executable='/bin/bash'
随时随地看视频慕课网APP

相关分类

Python
我要回答