Нет необходимости в стирании, так как вы уже даете оба игнорирования.
Ignoreboth позаботится о дубликатах и командах с пробелами.
Просто попробуйте игнорировать оба или удалить дубликаты.
"HISTCONTROL=ignoreboth"
Используйте только это и перезагрузите bash. Спасибо.
У меня работает следующий скрипт
#!/bin/bash
if [ -r.grepignore ]; then
while read -r line; do
if [[ "$line" =~ '#' ]] || [[ "$line" =~ ^$ ]]; then
continue
fi
EXCLUDE="$EXCLUDE --exclude-dir=\"$line\""
done <.grepignore
fi
eval grep -r "$EXCLUDE" '"$@"'
Сценарий проверяет, существует ли файл .grepignore
и доступен ли он для чтения. Если это так, он создает строку EXCLUDE
, содержащую --exclude-dir="$line"
, для любой строки $line
в этом файле (без начального и конечного пробела ), при условии, что она не пуста или содержит #
. Затем сценарий передает эту строку EXCLUDE
в grep
, а также добавляет аргументы, которые вы передали сценарию.
Чтобы выполнить скрипт, сохраните код в файле mygrep
, сделайте его исполняемым с помощью chmod +x /path/to/mygrep
и вызовите его с помощью /path/to/mygrep
, а затем укажите любые параметры, которые вы указали бы для grep
и, конечно же, по поисковому запросу.
Похоже, флаг --exclude-from=FILE
— это то, что вам нужно. Вам придется вручную создавать и заполнять каждый проект -для конкретного FILE
такими записями, как:
onedir/*
twodir/*
Для удобства вы также можете создать псевдоним оболочки, чтобы запуск grep
автоматически вызывал флаг --exclude-from=FILE
.