Как получить доступ ко всем параметрам, которые пользователь использовал для вызова скрипта оболочки? Или запретить использование * в качестве допустимого параметра?

Как получить доступ ко всем параметрам, которые пользователь использовал для вызова скрипта оболочки? Или запретить использование * в качестве допустимого параметра?

У меня есть скрипт оболочки, который будет своего рода заголовком, импортируемым другими скриптами.

Его главная цель — запретить пользователю использовать «*» и «?» в качестве параметров.

Я уже пробовал:

1) Чтобы получить доступ к вызову скрипта через ~/.bash_history Поскольку ~/.bash_history обновляется в конце сеанса пользователя, я изменил ~/.bashrc со следующими параметрами: shopt -s histappend, PROMPT_COMMAND="history -a;$PROMPT_COMMAND" и также попробовал PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND".

Когда я устанавливаю этот параметр, система начинает обновлять файл ~/.bash_history в памяти. Поэтому, теоретически, я смогу получить последнюю команду, использованную пользователем (это должен быть вызов скрипта) и выполнить поиск "*" в ней. Но, как вы, возможно, знаете, скрипт оболочки должен указывать интерпретатор оболочки в своей первой строке, например: /bin/bash, таким образом, он создает новый сеанс оболочки каждый раз, когда вызывается скрипт, и этот новый сеанс не имеет доступа к истории команд предыдущего сеанса: Например:

~>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

Я думаю, что файл ~/.bash_history записывается как раз тогда, когда процесс команды завершается, поэтому ./hist.sh там не было, но это всего лишь мое предположение.

2) Я также пытался использовать историю и команды fc -l -n -0 (в настоящее время это работает в среде AIX), но у меня возникла та же самая проблема в Linux.

3) Моя последняя попытка была следующим сценарием:

#!/bin/bash

for i in $@ 
do
        if echo $i | grep  '*' &> /dev/null
        then echo "Invalid parameter *" && exit
        else echo "Sucessful"
        fi 
done

Это работает, когда я использую файл ./script.sh* (файл "" + слова или "" + words), но этого не происходит, когда я использую только "*" (./script.sh *), поскольку оболочка расширяет * на все файлы текущего каталога перед операторами if.

Я рассматривал возможность ограничения количества параметров для скрипта, но поскольку это будет заголовок, полезный для многих других скриптов, количество аргументов для каждого вызова определенно неизвестно.

Может ли кто-нибудь помочь с этой проблемой? Буду очень благодарен!

Связанный контент