
다른 스크립트에서 가져올 헤더와 같은 쉘 스크립트가 있습니다.
주요 목표는 "*" 및 "?" 사용자를 금지하는 것입니다. 매개변수로.
나는 이미 시도했습니다:
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 commds(현재 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 파일*("" + 단어 또는 "" + 단어), 그러나 "*"만 단독으로 사용할 때는 그렇지 않습니다(./script.sh *). 왜냐하면 쉘이 *를 if 문 앞의 현재 디렉토리의 모든 파일로 확장하기 때문입니다.
스크립트의 매개변수 수를 제한하려고 고려했지만 다른 많은 스크립트에 유용한 헤더가 될 것이므로 각 호출에 대한 인수 수는 확실히 알 수 없습니다.
누군가 이 문제를 도와줄 수 있나요? 정말 감사하겠습니다!