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.1649400148.txt.gz · Последнее изменение: 2022/04/08 09:42 — san