Вы не можете сделать это с помощью обычной команды - обычные команды (сценарии оболочки, сценарии Python, двоичные файлы и т. Д.) Выполняются как подпроцесс в основном процессе оболочки и не могут влиять на среду основного процесса оболочки.Но оболочка поддерживает несколько командных вещей, которые «происходят» в самой оболочке: функции и псевдонимы.Оба они должны быть определены в оболочке, прежде чем их можно будет использовать, поэтому вам нужно будет поместить определение в .bash_profile (или в любой другой файл инициализации оболочки, который есть в вашей настройке - см. здесь ).
Я бы сделал так, чтобы определить setproject
как функцию оболочки, примерно так:
# ...in shell init file...
setproject() {
if [ some_test_for_project_validity ]; then
export PROJECT="$1"
else
echo "setproject: $1 is not a valid project name" >&2
return 1
fi
}
Логика, которая вам здесь нужна, слишком сложна, чтобы ее можно было использовать.псевдоним (они гораздо проще и тупее, чем функции), но вы можете поместить настоящий скрипт в отдельный файл и использовать псевдоним, чтобы избежать необходимости явно source
it:
# ...in shell init file...
alias setproject='source /path/to/setproject'
# .../path/to/setproject...
# note no shebang, since it won't be run as a normal command
if [ some_test_for_project_validity ]; then
export PROJECT="$1"
else
echo "setproject: $1 is not a valid project name" >&2
return 1 # In a file to be source'd, use return instead of exit
fi