mirror of
https://github.com/asdf-vm/asdf.git
synced 2024-11-15 01:28:17 -07:00
9116e8453d
Add a "shell" command similar to the existing "global" and "local" commands, which sets the version in an environment variable instead of writing it to a file. This was inspired by the similar functionality in rbenv. It works by adding a wrapper function for the asdf command. It forwards to a "sh-shell" command that returns the exports as shell code which is then evaled by the wrapper. This is a little gross, but we need to run the code in the shell context in order to set variables. Resolves #378
31 lines
760 B
Fish
31 lines
760 B
Fish
#!/usr/bin/env fish
|
|
|
|
set -x ASDF_DIR (dirname (status -f))
|
|
set -l asdf_data_dir (
|
|
if test -n "$ASDF_DATA_DIR"; echo $ASDF_DATA_DIR;
|
|
else; echo $HOME/.asdf; end)
|
|
|
|
# Add asdf to PATH
|
|
set -l asdf_bin_dirs $ASDF_DIR/bin $ASDF_DIR/shims $asdf_data_dir/shims
|
|
|
|
for x in $asdf_bin_dirs
|
|
if begin not contains $x $fish_user_paths; and test -d $x; end
|
|
set -gx fish_user_paths $fish_user_paths $x
|
|
end
|
|
end
|
|
|
|
# Add function wrapper so we can export variables
|
|
function asdf
|
|
set command $argv[1]
|
|
set -e argv[1]
|
|
|
|
switch "$command"
|
|
case "shell"
|
|
# eval commands that need to export variables
|
|
source (env ASDF_SHELL=fish asdf "sh-$command" $argv | psub)
|
|
case '*'
|
|
# forward other commands to asdf script
|
|
command asdf "$command" $argv
|
|
end
|
|
end
|