
他のスクリプトによってインポートされるヘッダーのようなものになるシェルスクリプトがあります
その主な目的は、ユーザーがパラメータとして「*」と「?」を使用することを禁止することです。
すでに試しました:
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ファイル*(「「 + 単語または」「+ 単語」のように機能しますが、「*」だけを使用した場合 (./script.sh *) は機能しません。これは、シェルが if ステートメントの前に現在のディレクトリのすべてのファイルに * を展開するためです。
スクリプトのパラメータの数を制限することを検討しましたが、これは他の多くのスクリプトに役立つヘッダーとなるため、各呼び出しの引数の数は確かに不明です。
誰かこの問題を解決してもらえませんか? 大変助かります!