我正在编写一个shell脚本来保存一些击键并避免拼写错误。我想将脚本保存为调用内部方法/函数的单个文件,并在出现问题而不离开终端时终止函数。
my_script.sh
#!/bin/bash
exit_if_no_git() {
# if no git directory found, exit
# ...
exit 1
}
branch() {
exit_if_no_git
# some code...
}
push() {
exit_if_no_git
# some code...
}
feature() {
exit_if_no_git
# some code...
}
bug() {
exit_if_no_git
# some code...
}
我想通过以下方式致电:
$ branch
$ feature
$ bug
$ ...
我知道我可以在source git_extensions.sh
中.bash_profile
,但当我执行其中一个命令并且没有.git
目录时,它会按预期exit 1
但是这样也退出终端本身(因为它来源)。
是否有exit
函数的替代方法,这些函数也会退出终端?
答案 0 :(得分:2)
不是定义函数exit_if_no_git
,而是将其定义为has_git_dir
:
has_git_dir() {
local dir=${1:-$PWD} # allow optional argument
while [[ $dir = */* ]]; do # while not at root...
[[ -d $dir/.git ]] && return 0 # ...if a .git exists, return success
dir=${dir%/*} # ...otherwise trim the last element
done
return 1 # if nothing was found, return failure
}
......以及其他地方:
branch() {
has_git_dir || return
# ...actual logic here...
}
这样功能就会短路,但不会发生shell级别退出。
还可以使用source
退出return
d文件,防止其中的后续功能被定义,如果return
在此类文件中的顶层运行