xref: /onnv-gate/usr/src/lib/libshell/common/data/bash_pre_rc.sh (revision 12068:08a39a083754)
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