def _prefix_env_vars(command, local=False):
"""
Prefixes ``command`` with any shell environment vars, e.g. ``PATH=foo ``.
Currently, this only applies the PATH updating implemented in
`~fabric.context_managers.path` and environment variables from
`~fabric.context_managers.shell_env`.
Will switch to using Windows style 'SET' commands when invoked by
``local()`` and on a Windows localhost.
"""
env_vars = {}
# path(): local shell env var update, appending/prepending/replacing $PATH
path = env.path
if path:
if env.path_behavior == 'append':
path = '$PATH:\"%s\"' % path
elif env.path_behavior == 'prepend':
path = '\"%s\":$PATH' % path
elif env.path_behavior == 'replace':
path = '\"%s\"' % path
env_vars['PATH'] = path
# shell_env()
env_vars.update(env.get('docker_shell_env'))
if env_vars:
set_cmd, exp_cmd = '', ''
if win32 and local:
set_cmd = 'SET '
else:
exp_cmd = 'export '
exports = ' '.join(
'%s%s="%s"' % (set_cmd, k, v if k == 'PATH' else _shell_escape(v))
for k, v in env_vars.iteritems()
)
shell_env_str = '%s%s && ' % (exp_cmd, exports)
else:
shell_env_str = ''
return "%s%s" % (shell_env_str, command)
评论列表
文章目录