Directory based environment variable scope - how to implement?

前端 未结 7 512
庸人自扰
庸人自扰 2021-02-04 00:03

I have a set of tools which I need to pass parameters depending on the project I\'m working on. I\'d like to be able to automatically set a couple of environment variables based

相关标签:
7条回答
  • 2021-02-04 00:27

    This is not pretty, but you can use a combination of exported environment variables and the value of $PWD.

    For example:

    export VAR1=prefix
    export prefix${HOME////_}_foo=42
    export prefix${HOME////_}_bar=blah
    

    Then myscript needs only to eval echo \${$VAR1${PWD////_}} to get at the directory based value.

    0 讨论(0)
  • 2021-02-04 00:31

    the ondir program lets you specify actions to run when you enter and leave directories in a terminal

    0 讨论(0)
  • 2021-02-04 00:32

    There is direnv which helps you do this stuff much easily and in an elegant way. Just define a .envrc file in your project directory with all the env variables needed and it will source it once you cd into that folder.

    0 讨论(0)
  • 2021-02-04 00:33

    I do this sort of thing a lot. I create several identically named batch files in directories where I need them that only set the variables and call the common script. I even have a batch file that creates the other small files.

    0 讨论(0)
  • 2021-02-04 00:34

    This is not something that is directly supported with the built-in features of bash or any other common shell. However, you can create your own "cd" command that will do whatever you want. For example, you could alias cd to do the cd and then run a special script (eg: ~/bin/oncd). That script could look up the new directory in a database and run some commands, or see if there's a special file (eg: .env) in the directory and load it, etc.

    0 讨论(0)
  • 2021-02-04 00:34

    How about wrap your script with a function (the function can be placed either in your bash profile/bashrc file in the system ones to make available for all the users ).

    myscript () { case $PWD in
    /path/to/foo) path/to/myscript --var1=$VAR1 ;;
    /path/to/bar) path/to/myscript --var2=$VAR1 ;;
    *) ;;
    case
    }
    

    Hence the function myscript will call the real "myscript" knowing what to do based on the current working directory.

    Take this as an example:

    hmontoliu@ulises:/tmp$ myscript () { case $PWD in /tmp) echo I\'m in tmp;; /var) echo I\'m in var;; *) echo I\'m neither in tmp nor in bar; esac; }
    hmontoliu@ulises:/tmp$ myscript 
    I'm in tmp
    hmontoliu@ulises:/tmp$ cd /var
    hmontoliu@ulises:/var$ myscript 
    I'm in var
    hmontoliu@ulises:/var$ cd /etc
    hmontoliu@ulises:/etc$ myscript 
    I'm neither in tmp nor in bar
    
    0 讨论(0)
提交回复
热议问题