From 8d97975bc329b8020c6b5f8485c5e9811db5ab60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rio=20Feroldi?= Date: Tue, 19 Nov 2019 15:13:32 -0300 Subject: [PATCH] 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. --- nvm.sh | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/nvm.sh b/nvm.sh index 639165c..822c401 100644 --- a/nvm.sh +++ b/nvm.sh @@ -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 #