1N/A########################################################################
1N/A# #
1N/A# This software is part of the ast package #
1N/A# Copyright (c) 1982-2011 AT&T Intellectual Property #
1N/A# and is licensed under the #
1N/A# Common Public License, Version 1.0 #
1N/A# by AT&T Intellectual Property #
1N/A# #
1N/A# A copy of the License is available at #
1N/A# http://www.opensource.org/licenses/cpl1.0.txt #
1N/A# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) #
1N/A# #
1N/A# Information and Software Systems Research #
1N/A# AT&T Research #
1N/A# Florham Park NJ #
1N/A# #
1N/A# David Korn <dgk@research.att.com> #
1N/A# #
1N/A########################################################################
1N/A#
1N/A# bash compatibility startup script
1N/A#
1N/A# Author:
1N/A# Karsten Fleischer
1N/A# Omnium Software Engineering
1N/A# An der Luisenburg 7
1N/A# D-51379 Leverkusen
1N/A# Germany
1N/A#
1N/A# <K.Fleischer@omnium.de>
1N/A#
1N/A
1N/Aalias declare=typeset
1N/A
1N/Anameref FUNCNAME=.sh.fun
1N/Ainteger SHLVL
1N/Aexport SHLVL
1N/ASHLVL+=1
1N/A
1N/Aif [[ ! $EUID ]]
1N/Athen EUID=$(id -u)
1N/A readonly EUID
1N/Afi
1N/A
1N/Aif [[ ! $UID ]]
1N/Athen UID=$(id -u)
1N/A readonly UID
1N/Afi
1N/A
1N/Areadonly SHELLOPTS
1N/Aif ! shopt -qo restricted; then
1N/A IFS=:
1N/A for i in $SHELLOPTS
1N/A do
1N/A [[ -n "$i" ]] && set -o $i
1N/A done
1N/A unset IFS
1N/Afi
1N/Afunction SHELLOPTS.get
1N/A{
1N/A .sh.value=$(shopt -so)
1N/A .sh.value=${.sh.value//+([[:space:]])on*([[:space:]])/:}
1N/A .sh.value=${.sh.value%:}
1N/A}
1N/A
1N/Aset -A GROUPS $(id -G)
1N/Afunction GROUPS.set
1N/A{
1N/A return 1
1N/A}
1N/Afunction GROUPS.unset
1N/A{
1N/A unset -f GROUPS.set
1N/A unset -f GROUPS.unset
1N/A}
1N/A
1N/Atypeset -A DIRSTACK
1N/Afunction DIRSTACK.get
1N/A{
1N/A set -A .sh.value $(dirs)
1N/A}
1N/Afunction DIRSTACK.set
1N/A{
1N/A integer index
1N/A index=_push_max-.sh.subscript
1N/A (( index == _push_max || index < _push_top )) && return
1N/A _push_stack[index]=${.sh.value}
1N/A}
1N/Afunction DIRSTACK.unset
1N/A{
1N/A unset -f DIRSTACK.get
1N/A unset -f DIRSTACK.set
1N/A unset -f DIRSTACK.unset
1N/A}
1N/A
1N/Afunction PS1.set
1N/A{
1N/A typeset prefix remaining=${.sh.value} var= n= k=
1N/A while [[ $remaining ]]
1N/A do prefix=${remaining%%'\'*}
1N/A remaining=${remaining#$prefix}
1N/A var+="$prefix"
1N/A case ${remaining:1:1} in
1N/A t) var+="\$(printf '%(%H:%M:%S)T')";;
1N/A d) var+="\$(printf '%(%a %b:%e)T')";;
1N/A n) var+=$'\n';;
1N/A s) var+=ksh;;
1N/A w) var+="\$(pwd)";;
1N/A W) var+="\$(basename \"\$(pwd)\")";;
1N/A u) var+=$USER;;
1N/A h) var+=$(hostname -s);;
1N/A '#') var+=!;;
1N/A !) var+=!;;
1N/A @) var+="\$(printf '%(%I:%M%p)T')";;
1N/A '$') if (( $(id -u) == 0 ))
1N/A then var+='#'
1N/A else var+='$'
1N/A fi;;
1N/A '\') var+='\\';;
1N/A '['|']') ;;
1N/A [0-7]) case ${remaining:1:3} in
1N/A [0-7][0-7][0-7])
1N/A k=4;;
1N/A [0-7][0-7])
1N/A k=3;;
1N/A *) k=2;;
1N/A esac
1N/A eval n="\$'"${remaining:0:k}"'"
1N/A var+=$n
1N/A remaining=${remaining:k}
1N/A continue
1N/A ;;
1N/A "") ;;
1N/A *) var+='\'${remaining:0:2};;
1N/A esac
1N/A remaining=${remaining:2}
1N/A done
1N/A .sh.value=$var
1N/A}
1N/Afunction logout
1N/A{
1N/A if shopt -q login_shell; then
1N/A exit
1N/A else
1N/A print ${BASH##*/}: $0: not login shell: use 'exit' >&2
1N/A return 1
1N/A fi
1N/A}
1N/APS1="bash$ "
1N/A
1N/Afunction source
1N/A{
1N/A if ! shopt -qpo posix; then
1N/A unset OPATH
1N/A typeset OPATH=$PATH
1N/A typeset PATH=$PATH
1N/A if shopt -q sourcepath; then
1N/A PATH=$OPATH:.
1N/A else
1N/A PATH=.
1N/A fi
1N/A fi
1N/A . "$@"
1N/A}
1N/Aunalias .
1N/Aalias .=source
1N/A
1N/Aalias enable=builtin
1N/A
1N/Afunction help
1N/A{
1N/A typeset b cmd usage try_cmd man
1N/A function has_help_option
1N/A {
1N/A [[ $1 == @(''|/*|:|echo|false|true|login|test|'[') ]] && return 1
1N/A return 0
1N/A }
1N/A typeset -A short_use=(
1N/A [echo]='Usage: echo [ options ] [arg]...'
1N/A [:]='Usage: : ...'
1N/A [true]='Usage: true ...'
1N/A [false]='Usage: false ...'
1N/A [login]='Usage: login [-p] [name]'
1N/A ['[']='Usage: [ EXPRESSION ] | [ OPTION'
1N/A [test]='Usage: test EXPRESSION | test'
1N/A )
1N/A b=$(builtin)
1N/A if (( $# == 0))
1N/A then print 'The following is the current list of built-in commands:'
1N/A print -r $'Type help *name* for more information about name\n'
1N/A for cmd in $b
1N/A do if has_help_option $cmd
1N/A then usage=$($cmd --short 2>&1)
1N/A print -r -- "${usage:7}"
1N/A else print -r -- ${short_use[$cmd]:7}
1N/A fi
1N/A done
1N/A return
1N/A fi
1N/A b=${b/'['/}
1N/A man=--man
1N/A [[ $1 == -s ]] && man=--short && shift
1N/A for try_cmd
1N/A do if has_help_option $try_cmd
1N/A then if [[ $try_cmd == @(${b//$'\n'/'|'}) ]]
1N/A then $try_cmd $man
1N/A else man $try_cmd
1N/A fi
1N/A elif [[ $man == '--short' ]]
1N/A then print -r -- ${short_use[$try_cmd]}
1N/A else man $try_cmd
1N/A fi
1N/A done
1N/A}
1N/A
1N/Afunction cd
1N/A{
1N/A
1N/A local msg
1N/A local args
1N/A local i
1N/A local a
1N/A local ret
1N/A
1N/A if ! shopt -q cdable_vars; then
1N/A command cd "$@"
1N/A else
1N/A msg=$(command cd "$@" 2>&1)
1N/A ret=$?
1N/A if [[ $ret != 0 ]]; then
1N/A for i
1N/A do
1N/A case $i in
1N/A -*) args="$args $i" ;;
1N/A */*) args="$args $i" ;;
1N/A *) eval a="$"$i
1N/A if [[ -n $a ]]; then args="$args $a"
1N/A else args="$args $i"
1N/A fi
1N/A ;;
1N/A esac
1N/A done
1N/A
1N/A command cd $args
1N/A else
1N/A print -- $msg
1N/A return $ret
1N/A fi
1N/A fi
1N/A}
1N/A
1N/Atypeset BASH=$0
1N/A! shopt -qo posix && HISTFILE=~/.bash_history
1N/AHOSTNAME=$(hostname)
1N/Anameref BASH_SUBSHELL=.sh.subshell