
Eu tenho um script de shell que será um cabeçalho a ser importado por outros scripts
Seu principal objetivo é proibir o usuário de "*" e "?" como parâmetros.
Eu já tentei:
1) Para obter acesso à chamada de script via ~/.bash_history Como o ~/.bash_history é atualizado no final da sessão do usuário. Modifiquei o ~/.bashrc com os seguintes parâmetros: shopt -s histappend, PROMPT_COMMAND="history -a;$PROMPT_COMMAND" e também tentei PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND".
Quando defino essa configuração, o sistema começa a atualizar o arquivo ~/.bash_history em tempo de memória. Então, teoricamente, poderei pegar o último comando usado pelo usuário (deve ser a chamada do script) e pesquisar um "*" nele. Mas como você deve saber, um script shell deve especificar o interpretador shell em sua primeira linha como: /bin/bash, assim, ele cria uma nova sessão shell sempre que o script é chamado e esta nova sessão não tem acesso ao histórico de comandos da sessão anterior: Por exemplo:
~>cat hist.sh
#!/bin/bash
var=$(tail -n 1 /home/$USER/.bash_history) # get the last command
echo $var
~>./hist.sh
cat hist.sh # that's the output, it shoud be ./hist.sh
Acho que o arquivo ~/.bash_history é escrito exatamente quando o processo do comando é concluído, é por isso que o ./hist.sh não estava lá, mas é apenas meu palpite.
2) Também tentei usar o histórico e os comandos fc -l -n -0 (atualmente está funcionando no ambiente AIX), mas tive o mesmo problema anterior no Linux.
3) Minha última tentativa foi o seguinte script:
#!/bin/bash
for i in $@
do
if echo $i | grep '*' &> /dev/null
then echo "Invalid parameter *" && exit
else echo "Sucessful"
fi
done
Funciona quando eu uso o arquivo ./script.sh* (o "" + palavras ou "" + palavras), mas isso não acontece quando eu uso o "*" sozinho (./script.sh *), porque o shell expande o * para todos os arquivos do diretório atual antes das instruções if.
Considerei limitar o número de parâmetros para o script, mas como será um cabeçalho útil para muitos outros scripts, o número de argumentos para cada chamada é definitivamente desconhecido.
Alguém poderia ajudar com esse problema? Ficarei muito grato!