Make nvm visible to shell children

Shell functions are not automatically exported when declared, which
turned out to be problematic when sourcing the `nvm.sh` file from a
login shell. Non-login shells, which are children of the login shell,
do not see the `nvm` function when it's sourced from `~/.profile` and
other similar profile files.

Take the following code as an example (using bash):

    $ foo() { echo 1; } # in login shell
    $ foo
    1
    $ bash # in non-login shell now
    $ foo
    bash: foo: command not found

`foo` is not seen by the second bash instance, even though it has been
declared by its parent process.

One of the solutions is to export `foo` right after declaring it by
doing `export -f NAME`:

    $ foo() { echo 1; } # in login shell
    $ export -f foo
    $ bash # in non-login shell now
    $ foo
    1

This commit does the same to the `nvm` function and its dependencies.
This commit is contained in:
Mário Feroldi 2019-11-19 15:13:32 -03:00
parent 73a513c389
commit 8d97975bc3
No known key found for this signature in database
GPG Key ID: FABCE15CC919C8ED

101
nvm.sh
View File

@ -3686,4 +3686,105 @@ nvm_process_parameters() {
nvm_process_parameters "$@"
# Export the `nvm` shell function to make it visible to a shell's children.
# This fixes the problem of a non-login shell not being able to use `nvm` when
# it's sourced in the login shell through `~/.profile` et al.
export -f nvm_is_zsh
export -f nvm_stdout_is_terminal
export -f nvm_echo
export -f nvm_cd
export -f nvm_err
export -f nvm_grep
export -f nvm_has
export -f nvm_has_non_aliased
export -f nvm_is_alias
export -f nvm_command_info
export -f nvm_has_colors
export -f nvm_curl_libz_support
export -f nvm_curl_use_compression
export -f nvm_get_latest
export -f nvm_download
export -f nvm_has_system_node
export -f nvm_has_system_iojs
export -f nvm_is_version_installed
export -f nvm_print_npm_version
export -f nvm_install_latest_npm
export -f nvm_tree_contains_path
export -f nvm_find_up
export -f nvm_find_nvmrc
export -f nvm_rc_version
export -f nvm_clang_version
export -f nvm_curl_version
export -f nvm_version_greater
export -f nvm_version_greater_than_or_equal_to
export -f nvm_version_dir
export -f nvm_alias_path
export -f nvm_version_path
export -f nvm_ensure_version_installed
export -f nvm_version
export -f nvm_remote_version
export -f nvm_remote_versions
export -f nvm_is_valid_version
export -f nvm_normalize_version
export -f nvm_ensure_version_prefix
export -f nvm_format_version
export -f nvm_num_version_groups
export -f nvm_strip_path
export -f nvm_change_path
export -f nvm_binary_available
export -f nvm_print_formatted_alias
export -f nvm_print_alias_path
export -f nvm_print_default_alias
export -f nvm_make_alias
export -f nvm_list_aliases
export -f nvm_alias
export -f nvm_ls_current
export -f nvm_resolve_alias
export -f nvm_resolve_local_alias
export -f nvm_iojs_prefix
export -f nvm_node_prefix
export -f nvm_is_iojs_version
export -f nvm_add_iojs_prefix
export -f nvm_strip_iojs_prefix
export -f nvm_ls
export -f nvm_ls_remote
export -f nvm_ls_remote_iojs
export -f nvm_ls_remote_index_tab
export -f nvm_get_checksum_alg
export -f nvm_compute_checksum
export -f nvm_compare_checksum
export -f nvm_get_checksum
export -f nvm_checksum
export -f nvm_print_versions
export -f nvm_validate_implicit_alias
export -f nvm_print_implicit_alias
export -f nvm_get_os
export -f nvm_get_arch
export -f nvm_get_minor_version
export -f nvm_ensure_default_set
export -f nvm_is_merged_node_version
export -f nvm_get_mirror
export -f nvm_install_binary
export -f nvm_get_download_slug
export -f nvm_download_artifact
export -f nvm_get_make_jobs
export -f nvm_install_source
export -f nvm_use_if_needed
export -f nvm_install_npm_if_needed
export -f nvm_match_version
export -f nvm_npm_global_modules
export -f nvm_die_on_prefix
export -f nvm_has_solaris_binary
export -f nvm_sanitize_path
export -f nvm_is_natural_num
export -f nvm_check_file_permissions
export -f nvm_cache_dir
export -f nvm
export -f nvm_get_default_packages
export -f nvm_install_default_packages
export -f nvm_supports_source_options
export -f nvm_supports_xz
export -f nvm_auto
export -f nvm_process_parameters
} # this ensures the entire script is downloaded #