当我尝试在同一个终端中第二次运行在 .bashrc 中定义的 bash 函数时,它不起作用。
代码如下:
function nos (){
local option
while getopts cs option
do
case $option in
s)
#start my server
;;
c)
local cdir="~/mydirectory"
local cdir_arg=""
case $OPTARG in
p)
local cdir_arg="anotherdirectory"
;;
esac
local cdir="${cdir}${cdir_arg}"
cd $cdir
;;
*)
echo 'This function doesnt have Super Cow Powers'
return 1
;;
esac
done
}
我运行这个:
nos -c
它进入 ~/mydirectory
好的,成功了。
但后来我这样做了:
cd ~
nos -c
什么也没有发生。
答案1
内置函数getopts
会跟踪它通过变量处理选项的程度OPTIND
。第二次运行该函数时,它$OPTIND
保留了上次调用的值,因此 shell 认为它已经完成了选项的处理。请参阅getopts
请参阅手册以获取更多信息。
OPTIND
将和声明OPTARG
为函数的局部。
您的函数中还有另一个错误,即~
未在双引号之间展开。请将其local cdir=~/mydirectory
或local cdir="$HOME/mydirectory"