n.b. a maior parte desta resposta fez muito mais sentido antes da edição da questão:)
O erro é simples:
if [ "$1" == "proto" ]; then
TESTVAR=
if [ "$1" == "set" ]; then
HISTFILE=$2
HISTFILESIZE=$3
elif [ "$1" == "incognito" ]; then
# ....
O segundo if
aqui deve ser elif
. bash
está reclamando porque não consegue encontrar fi
correspondente.
Há também duas outras coisas que gostaria de mencionar sobre o script:
-
Isso será executado em uma subshell e executará a saída do comando
unset
, que não é o que você deseja:$(unset HISTFILE)
Você deve remover o operador
$(...)
dele. -
O
#!/bin/bash
implica que o script é executável como um argumento para o/bin/bash
binário. Isso não faz sentido para um script como este, então eu aconselharia contra ele (e eu aconselharia contra a configuração da permissão executável sobre ele).
Uma última coisa. A análise de argumentos via nested if / else é uma maneira desajeitada de fazer as coisas. Você pode usar uma instrução case
:
case $1 in
(proto) TESTVAR= ;;
(set)
HISTFILE=$2
HISTFILESIZE=$3
;;
#...etc...
("")
# ... put your usage here...
;;
(*)
echo >&2 "ERROR: Option unrecognized"
echo >&2
echo >&2 "run . ./history.bash for help"
;;
esac
Fazendo o script funcionar em zsh:
- Substituir o uso de
==
por=
. O operador==
é um alias não padrão para o operador=
, e esse é um dos casos em que ele é quebrado. - Renomear
HISTFILESIZE
paraSAVEHIST