1

Я хочу застраховать себя от случайного использования

rm [argument_i] * [argument_j]

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

Какую команду мне добавить в мой .bashrc чтобы включить такую проверку?

Спасибо за любые подсказки.

2 ответа2

1

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

В этом псевдониме вы можете разобрать все.

alias rm='/my/path/myrm.sh'

И этот скрипт может иметь все параметры парсинга, которые вы хотите.

Этот псевдоним должен быть помещен в .bashrc / .bash_profile или даже в / etc / profile, если вы хотите, чтобы он применялся ко всем пользователям.

Редактировать Следующие комментарии ниже, я добавил оболочку, которая отключает * интерпретируется как список всех файлов, и становится просто строкой.

alias rm='set -f; /bin/sh /home/me/test/rm.sh'

Сценарий может начаться так:

#!/bin/sh

if echo "$2" | grep '*' > /dev/null; then
    echo "asterisk!"
else
    echo "hi this is $var1 and $var2 and $var3"
fi 

Тестовое задание:

$ rm a * b
asterisk!
1

Как я предложил в другом вопросе, использование ловушки DEBUG, которая проверяет BASH_COMMAND, поможет:

check_for_wildcard_rm() {
  local rm_glob_re='^rm[[:space:]](.*[[:space:]])?[*]([[:space:]]|$)'
  if [[ $BASH_COMMAND =~ $rm_glob_re ]]; then
    echo "Suppressing rm with a bare *" >&2
    return 1
  fi
  return 0
}
shopt -s extdebug
trap check_for_wildcard_rm DEBUG

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .