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