Hello, Could anyone provide any insight into what’s going wrong here? I’m trying to activate a python virtualenv automatically when launching a new fish shell.
Manually doing like below works correctly: > fish > . virtualenv/bin/activate.fish But trying to do this via a script (or even in the fish config file) results in an error: The script, launch_virtualenv: #!/usr/bin/env fish . virtualenv/bin/activate.fish fish Running this outputs: fish: Could not locate end of block. The 'end' command is missing, misspelled or a ';' is missing. /private/tmp/.psub.79274.21540 (line 1): function _old_fish_prompt ^ in . (source) call of file '/private/tmp/.psub.79274.21540', called on line 9 of file '/Users/tim/virtualenv/bin/activate.fish', in . (source) call of file '/Users/tim/virtualenv/bin/activate.fish', called on line 9 of file '/Users/tim/launch_virtualenv', source: Error while reading file '/private/tmp/.psub.79274.21540’ The activate.fish file looks like this. I realise it tells me it cannot be run directly, but I don’t understand why and what’s different about sourcing it in a file and sourcing it in the interactive shell. # This file must be used with ". bin/activate.fish" *from fish* (http://fishshell.org) # you cannot run it directly function deactivate -d "Exit virtualenv and return to normal shell environment" # reset old environment variables if test -n "$_OLD_VIRTUAL_PATH" set -gx PATH $_OLD_VIRTUAL_PATH set -e _OLD_VIRTUAL_PATH end if test -n "$_OLD_VIRTUAL_PYTHONHOME" set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME set -e _OLD_VIRTUAL_PYTHONHOME end if test -n "$_OLD_FISH_PROMPT_OVERRIDE" functions -e fish_prompt set -e _OLD_FISH_PROMPT_OVERRIDE . ( begin printf "function fish_prompt\n\t#" functions _old_fish_prompt end | psub ) functions -e _old_fish_prompt end set -e VIRTUAL_ENV if test "$argv[1]" != "nondestructive" # Self destruct! functions -e deactivate end end # unset irrelevant variables deactivate nondestructive set -gx VIRTUAL_ENV "/Users/tim/code/fa/fieldaware/fieldaware-venv" set -gx _OLD_VIRTUAL_PATH $PATH set -gx PATH "$VIRTUAL_ENV/bin" $PATH # unset PYTHONHOME if set if set -q PYTHONHOME set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME set -e PYTHONHOME end if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" # fish uses a function instead of an env var to generate the prompt. # save the current fish_prompt function as the function _old_fish_prompt . ( begin printf "function _old_fish_prompt\n\t#" functions fish_prompt end | psub ) # with the original prompt function renamed, we can override with our own. function fish_prompt # Prompt override? if test -n "" printf "%s%s%s" "" (set_color normal) (_old_fish_prompt) return end # ...Otherwise, prepend env set -l _checkbase (basename "$VIRTUAL_ENV") if test $_checkbase = "__" # special case for Aspen magic directories # see http://www.zetadev.com/software/aspen/ printf "%s[%s]%s %s" (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal) (_old_fish_prompt) else printf "%s(%s)%s%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal) (_old_fish_prompt) end end set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" end Any tips on how I might get this working? Cheers, Tim ------------------------------------------------------------------------------ October Webinars: Code for Performance Free Intel webinars can help you accelerate application performance. Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from the latest Intel processors and coprocessors. See abstracts and register > http://pubads.g.doubleclick.net/gampad/clk?id=60135991&iu=/4140/ostg.clktrk _______________________________________________ Fish-users mailing list Fish-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/fish-users