Когда я пытаюсь запустить мою функцию bash, определенную в .bashrc, во второй раз в том же терминале, она не работает.
Код следующий:
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
и ничего не происходит.
Встроенная функция getopts
отслеживает, как далеко она прошла через опции через переменную OPTIND
. Во второй раз, когда вы запускаете функцию, $OPTIND
сохраняет свое значение из предыдущего вызова, поэтому оболочка считает, что она уже завершила обработку параметров. См. Описание getopts
в руководстве для получения дополнительной информации.
Объявите OPTIND
и OPTARG
как локальные для функции.
В вашей функции есть еще одна ошибка, заключающаяся в том, что ~
не раскрывается между двойными кавычками. Сделайте это local cdir=~/mydirectory
или local cdir="$HOME/mydirectory"