Created
April 4, 2023 18:00
-
-
Save meffie/4f2d1b4ab1d9856cb7d887591c969ba2 to your computer and use it in GitHub Desktop.
Using direnv for project specific program versions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
We have 2 versions of program foo in /usr/bin/. We want to use foo-v1 in | |
project_a and foo-v2 in project_b. | |
$ foo-v1 | |
This is version 1 | |
I am located at /usr/bin/foo-v1 | |
$ foo-v2 | |
This is version 2 | |
I am located at /usr/bin/foo-v2 | |
First create project_a. Create a project specific hidden directory in project | |
a and put a symlink to the foo version we want to use in this project. | |
$ mkdir project_a | |
$ cd project_a | |
$ mkdir -p .direnv/bin | |
$ ln -s /usr/bin/foo-v1 .direnv/bin/foo | |
Create a .envrc file. Specify the PATH_add function to prepend .direnv/bin to | |
the PATH when in project_a. | |
$ echo "PATH_add .direnv/bin" >>.envrc | |
$ direnv allow | |
direnv: loading ~/project_a/.envrc | |
direnv: export ~PATH | |
# Now, foo resolves to foo-v1 when you cd to project_a (or any subdir of project_a) | |
$ cd | |
$ cd project_a | |
direnv: loading ~/project_a/.envrc | |
direnv: export ~PATH | |
$ foo | |
This is version 1 | |
I am located at /home/mmeffie/project_a/.direnv/bin/foo | |
Now create project_b, where foo will resolve to foo-v2. | |
$ mkdir project_b | |
$ cd project_b | |
$ mkdir -p .direnv/bin | |
$ ln -s /usr/bin/foo-v2 .direnv/bin/foo | |
$ echo "PATH_add .direnv/bin" >>.envrc | |
$ direnv allow | |
direnv: loading ~/project_a/.envrc | |
direnv: export ~PATH | |
$ foo | |
This is version 2 | |
I am located at /usr/bin/foo-v2 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment