shtool
来自「监控软件rrdtools」· 代码 · 共 1,047 行 · 第 1/3 页
TXT
1,047 行
#!/bin/sh#### GNU shtool -- The GNU Portable Shell Tool## Copyright (c) 1994-2002 Ralf S. Engelschall <rse@engelschall.com>#### See http://www.gnu.org/software/shtool/ for more information.## See ftp://ftp.gnu.org/gnu/shtool/ for latest version.#### Version: 1.6.2 (02-Nov-2002)## Contents: 4/19 available modules###### This program is free software; you can redistribute it and/or modify## it under the terms of the GNU General Public License as published by## the Free Software Foundation; either version 2 of the License, or## (at your option) any later version.#### This program is distributed in the hope that it will be useful,## but WITHOUT ANY WARRANTY; without even the implied warranty of## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU## General Public License for more details.#### You should have received a copy of the GNU General Public License## along with this program; if not, write to the Free Software## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,## USA, or contact Ralf S. Engelschall <rse@engelschall.com>.#### NOTICE: Given that you include this file verbatim into your own## source tree, you are justified in saying that it remains separate## from your package, and that this way you are simply just using GNU## shtool. So, in this situation, there is no requirement that your## package itself is licensed under the GNU General Public License in## order to take advantage of GNU shtool.###### Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]#### Available commands:## echo Print string with optional construct expansion## install Install a program, script or datafile## mkdir Make one or more directories## path Deal with program paths#### Not available commands (because module was not built-in):## mdate Pretty-print modification time of a file or dir## table Pretty-print a field-separated list as a table## prop Display progress with a running propeller## move Move files with simultaneous substitution## mkln Make link with calculation of relative paths## mkshadow Make a shadow tree through symbolic links## fixperm Fix file permissions inside a source tree## rotate Logfile rotation## tarball Roll distribution tarballs## subst Apply sed(1) substitution operations## guessos Simple operating system guesser## arx Extended archive command## slo Separate linker options by library class## scpp Sharing C Pre-Processor## version Maintain a version information file##if [ $# -eq 0 ]; then echo "$0:Error: invalid command line" 1>&2 echo "$0:Hint: run \`$0 -h' for usage" 1>&2 exit 1fiif [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then echo "This is GNU shtool, version 1.6.2 (02-Nov-2002)" echo "Copyright (c) 1994-2002 Ralf S. Engelschall <rse@engelschall.com>" echo "Report bugs to <bug-shtool@gnu.org>" echo '' echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]" echo '' echo 'Available global <options>:' echo ' -v, --version display shtool version information' echo ' -h, --help display shtool usage help page (this one)' echo ' -d, --debug display shell trace information' echo ' -r, --recreate recreate this shtool script via shtoolize' echo '' echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:' echo ' echo [-n|--newline] [-e|--expand] [<str> ...]' echo ' install [-v|--verbose] [-t|--trace] [-d|--mkdir] [-c|--copy]' echo ' [-C|--compare-copy] [-s|--strip] [-m|--mode <mode>]' echo ' [-o|--owner <owner>] [-g|--group <group>] [-e|--exec' echo ' <sed-cmd>] <file> [<file> ...] <path>' echo ' mkdir [-t|--trace] [-f|--force] [-p|--parents] [-m|--mode' echo ' <mode>] [-o|--owner <owner>] [-g|--group <group>] <dir>' echo ' [<dir> ...]' echo ' path [-s|--suppress] [-r|--reverse] [-d|--dirname] [-b|--basename]' echo ' [-m|--magic] [-p|--path <path>] <str> [<str> ...]' echo '' echo 'Not available <cmd-name> (because module was not built-in):' echo ' mdate [-n|--newline] [-z|--zero] [-s|--shorten] [-d|--digits]' echo ' [-f|--field-sep <str>] [-o|--order <spec>] <path>' echo ' table [-F|--field-sep <sep>] [-w|--width <width>] [-c|--columns' echo ' <cols>] [-s|--strip <strip>] <str><sep><str>...' echo ' prop [-p|--prefix <str>]' echo ' move [-v|--verbose] [-t|--trace] [-e|--expand] [-p|--preserve]' echo ' <src-file> <dst-file>' echo ' mkln [-t|--trace] [-f|--force] [-s|--symbolic] <src-path>' echo ' [<src-path> ...] <dst-path>' echo ' mkshadow [-v|--verbose] [-t|--trace] [-a|--all] <src-dir> <dst-dir>' echo ' fixperm [-v|--verbose] [-t|--trace] <path> [<path> ...]' echo ' rotate [-v|--verbose] [-t|--trace] [-f|--force] [-n|--num-files' echo ' <count>] [-s|--size <size>] [-c|--copy] [-r|--remove]' echo ' [-a|--archive-dir <dir>] [-z|--compress [<tool>:]<level>]' echo ' [-b|--background] [-d|--delay] [-p|--pad <len>] [-o|--owner' echo ' <owner>] [-g|--group <group>] [-m|--mode <mode>] [-M|--migrate' echo ' <cmd>] [-P|--prolog <cmd>] [-E|--epilog <cmd>] <file> [...]' echo ' tarball [-t|--trace] [-v|--verbose] [-o|--output <tarball>]' echo ' [-c|--compress <prog>] [-d|--directory <dir>] [-u|--user' echo ' <user>] [-g|--group <group>] [-e|--exclude <pattern>]' echo ' <path> [<path> ...]' echo ' subst [-v|--verbose] [-t|--trace] [-n|--nop] [-s|--stealth]' echo ' [-i|--interactive] [-b|--backup <ext>] [-e|--exec <cmd>]' echo ' [-f|--file <cmd-file>] [<file>] [...]' echo ' guessos ' echo ' arx [-t|--trace] [-C|--command <cmd>] <op> <archive> [<file>' echo ' ...]' echo ' slo [-p|--prefix <str>] -- -L<dir> -l<lib> [-L<dir> -l<lib>' echo ' ...]' echo ' scpp [-v|--verbose] [-p|--preserve] [-f|--filter <filter>]' echo ' [-o|--output <ofile>] [-t|--template <tfile>] [-M|--mark' echo ' <mark>] [-D|--define <dname>] [-C|--class <cname>]' echo ' <file> [<file> ...]' echo ' version [-l|--language <lang>] [-n|--name <name>] [-p|--prefix' echo ' <prefix>] [-s|--set <version>] [-e|--edit] [-i|--increase' echo ' <knob>] [-d|--display <type>] <file>' echo '' exit 0fiif [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then echo "GNU shtool 1.6.2 (02-Nov-2002)" exit 0fiif [ ".$1" = ".-r" -o ".$1" = ."--recreate" ]; then shtoolize -oshtool echo install mkdir path exit 0fiif [ ".$1" = ".-d" -o ".$1" = ."--debug" ]; then shift set -xfiname=`echo "$0" | sed -e 's;.*/\([^/]*\)$;\1;' -e 's;-sh$;;' -e 's;\.sh$;;'`case "$name" in echo|install|mkdir|path ) # implicit tool command selection tool="$name" ;; * ) # explicit tool command selection tool="$1" shift ;;esacarg_spec=""opt_spec=""gen_tmpfile=no#### DISPATCH INTO SCRIPT PROLOG##case $tool in echo ) str_tool="echo" str_usage="[-n|--newline] [-e|--expand] [<str> ...]" arg_spec="0+" opt_spec="n.e." opt_alias="n:newline,e:expand" opt_n=no opt_e=no ;; install ) str_tool="install" str_usage="[-v|--verbose] [-t|--trace] [-d|--mkdir] [-c|--copy] [-C|--compare-copy] [-s|--strip] [-m|--mode <mode>] [-o|--owner <owner>] [-g|--group <group>] [-e|--exec <sed-cmd>] <file> [<file> ...] <path>" arg_spec="1+" opt_spec="v.t.d.c.C.s.m:o:g:e+" opt_alias="v:verbose,t:trace,d:mkdir,c:copy,C:compare-copy,s:strip,m:mode,o:owner,g:group,e:exec" opt_v=no opt_t=no opt_d=no opt_c=no opt_C=no opt_s=no opt_m="0755" opt_o="" opt_g="" opt_e="" ;; mkdir ) str_tool="mkdir" str_usage="[-t|--trace] [-f|--force] [-p|--parents] [-m|--mode <mode>] [-o|--owner <owner>] [-g|--group <group>] <dir> [<dir> ...]" arg_spec="1+" opt_spec="t.f.p.m:o:g:" opt_alias="t:trace,f:force,p:parents,m:mode,o:owner,g:group" opt_t=no opt_f=no opt_p=no opt_m="" opt_o="" opt_g="" ;; path ) str_tool="path" str_usage="[-s|--suppress] [-r|--reverse] [-d|--dirname] [-b|--basename] [-m|--magic] [-p|--path <path>] <str> [<str> ...]" gen_tmpfile=yes arg_spec="1+" opt_spec="s.r.d.b.m.p:" opt_alias="s:suppress,r:reverse,d:dirname,b:basename,m:magic,p:path" opt_s=no opt_r=no opt_d=no opt_b=no opt_m=no opt_p="$PATH" ;; -* ) echo "$0:Error: unknown option \`$tool'" 2>&1 echo "$0:Hint: run \`$0 -h' for usage" 2>&1 exit 1 ;; * ) echo "$0:Error: unknown command \`$tool'" 2>&1 echo "$0:Hint: run \`$0 -h' for usage" 2>&1 exit 1 ;;esac#### COMMON UTILITY CODE### commonly used ASCII valuesASC_TAB=" "ASC_NL=""# determine name of toolif [ ".$tool" != . ]; then # used inside shtool script toolcmd="$0 $tool" toolcmdhelp="shtool $tool" msgprefix="shtool:$tool"else # used as standalone script toolcmd="$0" toolcmdhelp="sh $0" msgprefix="$str_tool"fi# parse argument specification stringeval `echo $arg_spec |\ sed -e 's/^\([0-9]*\)\([+=]\)/arg_NUMS=\1; arg_MODE=\2/'`# parse option specification stringeval `echo h.$opt_spec |\ sed -e 's/\([a-zA-Z0-9]\)\([.:+]\)/opt_MODE_\1=\2;/g'`# parse option alias stringeval `echo h:help,$opt_alias |\ tr 'x-' 'x_' | sed -e 's/\([a-zA-Z0-9]\):\([^,]*\),*/opt_ALIAS_\2=\1;/g'`# interate over argument lineopt_PREV=''while [ $# -gt 0 ]; do # special option stops processing if [ ".$1" = ".--" ]; then shift break fi # determine option and argument opt_ARG_OK=no if [ ".$opt_PREV" != . ]; then # merge previous seen option with argument opt_OPT="$opt_PREV" opt_ARG="$1" opt_ARG_OK=yes opt_PREV='' else # split argument into option and argument case "$1" in --[a-zA-Z0-9]*=*) eval `echo "x$1" |\ sed -e 's/^x--\([a-zA-Z0-9-]*\)=\(.*\)$/opt_OPT="\1";opt_ARG="\2"/'` opt_STR=`echo $opt_OPT | tr 'x-' 'x_'` eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}" ;; --[a-zA-Z0-9]*) opt_OPT=`echo "x$1" | cut -c4-` opt_STR=`echo $opt_OPT | tr 'x-' 'x_'` eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}" opt_ARG='' ;; -[a-zA-Z0-9]*) eval `echo "x$1" |\ sed -e 's/^x-\([a-zA-Z0-9]\)/opt_OPT="\1";/' \ -e 's/";\(.*\)$/"; opt_ARG="\1"/'` ;; -[a-zA-Z0-9]) opt_OPT=`echo "x$1" | cut -c3-` opt_ARG='' ;; *) break ;; esac fi # eat up option shift # determine whether option needs an argument eval "opt_MODE=\$opt_MODE_${opt_OPT}" if [ ".$opt_ARG" = . -a ".$opt_ARG_OK" != .yes ]; then if [ ".$opt_MODE" = ".:" -o ".$opt_MODE" = ".+" ]; then opt_PREV="$opt_OPT" continue fi fi # process option case $opt_MODE in '.' ) # boolean option eval "opt_${opt_OPT}=yes" ;; ':' ) # option with argument (multiple occurances override) eval "opt_${opt_OPT}=\"\$opt_ARG\"" ;; '+' ) # option with argument (multiple occurances append) eval "opt_${opt_OPT}=\"\$opt_${opt_OPT}\${ASC_NL}\$opt_ARG\"" ;; * ) echo "$msgprefix:Error: unknown option: \`$opt_OPT'" 1>&2 echo "$msgprefix:Hint: run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2 exit 1 ;; esacdoneif [ ".$opt_PREV" != . ]; then echo "$msgprefix:Error: missing argument to option \`$opt_PREV'" 1>&2 echo "$msgprefix:Hint: run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2 exit 1
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?