rm
特定の状況で except の使用を無効にしたい。remove
ファイルで呼び出される関数を作成しました.sh
が、実際に呼び出す前に課したい特定のチェックを通過しますrm
。ただし、ターミナルに移動して、rm
を使用するのではなく、単に関数を呼び出すこともできremove
ます。rm
によって呼び出された場合を除いて、機能を無効にする方法はありremove
ますか? rm
端末にログインするユーザーにとって機能が「存在しない」ようにしたいのですが、「存在する」のは削除機能だけです。
たぶんさらに一歩進んで、ユーザーがそれを呼び出すrm
と、使用するようにというステートメントが画面に出力されますremove
。
より広範な質問として、特定の状況を除いて端末コマンドを無効にする方法はありますか? root を必要とする のエイリアスを作成できることはわかっていrm
ますが、それは簡単で不便な方法です。
#!/bin/bash
function rm {
if [ $# -le 0 ]; then
echo "Error: no arguments specified."
else
hasDir=0
for arg in "$@"; do
if [ -d "$arg" ]; then hasDir=1; fi
done
ac="Action canceled."
resp=("y" "n" "e")
sure=" "
while [ "$sure" != "y" ] && [ "$sure" != "n" ]; do
read -p "PERMANENT ACTION. Are you sure? (y/n): " sure
done
if [ "$sure" == "n" ]; then echo "$ac"; return; fi
if [ $hasDir -eq 1 ]; then
direc=" "
validResp=0
while [ $validResp -eq 0 ]; do
read -p "Remove all sub-directories? (y/n/e): " direc
for ans in "${resp[@]}"; do
if [ "$direc" == "$ans" ]; then validResp=1; fi
done
done
if [ "$direc" == "e" ]; then echo "$ac"; return; fi
else
direc="n"
fi
check=" "
validResp=0
while [ $validResp -eq 0 ]; do
read -p "Verify removal of each file? (y/n): " check
for ans in "${resp[@]}"; do
if [ "$check" == "$ans" ]; then validResp=1; fi
done
done
if [ "$check" == "e" ]; then echo "$ac"; return; fi
if [ "$direc" == "n" ]; then
if [ "$check" == "n" ]; then
for file in "$@"; do
if [ ! -d "$file" ]; then command rm -f "$file"; fi
done
else
for file in "$@"; do
if [ ! -d "$file" ]; then command rm -i "$file"; fi
done
fi
else
if [ "$check" == "n" ]; then
command rm -rf "$@"
else
command rm -ir "$@"
fi
fi
fi
}