Używam tego w moim .bashrc (a także w .zshrc, ponieważ zwykle używam zsh, jeśli jest dostępny zamiast bash). To prawda, że wymaga ręcznego dodawania katalogów, ale zaletą jest to, że podczas aktualizacji mogę kontynuować kopiowanie na nowe serwery i nie martwić się, że PATH na nowym serwerze jest tworzony z nieistniejącymi katalogami.
##
## PATH
##
## Zamiast po prostu wrzucać naszą ŚCIEŻKĘ do katalogów, które mogą
## nie nadaje się do tego serwera, staraj się być inteligentny w kwestii tego, co dodajemy
##
ŚCIEŻKA = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
[-d / cs / sbin] && PATH = / cs / sbin: $ PATH
[-d / cs / bin] && PATH = / cs / bin: $ PATH
[-d / usr / ucb] && PATH = $ PATH: / usr / ucb
[-d / usr / ccs / bin] && PATH = $ PATH: / usr / ccs / bin
[-d / usr / local / ssl / bin] && PATH = $ PATH: / usr / local / ssl / bin
[-d / usr / krb5 / bin] && PATH = $ PATH: / usr / krb5 / bin
[-d / usr / krb5 / sbin] && PATH = $ PATH: / usr / krb5 / sbin
[-d / usr / kerberos / sbin] && PATH = $ PATH: / usr / kerberos / sbin
[-d / usr / kerberos / bin] && PATH = $ PATH: / usr / kerberos / bin
[-d /cs/local/jdk1.5.0/bin] && PATH = $ PATH: /cs/local/jdk1.5.0/bin
[-d /usr/java/jre1.5.0_02/bin] && PATH = $ PATH: /usr/java/jre1.5.0_02/man
[-d /usr/java1.2/bin] && PATH = $ PATH: /usr/java1.2/bin
[-d /cs/local/perl5.8.0/bin] && PATH = $ PATH: /cs/local/perl5.8.0/bin
[-d / usr / perl5 / bin] && PATH = $ PATH: / usr / perl5 / bin
[-d / usr / X11R6 / bin] && PATH = $ PATH: / usr / X11R6 / bin
[-d / etc / X11] && PATH = $ PATH: / etc / X11
[-d / opt / sfw / bin] && PATH = $ PATH: / opt / sfw / bin
[-d / usr / local / apache / bin] && PATH = $ PATH: / usr / local / apache / bin
[-d / usr / apache / bin] && PATH = $ PATH: / usr / apache / bin
[-d / cs / admin / bin] && PATH = $ PATH: / cs / admin / bin
[-d / usr / openwin / bin] && PATH = $ PATH: / usr / openwin / bin
[-d / usr / xpg4 / bin] && PATH = $ PATH: / usr / xpg4 / bin
[-d / usr / dt / bin] && PATH = $ PATH: / usr / dt / bin
Robię to samo dla mojej MANPATH:
##
## MANPATH
##
## Zamiast po prostu przeszukiwać naszą MANPATH katalogami, które mogą
## nie nadaje się do tego serwera, staraj się być inteligentny w kwestii tego, co dodajemy
##
MANPATH = / usr / local / man
[-d / usr / share / man] && MANPATH = $ MANPATH: / usr / share / man
[-d / usr / local / share / man] && MANPATH = $ MANPATH: / usr / local / share / man
[-d / usr / man] && MANPATH = $ MANPATH: / usr / man
[-d / cs / man] && MANPATH = $ MANPATH: / cs / man
[-d / usr / krb5 / man] && MANPATH = $ MANPATH: / usr / krb5 / man
[-d / usr / kerberos / man] && MANPATH = $ MANPATH: / usr / kerberos / man
[-d / usr / local / ssl / man] && MANPATH = $ MANPATH: / usr / local / ssl / man
[-d /cs/local/jdk1.5.0/man] && MANPATH = $ MANPATH: /cs/local/jdk1.5.0/man
[-d /usr/java/jre1.5.0_02/man] && MANPATH = $ MANPATH: /usr/java/jre1.5.0_02/man
[-d /usr/java1.2/man] && MANPATH = $ MANPATH: /usr/java1.2/man
[-d / usr / X11R6 / man] && MANPATH = $ MANPATH: / usr / X11R6 / man
[-d / usr / local / apache / man] && MANPATH = $ MANPATH: / usr / local / apache / man
[-d / usr / local / mysql / man] && MANPATH = $ MANPATH: / usr / local / mysql / man
[-d /cs/local/perl5.8.0/man] && MANPATH = $ MANPATH: /cs/local/perl5.8.0/man
[-d / usr / perl5 / man] && MANPATH = $ MANPATH: / usr / perl5 / man
[-d / usr / local / perl / man] && MANPATH = $ MANPATH: / usr / local / perl / man
[-d /usr/local/perl5.8.0/man] && MANPATH = $ MANPATH: /usr/local/perl5.8.0/man
[-d / usr / openwin / man] && MANPATH = $ MANPATH: / usr / openwin / man
Oprócz posiadania jednego pliku, który mogę kopiować do systemów w różnych środowiskach bez obawy dodania nieistniejących katalogów do PATH, to podejście ma również tę zaletę, że pozwala mi określić kolejność, w jakiej chcę, aby katalogi pojawiały się w PATH. Ponieważ pierwszy wiersz każdej definicji całkowicie redefiniuje zmienną PATH, mogę zaktualizować plik .bashrc i pobrać go po edycji, aby zaktualizować moją powłokę bez dodawania zduplikowanych wpisów (czego doświadczyłem dawno temu, kiedy po prostu zaczynałem od „ $ PATH = $ PATH: / new / dir ". Dzięki temu otrzymam czystą kopię w żądanej kolejności.
PATH=foo:$PATH
wydaje się niewłaściwy, ponieważ utrzymuje wzrost za każdym razem,source ~/.bashrc
a nawetexec bash
nie może pomóc, ponieważ$PATH
jestexport
.