1da2e3ebdSchin######################################################################## 2da2e3ebdSchin# # 3da2e3ebdSchin# This software is part of the ast package # 4*b30d1939SAndy Fiddaman# Copyright (c) 1982-2011 AT&T Intellectual Property # 5da2e3ebdSchin# and is licensed under the # 6*b30d1939SAndy Fiddaman# Eclipse Public License, Version 1.0 # 77c2fbfb3SApril Chin# by AT&T Intellectual Property # 8da2e3ebdSchin# # 9da2e3ebdSchin# A copy of the License is available at # 10*b30d1939SAndy Fiddaman# http://www.eclipse.org/org/documents/epl-v10.html # 11*b30d1939SAndy Fiddaman# (with md5 checksum b35adb5213ca9657e911e9befb180842) # 12da2e3ebdSchin# # 13da2e3ebdSchin# Information and Software Systems Research # 14da2e3ebdSchin# AT&T Research # 15da2e3ebdSchin# Florham Park NJ # 16da2e3ebdSchin# # 17da2e3ebdSchin# David Korn <dgk@research.att.com> # 18da2e3ebdSchin# # 19da2e3ebdSchin######################################################################## 20da2e3ebdSchin# 21da2e3ebdSchin# bash compatibility startup script 22da2e3ebdSchin# 23da2e3ebdSchin# Author: 24da2e3ebdSchin# Karsten Fleischer 25da2e3ebdSchin# Omnium Software Engineering 26da2e3ebdSchin# An der Luisenburg 7 27da2e3ebdSchin# D-51379 Leverkusen 28da2e3ebdSchin# Germany 29da2e3ebdSchin# 30da2e3ebdSchin# <K.Fleischer@omnium.de> 31da2e3ebdSchin# 32da2e3ebdSchin 33da2e3ebdSchinalias declare=typeset 34da2e3ebdSchin 35da2e3ebdSchinnameref FUNCNAME=.sh.fun 36da2e3ebdSchininteger SHLVL 37da2e3ebdSchinexport SHLVL 38da2e3ebdSchinSHLVL+=1 39da2e3ebdSchin 40da2e3ebdSchinif [[ ! $EUID ]] 41da2e3ebdSchinthen EUID=$(id -u) 42da2e3ebdSchin readonly EUID 43da2e3ebdSchinfi 44da2e3ebdSchin 45da2e3ebdSchinif [[ ! $UID ]] 46da2e3ebdSchinthen UID=$(id -u) 47da2e3ebdSchin readonly UID 48da2e3ebdSchinfi 49da2e3ebdSchin 50da2e3ebdSchinreadonly SHELLOPTS 51da2e3ebdSchinif ! shopt -qo restricted; then 52da2e3ebdSchin IFS=: 53da2e3ebdSchin for i in $SHELLOPTS 54da2e3ebdSchin do 55da2e3ebdSchin [[ -n "$i" ]] && set -o $i 56da2e3ebdSchin done 57da2e3ebdSchin unset IFS 58da2e3ebdSchinfi 59da2e3ebdSchinfunction SHELLOPTS.get 60da2e3ebdSchin{ 61da2e3ebdSchin .sh.value=$(shopt -so) 62da2e3ebdSchin .sh.value=${.sh.value//+([[:space:]])on*([[:space:]])/:} 63da2e3ebdSchin .sh.value=${.sh.value%:} 64da2e3ebdSchin} 65da2e3ebdSchin 66da2e3ebdSchinset -A GROUPS $(id -G) 67da2e3ebdSchinfunction GROUPS.set 68da2e3ebdSchin{ 69da2e3ebdSchin return 1 70da2e3ebdSchin} 71da2e3ebdSchinfunction GROUPS.unset 72da2e3ebdSchin{ 73da2e3ebdSchin unset -f GROUPS.set 74da2e3ebdSchin unset -f GROUPS.unset 75da2e3ebdSchin} 76da2e3ebdSchin 77da2e3ebdSchintypeset -A DIRSTACK 78da2e3ebdSchinfunction DIRSTACK.get 79da2e3ebdSchin{ 80da2e3ebdSchin set -A .sh.value $(dirs) 81da2e3ebdSchin} 82da2e3ebdSchinfunction DIRSTACK.set 83da2e3ebdSchin{ 84da2e3ebdSchin integer index 85da2e3ebdSchin index=_push_max-.sh.subscript 86da2e3ebdSchin (( index == _push_max || index < _push_top )) && return 87da2e3ebdSchin _push_stack[index]=${.sh.value} 88da2e3ebdSchin} 89da2e3ebdSchinfunction DIRSTACK.unset 90da2e3ebdSchin{ 91da2e3ebdSchin unset -f DIRSTACK.get 92da2e3ebdSchin unset -f DIRSTACK.set 93da2e3ebdSchin unset -f DIRSTACK.unset 94da2e3ebdSchin} 95da2e3ebdSchin 96da2e3ebdSchinfunction PS1.set 97da2e3ebdSchin{ 98da2e3ebdSchin typeset prefix remaining=${.sh.value} var= n= k= 99da2e3ebdSchin while [[ $remaining ]] 100da2e3ebdSchin do prefix=${remaining%%'\'*} 101da2e3ebdSchin remaining=${remaining#$prefix} 102da2e3ebdSchin var+="$prefix" 103da2e3ebdSchin case ${remaining:1:1} in 104da2e3ebdSchin t) var+="\$(printf '%(%H:%M:%S)T')";; 1057c2fbfb3SApril Chin d) var+="\$(printf '%(%a %b:%e)T')";; 106da2e3ebdSchin n) var+=$'\n';; 107da2e3ebdSchin s) var+=ksh;; 108da2e3ebdSchin w) var+="\$(pwd)";; 109da2e3ebdSchin W) var+="\$(basename \"\$(pwd)\")";; 110da2e3ebdSchin u) var+=$USER;; 1117c2fbfb3SApril Chin h) var+=$(hostname -s);; 112da2e3ebdSchin '#') var+=!;; 113da2e3ebdSchin !) var+=!;; 1147c2fbfb3SApril Chin @) var+="\$(printf '%(%I:%M%p)T')";; 115da2e3ebdSchin '$') if (( $(id -u) == 0 )) 116da2e3ebdSchin then var+='#' 117da2e3ebdSchin else var+='$' 118da2e3ebdSchin fi;; 119da2e3ebdSchin '\') var+='\\';; 120da2e3ebdSchin '['|']') ;; 121da2e3ebdSchin [0-7]) case ${remaining:1:3} in 122da2e3ebdSchin [0-7][0-7][0-7]) 123da2e3ebdSchin k=4;; 124da2e3ebdSchin [0-7][0-7]) 125da2e3ebdSchin k=3;; 126da2e3ebdSchin *) k=2;; 127da2e3ebdSchin esac 128da2e3ebdSchin eval n="\$'"${remaining:0:k}"'" 129da2e3ebdSchin var+=$n 130da2e3ebdSchin remaining=${remaining:k} 131da2e3ebdSchin continue 132da2e3ebdSchin ;; 133da2e3ebdSchin "") ;; 134da2e3ebdSchin *) var+='\'${remaining:0:2};; 135da2e3ebdSchin esac 136da2e3ebdSchin remaining=${remaining:2} 137da2e3ebdSchin done 138da2e3ebdSchin .sh.value=$var 139da2e3ebdSchin} 140da2e3ebdSchinfunction logout 141da2e3ebdSchin{ 142da2e3ebdSchin if shopt -q login_shell; then 143da2e3ebdSchin exit 144da2e3ebdSchin else 145da2e3ebdSchin print ${BASH##*/}: $0: not login shell: use 'exit' >&2 146da2e3ebdSchin return 1 147da2e3ebdSchin fi 148da2e3ebdSchin} 149da2e3ebdSchinPS1="bash$ " 150da2e3ebdSchin 151da2e3ebdSchinfunction source 152da2e3ebdSchin{ 153da2e3ebdSchin if ! shopt -qpo posix; then 154da2e3ebdSchin unset OPATH 155da2e3ebdSchin typeset OPATH=$PATH 156da2e3ebdSchin typeset PATH=$PATH 157da2e3ebdSchin if shopt -q sourcepath; then 158da2e3ebdSchin PATH=$OPATH:. 159da2e3ebdSchin else 160da2e3ebdSchin PATH=. 161da2e3ebdSchin fi 162da2e3ebdSchin fi 163da2e3ebdSchin . "$@" 164da2e3ebdSchin} 165da2e3ebdSchinunalias . 166da2e3ebdSchinalias .=source 167da2e3ebdSchin 168da2e3ebdSchinalias enable=builtin 169da2e3ebdSchin 170da2e3ebdSchinfunction help 171da2e3ebdSchin{ 1727c2fbfb3SApril Chin typeset b cmd usage try_cmd man 1737c2fbfb3SApril Chin function has_help_option 1747c2fbfb3SApril Chin { 1757c2fbfb3SApril Chin [[ $1 == @(''|/*|:|echo|false|true|login|test|'[') ]] && return 1 1767c2fbfb3SApril Chin return 0 1777c2fbfb3SApril Chin } 1787c2fbfb3SApril Chin typeset -A short_use=( 1797c2fbfb3SApril Chin [echo]='Usage: echo [ options ] [arg]...' 1807c2fbfb3SApril Chin [:]='Usage: : ...' 1817c2fbfb3SApril Chin [true]='Usage: true ...' 1827c2fbfb3SApril Chin [false]='Usage: false ...' 1837c2fbfb3SApril Chin [login]='Usage: login [-p] [name]' 1847c2fbfb3SApril Chin ['[']='Usage: [ EXPRESSION ] | [ OPTION' 1857c2fbfb3SApril Chin [test]='Usage: test EXPRESSION | test' 1867c2fbfb3SApril Chin ) 187da2e3ebdSchin b=$(builtin) 1887c2fbfb3SApril Chin if (( $# == 0)) 1897c2fbfb3SApril Chin then print 'The following is the current list of built-in commands:' 1907c2fbfb3SApril Chin print -r $'Type help *name* for more information about name\n' 1917c2fbfb3SApril Chin for cmd in $b 1927c2fbfb3SApril Chin do if has_help_option $cmd 1937c2fbfb3SApril Chin then usage=$($cmd --short 2>&1) 1947c2fbfb3SApril Chin print -r -- "${usage:7}" 1957c2fbfb3SApril Chin else print -r -- ${short_use[$cmd]:7} 1967c2fbfb3SApril Chin fi 197da2e3ebdSchin done 1987c2fbfb3SApril Chin return 1997c2fbfb3SApril Chin fi 2007c2fbfb3SApril Chin b=${b/'['/} 2017c2fbfb3SApril Chin man=--man 2027c2fbfb3SApril Chin [[ $1 == -s ]] && man=--short && shift 2037c2fbfb3SApril Chin for try_cmd 2047c2fbfb3SApril Chin do if has_help_option $try_cmd 2057c2fbfb3SApril Chin then if [[ $try_cmd == @(${b//$'\n'/'|'}) ]] 2067c2fbfb3SApril Chin then $try_cmd $man 2077c2fbfb3SApril Chin else man $try_cmd 2087c2fbfb3SApril Chin fi 2097c2fbfb3SApril Chin elif [[ $man == '--short' ]] 2107c2fbfb3SApril Chin then print -r -- ${short_use[$try_cmd]} 2117c2fbfb3SApril Chin else man $try_cmd 2127c2fbfb3SApril Chin fi 213da2e3ebdSchin done 214da2e3ebdSchin} 215da2e3ebdSchin 216da2e3ebdSchinfunction cd 217da2e3ebdSchin{ 218da2e3ebdSchin 219da2e3ebdSchin local msg 220da2e3ebdSchin local args 221da2e3ebdSchin local i 222da2e3ebdSchin local a 223da2e3ebdSchin local ret 224da2e3ebdSchin 225da2e3ebdSchin if ! shopt -q cdable_vars; then 226da2e3ebdSchin command cd "$@" 227da2e3ebdSchin else 228da2e3ebdSchin msg=$(command cd "$@" 2>&1) 229da2e3ebdSchin ret=$? 230da2e3ebdSchin if [[ $ret != 0 ]]; then 231da2e3ebdSchin for i 232da2e3ebdSchin do 233da2e3ebdSchin case $i in 234da2e3ebdSchin -*) args="$args $i" ;; 235da2e3ebdSchin */*) args="$args $i" ;; 236da2e3ebdSchin *) eval a="$"$i 237da2e3ebdSchin if [[ -n $a ]]; then args="$args $a" 238da2e3ebdSchin else args="$args $i" 239da2e3ebdSchin fi 240da2e3ebdSchin ;; 241da2e3ebdSchin esac 242da2e3ebdSchin done 243da2e3ebdSchin 244da2e3ebdSchin command cd $args 245da2e3ebdSchin else 246da2e3ebdSchin print -- $msg 247da2e3ebdSchin return $ret 248da2e3ebdSchin fi 249da2e3ebdSchin fi 250da2e3ebdSchin} 251da2e3ebdSchin 252da2e3ebdSchintypeset BASH=$0 253da2e3ebdSchin! shopt -qo posix && HISTFILE=~/.bash_history 254da2e3ebdSchinHOSTNAME=$(hostname) 2557c2fbfb3SApril Chinnameref BASH_SUBSHELL=.sh.subshell 256