Инструменты пользователя

Инструменты сайта


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
  1. Simple Text
  2. Simple {0,1}Text
  3. Simple[ -_]{0,1}Text
  4. (S|s)imple (T|t)ext
  5. ^Simple Text
  6. 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.1649400966.txt.gz · Последнее изменение: 2022/04/08 09:56 — san

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki