14887Schin######################################################################## 24887Schin# # 34887Schin# This software is part of the ast package # 4*12068SRoger.Faulkner@Oracle.COM# Copyright (c) 1982-2010 AT&T Intellectual Property # 54887Schin# and is licensed under the # 64887Schin# Common Public License, Version 1.0 # 78462SApril.Chin@Sun.COM# by AT&T Intellectual Property # 84887Schin# # 94887Schin# A copy of the License is available at # 104887Schin# http://www.opensource.org/licenses/cpl1.0.txt # 114887Schin# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) # 124887Schin# # 134887Schin# Information and Software Systems Research # 144887Schin# AT&T Research # 154887Schin# Florham Park NJ # 164887Schin# # 174887Schin# David Korn <dgk@research.att.com> # 184887Schin# # 194887Schin######################################################################## 204887Schin# 214887Schin# bash compatibility startup script 224887Schin# 234887Schin# Author: 244887Schin# Karsten Fleischer 254887Schin# Omnium Software Engineering 264887Schin# An der Luisenburg 7 274887Schin# D-51379 Leverkusen 284887Schin# Germany 294887Schin# 304887Schin# <K.Fleischer@omnium.de> 314887Schin# 324887Schin 334887Schinalias declare=typeset 344887Schin 354887Schinnameref FUNCNAME=.sh.fun 364887Schininteger SHLVL 374887Schinexport SHLVL 384887SchinSHLVL+=1 394887Schin 404887Schinif [[ ! $EUID ]] 414887Schinthen EUID=$(id -u) 424887Schin readonly EUID 434887Schinfi 444887Schin 454887Schinif [[ ! $UID ]] 464887Schinthen UID=$(id -u) 474887Schin readonly UID 484887Schinfi 494887Schin 504887Schinreadonly SHELLOPTS 514887Schinif ! shopt -qo restricted; then 524887Schin IFS=: 534887Schin for i in $SHELLOPTS 544887Schin do 554887Schin [[ -n "$i" ]] && set -o $i 564887Schin done 574887Schin unset IFS 584887Schinfi 594887Schinfunction SHELLOPTS.get 604887Schin{ 614887Schin .sh.value=$(shopt -so) 624887Schin .sh.value=${.sh.value//+([[:space:]])on*([[:space:]])/:} 634887Schin .sh.value=${.sh.value%:} 644887Schin} 654887Schin 664887Schinset -A GROUPS $(id -G) 674887Schinfunction GROUPS.set 684887Schin{ 694887Schin return 1 704887Schin} 714887Schinfunction GROUPS.unset 724887Schin{ 734887Schin unset -f GROUPS.set 744887Schin unset -f GROUPS.unset 754887Schin} 764887Schin 774887Schintypeset -A DIRSTACK 784887Schinfunction DIRSTACK.get 794887Schin{ 804887Schin set -A .sh.value $(dirs) 814887Schin} 824887Schinfunction DIRSTACK.set 834887Schin{ 844887Schin integer index 854887Schin index=_push_max-.sh.subscript 864887Schin (( index == _push_max || index < _push_top )) && return 874887Schin _push_stack[index]=${.sh.value} 884887Schin} 894887Schinfunction DIRSTACK.unset 904887Schin{ 914887Schin unset -f DIRSTACK.get 924887Schin unset -f DIRSTACK.set 934887Schin unset -f DIRSTACK.unset 944887Schin} 954887Schin 964887Schinfunction PS1.set 974887Schin{ 984887Schin typeset prefix remaining=${.sh.value} var= n= k= 994887Schin while [[ $remaining ]] 1004887Schin do prefix=${remaining%%'\'*} 1014887Schin remaining=${remaining#$prefix} 1024887Schin var+="$prefix" 1034887Schin case ${remaining:1:1} in 1044887Schin t) var+="\$(printf '%(%H:%M:%S)T')";; 1058462SApril.Chin@Sun.COM d) var+="\$(printf '%(%a %b:%e)T')";; 1064887Schin n) var+=$'\n';; 1074887Schin s) var+=ksh;; 1084887Schin w) var+="\$(pwd)";; 1094887Schin W) var+="\$(basename \"\$(pwd)\")";; 1104887Schin u) var+=$USER;; 1118462SApril.Chin@Sun.COM h) var+=$(hostname -s);; 1124887Schin '#') var+=!;; 1134887Schin !) var+=!;; 1148462SApril.Chin@Sun.COM @) var+="\$(printf '%(%I:%M%p)T')";; 1154887Schin '$') if (( $(id -u) == 0 )) 1164887Schin then var+='#' 1174887Schin else var+='$' 1184887Schin fi;; 1194887Schin '\') var+='\\';; 1204887Schin '['|']') ;; 1214887Schin [0-7]) case ${remaining:1:3} in 1224887Schin [0-7][0-7][0-7]) 1234887Schin k=4;; 1244887Schin [0-7][0-7]) 1254887Schin k=3;; 1264887Schin *) k=2;; 1274887Schin esac 1284887Schin eval n="\$'"${remaining:0:k}"'" 1294887Schin var+=$n 1304887Schin remaining=${remaining:k} 1314887Schin continue 1324887Schin ;; 1334887Schin "") ;; 1344887Schin *) var+='\'${remaining:0:2};; 1354887Schin esac 1364887Schin remaining=${remaining:2} 1374887Schin done 1384887Schin .sh.value=$var 1394887Schin} 1404887Schinfunction logout 1414887Schin{ 1424887Schin if shopt -q login_shell; then 1434887Schin exit 1444887Schin else 1454887Schin print ${BASH##*/}: $0: not login shell: use 'exit' >&2 1464887Schin return 1 1474887Schin fi 1484887Schin} 1494887SchinPS1="bash$ " 1504887Schin 1514887Schinfunction source 1524887Schin{ 1534887Schin if ! shopt -qpo posix; then 1544887Schin unset OPATH 1554887Schin typeset OPATH=$PATH 1564887Schin typeset PATH=$PATH 1574887Schin if shopt -q sourcepath; then 1584887Schin PATH=$OPATH:. 1594887Schin else 1604887Schin PATH=. 1614887Schin fi 1624887Schin fi 1634887Schin . "$@" 1644887Schin} 1654887Schinunalias . 1664887Schinalias .=source 1674887Schin 1684887Schinalias enable=builtin 1694887Schin 1704887Schinfunction help 1714887Schin{ 1728462SApril.Chin@Sun.COM typeset b cmd usage try_cmd man 1738462SApril.Chin@Sun.COM function has_help_option 1748462SApril.Chin@Sun.COM { 1758462SApril.Chin@Sun.COM [[ $1 == @(''|/*|:|echo|false|true|login|test|'[') ]] && return 1 1768462SApril.Chin@Sun.COM return 0 1778462SApril.Chin@Sun.COM } 1788462SApril.Chin@Sun.COM typeset -A short_use=( 1798462SApril.Chin@Sun.COM [echo]='Usage: echo [ options ] [arg]...' 1808462SApril.Chin@Sun.COM [:]='Usage: : ...' 1818462SApril.Chin@Sun.COM [true]='Usage: true ...' 1828462SApril.Chin@Sun.COM [false]='Usage: false ...' 1838462SApril.Chin@Sun.COM [login]='Usage: login [-p] [name]' 1848462SApril.Chin@Sun.COM ['[']='Usage: [ EXPRESSION ] | [ OPTION' 1858462SApril.Chin@Sun.COM [test]='Usage: test EXPRESSION | test' 1868462SApril.Chin@Sun.COM ) 1878462SApril.Chin@Sun.COM b=$(builtin) 1888462SApril.Chin@Sun.COM if (( $# == 0)) 1898462SApril.Chin@Sun.COM then print 'The following is the current list of built-in commands:' 1908462SApril.Chin@Sun.COM print -r $'Type help *name* for more information about name\n' 1918462SApril.Chin@Sun.COM for cmd in $b 1928462SApril.Chin@Sun.COM do if has_help_option $cmd 1938462SApril.Chin@Sun.COM then usage=$($cmd --short 2>&1) 1948462SApril.Chin@Sun.COM print -r -- "${usage:7}" 1958462SApril.Chin@Sun.COM else print -r -- ${short_use[$cmd]:7} 1968462SApril.Chin@Sun.COM fi 1978462SApril.Chin@Sun.COM done 1988462SApril.Chin@Sun.COM return 1998462SApril.Chin@Sun.COM fi 2008462SApril.Chin@Sun.COM b=${b/'['/} 2014887Schin man=--man 2024887Schin [[ $1 == -s ]] && man=--short && shift 2038462SApril.Chin@Sun.COM for try_cmd 2048462SApril.Chin@Sun.COM do if has_help_option $try_cmd 2058462SApril.Chin@Sun.COM then if [[ $try_cmd == @(${b//$'\n'/'|'}) ]] 2068462SApril.Chin@Sun.COM then $try_cmd $man 2078462SApril.Chin@Sun.COM else man $try_cmd 2088462SApril.Chin@Sun.COM fi 2098462SApril.Chin@Sun.COM elif [[ $man == '--short' ]] 2108462SApril.Chin@Sun.COM then print -r -- ${short_use[$try_cmd]} 2118462SApril.Chin@Sun.COM else man $try_cmd 2128462SApril.Chin@Sun.COM fi 2134887Schin done 2144887Schin} 2154887Schin 2164887Schinfunction cd 2174887Schin{ 2184887Schin 2194887Schin local msg 2204887Schin local args 2214887Schin local i 2224887Schin local a 2234887Schin local ret 2244887Schin 2254887Schin if ! shopt -q cdable_vars; then 2264887Schin command cd "$@" 2274887Schin else 2284887Schin msg=$(command cd "$@" 2>&1) 2294887Schin ret=$? 2304887Schin if [[ $ret != 0 ]]; then 2314887Schin for i 2324887Schin do 2334887Schin case $i in 2344887Schin -*) args="$args $i" ;; 2354887Schin */*) args="$args $i" ;; 2364887Schin *) eval a="$"$i 2374887Schin if [[ -n $a ]]; then args="$args $a" 2384887Schin else args="$args $i" 2394887Schin fi 2404887Schin ;; 2414887Schin esac 2424887Schin done 2434887Schin 2444887Schin command cd $args 2454887Schin else 2464887Schin print -- $msg 2474887Schin return $ret 2484887Schin fi 2494887Schin fi 2504887Schin} 2514887Schin 2524887Schintypeset BASH=$0 2534887Schin! shopt -qo posix && HISTFILE=~/.bash_history 2544887SchinHOSTNAME=$(hostname) 2558462SApril.Chin@Sun.COMnameref BASH_SUBSHELL=.sh.subshell 256