为了账号安全,请及时绑定邮箱和手机立即绑定

为什么Fabric使用/ bin / sh

为什么Fabric使用/ bin / sh

慕森卡 2021-03-29 07:04:57
我试图在远程服务器上运行一些命令。我需要在此来源一些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?
查看完整描述

1 回答

?
RISEBY

TA贡献1856条经验 获得超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

事实证明,它不是使用Fabric,/bin/sh而是因为(在这种情况下)我正在运行本地命令,所以罪魁祸首是子流程模块。为了指定要使用的外壳,您需要指定shell=True和executable='/bin/bash'


查看完整回答
反对 回复 2021-03-30
  • 1 回答
  • 0 关注
  • 228 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信