|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Evgenii Terechkov 2:5090/109.17 31 May 2003 06:52:57 To : Kirill Frolov Subject : rm -rf * -------------------------------------------------------------------------------- 01 Июн 03 06:37, Kirill Frolov писал Alexandr S. Agranovsky: KF> Кстати, попытка номер два (для alias rm="$HOME/bin/trash"): Ты дифф между "первой" и "второй" версией видел? Две строки чистыми. Hе работают элементарные вещи - типа интерактивность только по длинному флагу или рудиментарная переменная optend. Вот моя версия: === Begin file === #!/bin/sh # send bug reports report to: <Kirill.Frolov@p2.f827.n5030.z2.fidonet.org> # version 0.1 #patched to version 0.3 by Evgenii Terechkov: <2:5090/109.15> #FIXME: some options may be incompatible - use getopt(s) VERSION="0.3" TRASHDIR=${TRASHDIR:="$HOME/.trash"} TRASHMAXSIZE=${TRASHMAXSIZE:=0} opt_i=0; opt_r=0; opt_f=0; opt_v=0 usage() { echo "Usage: `basename $0` [OPTIONS]... FILE..." echo "Move file(s) to trash can." echo echo "-f, --force ignore nonexistent files, never prompt" echo "-i, --interactive prompt before any removal" echo "-r, -R, --recursive remove the content of directories recursively" echo "-v, --verbose explain what is being done" echo "-t, --trash <directory> specify trash can directory" echo "-h, --help display this help and exit" echo "--version, -V output version information and exit" echo echo "See man page trash(1) for more information." } opts() { unset arg args=: for next in "$@"; do case $arg in ?*) eval $arg=\'$next\'; unset arg; args="${args}-"; continue;; esac case $next in --) break; ;; -h|--help|-help|--h|--he|--hel|-he|-hel) help=1;; --version|-V) echo "trash version $VERSION";; --interactive|-i) opt_i=1; opt_f=0;; -r|-R|--recursive) opt_r=1;; --force|-f) opt_f=1; opt_i=0;; --verbose|-v) opt_v=1;; --trash|-t) arg=TRASHDIR;; -*) while { next=${next#?}; [ -n "$next" ]; }; do case ${next} in h*) help=1;; i*) opt_i=1; opt_f=0;; r*|R*) opt_r=1;; f*) opt_f=1; opt_i=0;; v*) opt_v=1;; V*) echo "trash version $VERSION";; t*) case $next in t) arg=TRASHDIR;; *) TRASHDIR=${next#?};; esac next="-t" break;; *) #while $((${#next}>1)); do next=${next%?}; done #FIXME:it not working! echo "trash: invalid option -- \`$next'" echo "Try \`trash --help' for more information." exit 1;; esac done;; *) args="${args}x" continue ;; esac args="${args}-" done case $arg in ?*) echo "trash: option requires an argument: $next" exit 1 ;; esac } opts "$@" [ "$help" = "1" ] && usage unset rmopts mvopts case $opt_f in 1) rmopts="$rmopts -f";; esac case $opt_v in 1) rmopts="$rmopts -v"; mvopts="$mvopts -v";; esac set -e optend=no for next in "$@"; do args=${args#?} case $args in -*) continue;; esac [ "$next" = '--' -a "$optend" = "no" ] && { optend=yes continue } [ -e "$next" ] || { case $opt_f in 0) echo "trash: cannot remove \`$next': No such file or directory" >&2 ;; esac continue } [ $opt_r = 0 -a -d "$next" ] && { case $opt_f in 0) echo "trash: \`$next' is a directory" >&2 ;; esac continue } case $opt_i in 1) if [ -d "$next" ]; then echo "move directory \`$next' to trash can?" else echo "move file \`$next' to trash can?" fi read a #FIXME: how to read one char under any of sh/bash/ksh/zsh/tcsh/ash/... ? case $a in y|Y);; *) continue;; esac ;; esac if [ "$TRASHMAXSIZE" -eq 0 -o $(du -s -- "$next" | cut -f 1) -lt "$TRASHMAXSIZE" ]; then mkdir -p $TRASHDIR eval mv $mvopts -- \'$next\' \'$TRASHDIR\' || (echo "internal error, canot move:\`$next' to \`$TRASHDIR'" >&2) else echo "trash: \`$next' cannot be moved to trash can" echo "trash: REMOVE file or directory \`$next'? (DANGEROUS!!!)" read a case $a in y|Y);; *) continue;; esac eval rm $rmopts -- \'$next\' || (echo "internal error, not removed:\`$next'" >&2) fi done === End file === Сильно не пинать, я знаю что у меня здесь тоже много огрех. Hо не такая откровенная кривизна. Работает вроде. С ограничениями. Knock, knock,knock Kirill. Follow the white rabbit! CPlay playing: tb_genesis.ogg --- GoldED+/LNX 1.1.5-alt0.pre.20021026.8 * Origin: (2:5090/109.17) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/39573ed7eef5.html, оценка из 5, голосов 10
|