Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bash snippet in README.md is very slow - here is a faster alternative #3508

Open
akarelas opened this issue Jan 11, 2025 · 4 comments
Open

Comments

@akarelas
Copy link

Operating system and version: Linux with bash and perl interpreter

The bash snippet suggested at https://github.com/nvm-sh/nvm?tab=readme-ov-file#bash is tremendously slow - on every single 'cd' the user types, there is a delay before reaching the target dir, regardless of whether the same or a different version of node needs to be used, and this can be counter-productive and annoying.

This is why I wrote the following .bashrc snippet, which can replace the aforementioned. Nevertheless, it uses Perl (even though it's a .bashrc snippet). However, if you do have Perl installed, it is incredibly faster than the (currently) official one.

cdnvm() {
    command cd "$@" || return $?
    eval $(perl <<'END'
        use File::Basename;
        use Cwd;
        use feature 'say';
        
        my $dir = getcwd;
        while (1) {
            if (-f "$dir/.nvmrc") {
                my $current_v = `node -v` =~ s/^v|\s+\z//gr;
                open my $fh, '<', "$dir/.nvmrc" or die "Couldn't read $dir/.nvmrc: $!";
                my $this_v = <$fh> =~ s/^v|\s+\z//gr;
                if ($this_v ne $current_v) {
                    say 'nvm use';
                }
                last;
            }
            last if $dir eq '/';
            $dir = dirname $dir;
        }
END
    )
}

alias cd='cdnvm'
cdnvm "$PWD" || exit
@ljharb
Copy link
Member

ljharb commented Jan 12, 2025

Given that perl isn't guaranteed to be installed, I'm not sure it makes sense to add this to the readme.

@akarelas
Copy link
Author

Maybe someone or some AI can translate it to bash?

@akarelas

This comment has been minimized.

@ljharb
Copy link
Member

ljharb commented Feb 3, 2025

I wouldn't inflict AI output on anyone; if someone who's an expert in both bash and perl can manually translate it, that'd be great - otherwise it's best omitted.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants