⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 356.html

📁 著名的linux英雄站点的文档打包
💻 HTML
📖 第 1 页 / 共 3 页
字号:
"function _shift" <br>
"{	if [[ ${1-argv} = argv ]]" <br>
"	then	trap 'set -- "${argv[@]}"" <br>
"		shift 2" <br>
"		set -A argv "" "$@"' EXIT" <br>
"	else	typeset _varx=$1" <br>
"		eval set -- ""${$1[@]?}""" <br>
"		shift" <br>
"		set -A $_varx "$@"" <br>
"	fi}" <br>
"# emulate the csh implementation of "source"" <br>
"typeset -fx _source" <br>
"function _source" <br>
"{	if	file ${1:?source -- Too few arguments} 2&gt;&- |" <br>
"		grep -s '/bin/k?sh'" <br>
"	then	trap '. "$@"' EXIT" <br>
"	else	print -u2 cannot source "$1" -- not k/sh script" <br>
"		exit 1" <br>
"	fi}" <br>
"# directory stack: emulate the csh implementation of "dirs"" <br>
"typeset -fx dirs" <br>
"function dirs" <br>
"{	# display directory stack" <br>
"	set -o noglob +o nounset" <br>
"	typeset dir" <br>
"	(($#&gt;=2)) &&" <br>
"	{	print -ru2 'dirs: Too many arguments'" <br>
"		return 1" <br>
"	}" <br>
"	if [[ $1 = -l ]]" <br>
"	then	for dir in ${_dirstack[*]:-$PWD/}" <br>
"		do	print -nr -- "${dir%/} "" <br>
"		done" <br>
"	else	for dir in ${_dirstack[*]:-$PWD/}" <br>
"		do	dir=${dir#$HOME/}" <br>
"			case $dir in" <br>
"			('')	print -nr -- '~ ' ;;" <br>
"			(/*)	print -nr -- "${dir%/} " ;;" <br>
"			(*)	print -nr -- "~/${dir%/} " ;;" <br>
"			esac" <br>
"		done" <br>
"	fi" <br>
"	print}" <br>
"# directory stack: emulate the csh implementation of "popd"" <br>
"typeset -fx popd" <br>
"function popd" <br>
"{	# cd to and/or delete stack entry" <br>
"	set -o noglob +o nounset" <br>
"	if ((!$#))" <br>
"	then	# pop directory off the stack, cd to new top" <br>
"		if cd ${_dirstack[1]:?Directory stack empty.}" <br>
"		then	unset _dirstack[0]" <br>
"			set -A _dirstack ${_dirstack[*]}" <br>
"			dirs" <br>
"		else	unset _dirstack[0]" <br>
"			set -A _dirstack ${_dirstack[*]}" <br>
"			return 1" <br>
"		fi" <br>
"	elif [[ $# = 1 && $1 = ++([0-9]) ]]" <br>
"	then	# case of popd +n: delete nth dir from stack" <br>
"		typeset -i ndir" <br>
"		set ${1#+}" <br>
"		# uncomment to use last element if param exceeds permissible:" <br>
"		#let "$1 &gt; (ndir=${#_dirstack[*]}-1)" && set -- $ndir" <br>
"		let "$1 &gt; ${#_dirstack[*]}-1" &&" <br>
"		{	print -u2 'popd: Directory stack not that deep.'" <br>
"			return 1" <br>
"		}" <br>
"		(($1&lt;=0)) &&" <br>
"		{	print -u2 'popd: Bad directory.'" <br>
"			return 1" <br>
"		}" <br>
"		unset _dirstack[$1]" <br>
"		set -A _dirstack ${_dirstack[*]}" <br>
"		dirs" <br>
"	else	print -u2 'popd: Too many arguments.'" <br>
"		return 1" <br>
"	fi}" <br>
"# directory stack: emulate the csh implementation of "pushd"" <br>
"typeset -fx pushd" <br>
"function pushd" <br>
"{	# make new top of stack cwd" <br>
"	set -o noglob +o nounset" <br>
"	if ((!$#))" <br>
"	then	# case of pushd without args; swap top two directories" <br>
"		if cd ${_dirstack[1]:?No other directory.} 2&gt;&-" <br>
"		then	set +A _dirstack ${_dirstack[1]} ${_dirstack[0]}" <br>
"			dirs" <br>
"		else	print -ru2 " <br>
"			"pushd: ${_dirstack[1]}: No such file or directory."" <br>
"			return 1" <br>
"		fi" <br>
"	elif [[ $# = 1 && $1 = ++([0-9]) ]]" <br>
"	then	# case of pushd +n: rotate left n times directory stack" <br>
"		typeset -i ndir nrot=${1#+}" <br>
"		typeset firstdir" <br>
"		# uncomment to use last element if param exceeds permissible:" <br>
"		#let "nrot+1&gt;(ndir=${#_dirstack[*]})" && let nrot=ndir-1" <br>
"		let "nrot &gt; (ndir=${#_dirstack[*]}-1)" &&" <br>
"		{	print -ru2 'pushd: Directory stack not that deep.'" <br>
"			return 1" <br>
"		}" <br>
"		((nrot&lt;=0)) &&" <br>
"		{	print -ru2 'pushd: +0: No such file or directory.'" <br>
"			return 1" <br>
"		}" <br>
"		while let '(nrot-=1)&gt;=0'" <br>
"		do	firstdir=${_dirstack[0]}" <br>
"			unset _dirstack[0]" <br>
"			set -A _dirstack ${_dirstack[*]} $firstdir" <br>
"		done" <br>
"		cd ${_dirstack[0]} && dirs" <br>
"	elif (($#==1))" <br>
"	then	# one argument is directory to push" <br>
"		if cd ${1:?No such file or directory.} 2&gt;&-" <br>
"		then	set -A _dirstack ~+/ ${_dirstack[*]:-$OLDPWD/}" <br>
"			dirs" <br>
"		else	print -ru2 "pushd: $1: No such file or directory."" <br>
"			return 1" <br>
"		fi" <br>
"	else	print -ru2 'pushd: Too many arguments.'" <br>
"		return 1" <br>
"	fi}" <br>
"LINENO=0"<br>
}<br>
<br>
{donescan="OFF" }# like a "next" command, except ...<br>
<br>
/^[	 ]*($|#)/ {# empty line or comment<br>
# Suppress newlines between case patterns, so that<br>
# introduced escaped newlines will act appropriately.<br>
if (prevcase==NR-1)<br>
prevcase+=1<br>
else<br>
print<br>
next<br>
}<br>
<br>
{gsub("[	 ]+;", ";")# so that "command ;" !~ /command[	 ]/<br>
if ($0!~/[	 ]+/)<br>
sub("[	 ]+$", "")<br>
sub(";$", "")<br>
}<br>
<br>
/$/ {# normalize and convert variable syntax<br>
#XXX must appear before `.*`<br>
gsub("${?", "${#"); gsub("$?", "$#")<br>
gsub("${?#?[A-Za-z_][A-Za-z_0-9]+([.*]])?}?", "!&lt;!&!&gt;!")<br>
gsub("$[1-9]", "!&lt;!&!&gt;!")<br>
#<br>
# delimit variable with braces, if none exist:<br>
gsub("!&gt;![", "[")<br>
if (gsub("]", "&}"))<br>
gsub("]}}", "]}")<br>
if (gsub("!&lt;!$", "&{"))<br>
gsub("!&lt;!${{", "!&lt;!${")<br>
if (gsub("!&gt;!", "}&"))<br>
gsub("}}!&gt;!", "}!&gt;!")<br>
#<br>
# add default "[@]" array indices, if none exist:<br>
gsub("[*]", "[@]")# [*] -&gt; [@]<br>
# turn positional parameters into argv array r-values (for robustness)<br>
if (casualvars!="ON")<br>
if (gsub("${[1-9]}!&gt;!", "${argv[!#!&!#!"))<br>
{gsub("!#!${", "")<br>
gsub("}!&gt;!!#!", "]}")<br>
}<br>
if (casualvars!="ON")<br>
if (gsub("}!&gt;!", "[@]&"))<br>
gsub("[@][@]", "[@]")# ${var} -&gt; ${var[@]}<br>
gsub("}[", "[")# ${var}[ -&gt; ${var[<br>
#<br>
# substitute special variables:<br>
gsub("$#0", "${0:+1}")# special case: $?0 must be in ((...))<br>
gsub("${status[@]}", "$?")<br>
gsub("${child[@]}", "$!")<br>
gsub("${cwd[@]}", "${PWD}")<br>
#<br>
# miscellaneous:<br>
gsub("![&lt;&gt;]!", "")<br>
#XXXgsub(":g[ehrtq]", "")# specifiers won't work on array elmts<br>
gsub(":q", "")# implement instead using dquotes!<br>
gsub("}:e", "##*.}")<br>
gsub("}:h", "%/*}")<br>
gsub("}:r", "%.*}")<br>
gsub("}:t", "##*/}")<br>
}<br>
<br>
/(^|[	 ;&|])set[	 ]/ {# set command syntax<br>
#XXX $0 alert! (must then be EOL)<br>
# "set var = ( ... )"<br>
# -xor-<br>
# "set var = value" -or- "set var=value" -or- "set var"<br>
# "set echo/ignoreeof/noclobber/noglob/nonomatch/notify/verbose"<br>
sub("(^|[	 ]+)set[	 ]+", "")<br>
if (gsub("[	 ]+=", "="))<br>
gsub("=[	 ]+", "=")<br>
if ($0~")($|[	 ])")<br>
{# "set var=(...)" -&gt; "set -A var ... ;"<br>
gsub("[^	 ]+=(", " ; set -A &")<br>
gsub("=(", " ")<br>
gsub(")", " ; ")<br>
gsub("set -A argv[^;]*", "& && set -- "${argv[@]}"")<br>
sub("^ ; ", "")<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -