Хотя функция обычно является хорошим выбором, как говорили здесь другие.Но я хотел бы отметить, что есть случаи, когда функция не работает и псевдоним делает, или другие случаи, сценарий-оболочка - лучший выбор.
псевдоним работает, функция не работаети еще можно передавать параметры.
Например: я хочу создать ярлык для активации conda
и создать среду conda в одной команде.Было бы соблазн сделать это:
function conda_activate(){
export PATH="$PATH:/path/to/conda"
envname=$1
if [ "x$envname" -ne "x" ]; then
source activate "$envname"
fi
}
Это не работает, как задумано.Если один бежал conda_activate myenv
.Команда source
выполняет поиск, но немедленно завершает работу, и у запущенной оболочки нет среды.
Рабочее решение выглядит следующим образом:
function conda_activate(){
export PATH="$PATH:/path/to/conda"
# do some other things
}
alias conda_env='conda_activate; source activate'
# usage example
conda_env myenv
скрипт-оберткалучший выбор
Мне случалось несколько раз, что псевдоним или функция не могут быть найдены при входе в систему через ssh
или при переключении имен пользователей или многопользовательской среде.Существуют советы и рекомендации по работе с файлами точек поиска, например, этот интересный: alias sd='sudo '
позволяет этому alias install='sd apt-get install'
работать как положено.Обратите внимание на дополнительный пробел в sd='sudo '
.Но когда вы сомневаетесь, скрипт-обертка всегда является наиболее надежным и переносимым решением.