
Tengo un script de shell que será una especie de encabezado que otros scripts importarán.
Su principal objetivo es prohibir al usuario "*" y "?" como parámetros.
Ya lo he probado:
1) Para obtener acceso a la llamada del script a través de ~/.bash_history A medida que ~/.bash_history se actualiza al final de la sesión del usuario. Modifiqué ~/.bashrc con los siguientes parámetros: shopt -s histappend, PROMPT_COMMAND="history -a;$PROMPT_COMMAND" y también probé PROMPT_COMMAND="history -a; History -c; History -r; $PROMPT_COMMAND".
Cuando configuro esta configuración, el sistema comienza a actualizar el archivo ~/.bash_history en el tiempo de memoria. Entonces, en teoría, podré obtener el último comando utilizado por el usuario (esa debería ser la llamada del script) y buscar un "*" en él. Pero como ya sabrá, un script de shell debe especificar el intérprete de shell en su primera línea como: /bin/bash, por lo tanto, crea una nueva sesión de shell cada vez que se llama al script y esta nueva sesión no tiene acceso. al historial de comandos de la sesión anterior: Por ejemplo:
~>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
Creo que el archivo ~/.bash_history se escribe justo cuando finaliza el proceso del comando, es por eso que ./hist.sh no estaba allí, pero es solo mi suposición.
2) También intenté usar el historial y los comandos fc -l -n -0 (esto funciona actualmente en el entorno AIX), pero tuve el mismo problema anterior en Linux.
3) Mi último intento fue el siguiente guión:
#!/bin/bash
for i in $@
do
if echo $i | grep '*' &> /dev/null
then echo "Invalid parameter *" && exit
else echo "Sucessful"
fi
done
Funciona cuando uso el archivo ./script.sh* (el "" + palabras o "" + palabras), pero no es así cuando uso el "*" solo (./script.sh *), porque el shell expande el * a todos los archivos del directorio actual antes de las declaraciones if.
He considerado limitar la cantidad de parámetros para el script, pero como será un encabezado útil para muchos otros scripts, definitivamente se desconoce la cantidad de argumentos para cada llamada.
¿Alguien podría ayudar con este problema? ¡Estaré muy agradecido!