nix:shell:hacks
Это старая версия документа!
Содержание
Всякие хитрости в shell
получить список каталогов в текущей папке
ls -d */|sed 's/\/$//'|xargs
полный путь к каталогу скрипта
dir="$(cd "$(dirname "$0")"; pwd)"
имя текущего скрипта
basename $0
То же самое, но еще отрезаем от имени расширение файла
basename $0|sed 's/\.[^.]*$//'
То же самое, но еще отрезаем от имени все расширения файла
basename $0|sed 's/\..*$//'
pipefail
Если опция pipefail включена — статус выхода из конвейера является значением последней (самой правой) команды, завершённой с ненулевым статусом, или ноль — если работа всех команд завершена успешно.
set -o pipefail
Делаем свой "Антивирус"
Ну антивирус - громко сказано, просто сканер текстовых файлов на предмет наличия в нем сигнальных строк. База сигнатур, которые ищет скрипт находится в файле scanbase.txt расположенном рядом со скриптом. В файле scanbase.txt можно указывать как точные [под]строки, так и пользоваться некоторыми регулярными выражениями:
- scanbase.txt
- Simple Text
- Simple {0,1}Text
- Simple[ -_]{0,1}Text
- (S|s)imple (T|t)ext
- ^Simple Text
- Simple Text$
Пояснения к строкам сигнатур:
- Поиск точного соответствия строке
- Поиск строки с пробелом или без
- Поиск строки, написанной слитно, либо с любым из разденителей: пробел, дефис, подчеркивание
- Поиск строк, где слова начинаются с заглавной либо строчной буквы
- Поиск шаблона в начале строки
- Поиск шаблона в конце строки
Сам скрипт сканера:
- scan.sh
#!/bin/bash dir=$(cd "$(dirname "$0")"; pwd) #" if [[ -z "$1" ]]; then scandir="."; else scandir="$1"; fi inc="" if [[ -n "$2" ]]; then for i in $(echo "$2"| tr , ' '); do inc="${inc} --include='*.$i'"; done fi echo "$(date +%Y-%m-%dT%H:%M:%S) Scaning '$scandir' ..." cmd=$(echo egrep -rnI -f "$dir/scanbase.txt" "$inc" "$scandir/") echo "$cmd" eval $cmd echo "$(date +%Y-%m-%dT%H:%M:%S) Scan End."
nix/shell/hacks.1649411660.txt.gz · Последнее изменение: 2022/04/08 12:54 — san