Como obter acesso a todos os parâmetros que um usuário usou para chamar um script de shell? Ou proibir o uso de * como parâmetro válido?

Como obter acesso a todos os parâmetros que um usuário usou para chamar um script de shell? Ou proibir o uso de * como parâmetro válido?

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!

informação relacionada