diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2012-06-24 22:28:35 +0000 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2012-06-24 22:28:35 +0000 |
commit | 3950ffe2a485479f6561c27364d3d7df5a21d124 (patch) | |
tree | 468c6e14449d1b1e279222ec32f676b0311917d2 /src/cmd/ksh93/data/bash_pre_rc.sh | |
download | ksh-upstream.tar.gz |
Imported Upstream version 93u+upstream
Diffstat (limited to 'src/cmd/ksh93/data/bash_pre_rc.sh')
-rw-r--r-- | src/cmd/ksh93/data/bash_pre_rc.sh | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/src/cmd/ksh93/data/bash_pre_rc.sh b/src/cmd/ksh93/data/bash_pre_rc.sh new file mode 100644 index 0000000..4f8a451 --- /dev/null +++ b/src/cmd/ksh93/data/bash_pre_rc.sh @@ -0,0 +1,255 @@ +######################################################################## +# # +# This software is part of the ast package # +# Copyright (c) 1982-2011 AT&T Intellectual Property # +# and is licensed under the # +# Eclipse Public License, Version 1.0 # +# by AT&T Intellectual Property # +# # +# A copy of the License is available at # +# http://www.eclipse.org/org/documents/epl-v10.html # +# (with md5 checksum b35adb5213ca9657e911e9befb180842) # +# # +# Information and Software Systems Research # +# AT&T Research # +# Florham Park NJ # +# # +# David Korn <dgk@research.att.com> # +# # +######################################################################## +# +# bash compatibility startup script +# +# Author: +# Karsten Fleischer +# Omnium Software Engineering +# An der Luisenburg 7 +# D-51379 Leverkusen +# Germany +# +# <K.Fleischer@omnium.de> +# + +alias declare=typeset + +nameref FUNCNAME=.sh.fun +integer SHLVL +export SHLVL +SHLVL+=1 + +if [[ ! $EUID ]] +then EUID=$(id -u) + readonly EUID +fi + +if [[ ! $UID ]] +then UID=$(id -u) + readonly UID +fi + +readonly SHELLOPTS +if ! shopt -qo restricted; then + IFS=: + for i in $SHELLOPTS + do + [[ -n "$i" ]] && set -o $i + done + unset IFS +fi +function SHELLOPTS.get +{ + .sh.value=$(shopt -so) + .sh.value=${.sh.value//+([[:space:]])on*([[:space:]])/:} + .sh.value=${.sh.value%:} +} + +set -A GROUPS $(id -G) +function GROUPS.set +{ + return 1 +} +function GROUPS.unset +{ + unset -f GROUPS.set + unset -f GROUPS.unset +} + +typeset -A DIRSTACK +function DIRSTACK.get +{ + set -A .sh.value $(dirs) +} +function DIRSTACK.set +{ + integer index + index=_push_max-.sh.subscript + (( index == _push_max || index < _push_top )) && return + _push_stack[index]=${.sh.value} +} +function DIRSTACK.unset +{ + unset -f DIRSTACK.get + unset -f DIRSTACK.set + unset -f DIRSTACK.unset +} + +function PS1.set +{ + typeset prefix remaining=${.sh.value} var= n= k= + while [[ $remaining ]] + do prefix=${remaining%%'\'*} + remaining=${remaining#$prefix} + var+="$prefix" + case ${remaining:1:1} in + t) var+="\$(printf '%(%H:%M:%S)T')";; + d) var+="\$(printf '%(%a %b:%e)T')";; + n) var+=$'\n';; + s) var+=ksh;; + w) var+="\$(pwd)";; + W) var+="\$(basename \"\$(pwd)\")";; + u) var+=$USER;; + h) var+=$(hostname -s);; + '#') var+=!;; + !) var+=!;; + @) var+="\$(printf '%(%I:%M%p)T')";; + '$') if (( $(id -u) == 0 )) + then var+='#' + else var+='$' + fi;; + '\') var+='\\';; + '['|']') ;; + [0-7]) case ${remaining:1:3} in + [0-7][0-7][0-7]) + k=4;; + [0-7][0-7]) + k=3;; + *) k=2;; + esac + eval n="\$'"${remaining:0:k}"'" + var+=$n + remaining=${remaining:k} + continue + ;; + "") ;; + *) var+='\'${remaining:0:2};; + esac + remaining=${remaining:2} + done + .sh.value=$var +} +function logout +{ + if shopt -q login_shell; then + exit + else + print ${BASH##*/}: $0: not login shell: use 'exit' >&2 + return 1 + fi +} +PS1="bash$ " + +function source +{ + if ! shopt -qpo posix; then + unset OPATH + typeset OPATH=$PATH + typeset PATH=$PATH + if shopt -q sourcepath; then + PATH=$OPATH:. + else + PATH=. + fi + fi + . "$@" +} +unalias . +alias .=source + +alias enable=builtin + +function help +{ + typeset b cmd usage try_cmd man + function has_help_option + { + [[ $1 == @(''|/*|:|echo|false|true|login|test|'[') ]] && return 1 + return 0 + } + typeset -A short_use=( + [echo]='Usage: echo [ options ] [arg]...' + [:]='Usage: : ...' + [true]='Usage: true ...' + [false]='Usage: false ...' + [login]='Usage: login [-p] [name]' + ['[']='Usage: [ EXPRESSION ] | [ OPTION' + [test]='Usage: test EXPRESSION | test' + ) + b=$(builtin) + if (( $# == 0)) + then print 'The following is the current list of built-in commands:' + print -r $'Type help *name* for more information about name\n' + for cmd in $b + do if has_help_option $cmd + then usage=$($cmd --short 2>&1) + print -r -- "${usage:7}" + else print -r -- ${short_use[$cmd]:7} + fi + done + return + fi + b=${b/'['/} + man=--man + [[ $1 == -s ]] && man=--short && shift + for try_cmd + do if has_help_option $try_cmd + then if [[ $try_cmd == @(${b//$'\n'/'|'}) ]] + then $try_cmd $man + else man $try_cmd + fi + elif [[ $man == '--short' ]] + then print -r -- ${short_use[$try_cmd]} + else man $try_cmd + fi + done +} + +function cd +{ + + local msg + local args + local i + local a + local ret + + if ! shopt -q cdable_vars; then + command cd "$@" + else + msg=$(command cd "$@" 2>&1) + ret=$? + if [[ $ret != 0 ]]; then + for i + do + case $i in + -*) args="$args $i" ;; + */*) args="$args $i" ;; + *) eval a="$"$i + if [[ -n $a ]]; then args="$args $a" + else args="$args $i" + fi + ;; + esac + done + + command cd $args + else + print -- $msg + return $ret + fi + fi +} + +typeset BASH=$0 +! shopt -qo posix && HISTFILE=~/.bash_history +HOSTNAME=$(hostname) +nameref BASH_SUBSHELL=.sh.subshell |