Adding a new entry to the PATH variable in ZSH

后端 未结 6 1975
暗喜
暗喜 2020-11-29 14:43

I\'m using zsh and I\'m trying to add a new entry (/home/david/pear/bin) to the PATH variable but I don\'t know how.

The thing that confuse

相关标签:
6条回答
  • 2020-11-29 15:21

    one liner, without opening ~/.zshrc file

    echo -n 'export PATH=~/bin:$PATH' >> ~/.zshrc
    

    or

    echo -n 'export PATH=$HOME/bin:$PATH' >> ~/.zshrc
    

    To see the effect, do source ~/.zshrc in the same tab or open a new tab

    0 讨论(0)
  • 2020-11-29 15:29
    1. Added path to ~/.zshrc

      sudo vi ~/.zshrc

      add new path

      export PATH="$PATH:[NEW_DIRECTORY]/bin"
      
    2. Update ~/.zshrc

      Save ~/.zshrc

      source ~/.zshrc

    3. Check PATH

      echo $PATH

    0 讨论(0)
  • 2020-11-29 15:35

    Here, add this line to .zshrc:

    export PATH=/home/david/pear/bin:$PATH
    

    EDIT: This does work, but ony's answer below is better, as it takes advantage of the structured interface ZSH provides for variables like $PATH. This approach is standard for bash, but as far as I know, there is no reason to use it when ZSH provides better alternatives.

    0 讨论(0)
  • 2020-11-29 15:35

    You can append to your PATH in a minimal fashion. No need for parentheses unless you're appending more than one element. It also usually doesn't need quotes. So the simple, short way to append is:

    path+=/some/new/bin/dir
    

    This lower-case syntax is using path as an array, yet also affects its upper-case partner equivalent, PATH (to which it is "bound" via typeset).

    (Notice that no : is needed/wanted as a separator.)

    Common interactive usage

    Then the common pattern for testing a new script/executable becomes:

    path+=$PWD/.
    # or
    path+=$PWD/bin
    

    Common config usage

    You can sprinkle path settings around your .zshrc (as above) and it will naturally lead to the earlier listed settings taking precedence (though you may occasionally still want to use the "prepend" form path=(/some/new/bin/dir $path)).

    Related tidbits

    Treating path this way (as an array) also means: no need to do a rehash to get the newly pathed commands to be found.

    Also take a look at vared path as a dynamic way to edit path (and other things).

    You may only be interested in path for this question, but since we're talking about exports and arrays, note that arrays generally cannot be exported.

    You can even prevent PATH from taking on duplicate entries (refer to this and this):

    typeset -U path
    
    0 讨论(0)
  • 2020-11-29 15:38

    OPTION 1: Add this line to ~/.zshrc:

    export "PATH=$HOME/pear/bin:$PATH"
    

    After that you need to run source ~/.zshrc in order your changes to take affect OR close this window and open a new one

    OPTION 2: execute it inside the terminal console to add this path only to the current terminal window session. When you close the window/session, it will be lost.

    0 讨论(0)
  • 2020-11-29 15:41

    Actually, using ZSH allows you to use special mapping of environment variables. So you can simply do:

    # append
    path+=('/home/david/pear/bin')
    # or prepend
    path=('/home/david/pear/bin' $path)
    # export to sub-processes (make it inherited by child processes)
    export PATH
    

    For me that's a very neat feature which can be propagated to other variables. Example:

    typeset -T LD_LIBRARY_PATH ld_library_path :
    
    0 讨论(0)
提交回复
热议问题