您不能用普通命令来实现这一点普通命令(shell脚本、python脚本、二进制文件等等)作为主shell进程下的子进程运行,并且不能影响主shell进程的环境。但是shell支持在shell中“发生”的一些类似命令的事情:函数和别名。这两个都需要在shell中定义,然后才能使用它们,所以您需要将定义放在.bash_profile中(或者您的设置中的任何适当的shell init文件,请参见here)。在
我的方法是将setproject定义为一个shell函数,如下所示:# ...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它:
^{pr2}$
在# .../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