Я знаю, что этот вопрос задает вопрос о BASH, который каждый должен предпочесть, но, поскольку я наслаждаюсь симметрией, а иногда мне необходимо использовать «csh», я создал эквивалент «path_prepend ()», «path_append ()» и "path_remove ()" элегантное решение выше.
Суть в том, что "csh" не имеет функций, поэтому я поместил небольшие сценарии оболочки в свой личный каталог bin, которые действуют как функции. Я создаю псевдонимы для ИСТОЧНИКА этих сценариев, чтобы внести изменения в назначенную переменную среды.
~ / bin / _path_remove.csh:
set _resolve = `eval echo $2`
setenv $1 `eval echo -n \$$1 | awk -v RS=: -v ORS=: '$1 != "'${_resolve}'"' | sed 's/:$//'`;
unset _resolve
~ / bin / _path_append.csh:
source ~/bin/_path_remove.csh $1 $2
set _base = `eval echo \$$1`
set _resolve = `eval echo $2`
setenv $1 ${_base}:${_resolve}
unset _base _resolve
~ / bin / _path_prepend.csh:
source ~/bin/_path_remove.csh $1 $2
set _base = `eval echo \$$1`
set _resolve = `eval echo $2`
setenv $1 ${_resolve}:${_base}
unset _base _resolve
~ / bin / .cshrc:
…
alias path_remove "source ~/bin/_path_remove.csh '\!:1' '\!:2'"
alias path_append "source ~/bin/_path_append.csh '\!:1' '\!:2'"
alias path_prepend "source ~/bin/_path_prepend.csh '\!:1' '\!:2'"
…
Вы можете использовать их вот так ...
%(csh)> path_append MODULEPATH ${HOME}/modulefiles