the path context manager seems to fail when trying to append path on FreeBSD/csh containing unescaped characters like $, ~ and .. It also seems to add unneeded extra quotes.
E.g., with bower installed locally:
env.directory = '~/'
env.venv_activate = 'bin/activate.csh'
env.venv = env.directory + 'venv/'
env.use_shell = False
env.add_to_path = [
env.directory + 'node_modules/bower/bin',
env.directory + 'node_modules/uglifyjs/bin',
env.directory + 'node_modules/yuglify/bin',
with cd(env.directory), prefix('source ' + env.venv + env.venv_activate), path(":".join(env.add_to_path)):
fab staging deploy
[freebsd] run: npm install
[freebsd] out: Bad : modifier in $ (").
Fatal error: run() received nonzero return code 1 while executing!
Requested: npm install
Executed: cd ~/ && source ~/venv/bin/activate.csh && export PATH="$PATH:"~/node_modules/bower/bin/:~/node_modules/yuglify/bin/:~/node_modules/uglify-js/bin/"" && npm install
also export is probably not working anyway in csh, should be setenv I think.
Forgot to mention I'm on Python 2.7.9, Fabric 1.10.1.
It looks like something somewhere is over-quoting the path string. In the "Executed" line, we see:
[...] export PATH="$PATH:"[...]"" [...]
i.e. we're opening quotes before $PATH, then opening again after the : (causing csh to complain) and then closing both sets at the end.
csh behaviour with quoting and backslashes is strange. I had similar problems and found a fix: You need to set backslash_quote in csh. See pull request #1483. Feedback welcome.
Please comment if the setting from #1483 is insufficient and we can reopen - thanks! (Though - I'll note that Fabric 1's aggressively "helpful" autoquoting is generally problematic and won't be present by default in 2.x.)
Still getting the same error. However I'm not currently using path() so I'm fine with leaving it this way and eventually retesting on 2.x.