1da2e3ebdSchin######################################################################## 2da2e3ebdSchin# # 3da2e3ebdSchin# This software is part of the ast package # 4*b30d1939SAndy Fiddaman# Copyright (c) 1982-2012 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######################################################################## 20da2e3ebdSchinfunction err_exit 21da2e3ebdSchin{ 22da2e3ebdSchin print -u2 -n "\t" 23da2e3ebdSchin print -u2 -r $Command: "$@" 24da2e3ebdSchin let Errors+=1 25da2e3ebdSchin} 26da2e3ebdSchinalias err_exit='err_exit $LINENO' 27da2e3ebdSchin 2834f9b3eeSRoland MainzCommand=${0##*/} 2934f9b3eeSRoland Mainzinteger Errors=0 3034f9b3eeSRoland Mainz 3134f9b3eeSRoland Mainztmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; } 3234f9b3eeSRoland Mainztrap "cd /; rm -rf $tmp" EXIT 3334f9b3eeSRoland Mainz 34*b30d1939SAndy Fiddamanif $SHELL -c '[[ ~root == /* ]]' 35*b30d1939SAndy Fiddamanthen x=$(print -r -- ~root) 36*b30d1939SAndy Fiddaman [[ $x == ~root ]] || err_exit '~user expanded in subshell prevent ~user from working' 37*b30d1939SAndy Fiddamanfi 38*b30d1939SAndy Fiddaman 39da2e3ebdSchinfunction home # id 40da2e3ebdSchin{ 41da2e3ebdSchin typeset IFS=: pwd=/etc/passwd 42da2e3ebdSchin set -o noglob 43da2e3ebdSchin if [[ -f $pwd ]] && grep -c "^$1:" $pwd > /dev/null 44da2e3ebdSchin then set -- $(grep "^$1:" $pwd) 45da2e3ebdSchin print -r -- "$6" 46da2e3ebdSchin else print . 47da2e3ebdSchin fi 48da2e3ebdSchin} 49da2e3ebdSchin 50da2e3ebdSchinOLDPWD=/bin 51da2e3ebdSchinif [[ ~ != $HOME ]] 52da2e3ebdSchinthen err_exit '~' not $HOME 53da2e3ebdSchinfi 54da2e3ebdSchinx=~ 55da2e3ebdSchinif [[ $x != $HOME ]] 56da2e3ebdSchinthen err_exit x=~ not $HOME 57da2e3ebdSchinfi 58da2e3ebdSchinx=x:~ 59da2e3ebdSchinif [[ $x != x:$HOME ]] 60da2e3ebdSchinthen err_exit x=x:~ not x:$HOME 61da2e3ebdSchinfi 62da2e3ebdSchinif [[ ~+ != $PWD ]] 63da2e3ebdSchinthen err_exit '~' not $PWD 64da2e3ebdSchinfi 65da2e3ebdSchinx=~+ 66da2e3ebdSchinif [[ $x != $PWD ]] 67da2e3ebdSchinthen err_exit x=~+ not $PWD 68da2e3ebdSchinfi 69da2e3ebdSchinif [[ ~- != $OLDPWD ]] 70da2e3ebdSchinthen err_exit '~' not $PWD 71da2e3ebdSchinfi 72da2e3ebdSchinx=~- 73da2e3ebdSchinif [[ $x != $OLDPWD ]] 74da2e3ebdSchinthen err_exit x=~- not $OLDPWD 75da2e3ebdSchinfi 76da2e3ebdSchinfor u in root Administrator 77da2e3ebdSchindo h=$(home $u) 78da2e3ebdSchin if [[ $h != . ]] 79da2e3ebdSchin then [[ ~$u -ef $h ]] || err_exit "~$u not $h" 80da2e3ebdSchin x=~$u 8134f9b3eeSRoland Mainz [[ $x -ef $h ]] || x="~$u not $h" 82da2e3ebdSchin break 83da2e3ebdSchin fi 84da2e3ebdSchindone 8534f9b3eeSRoland Mainzx=~g.r.emlin 8634f9b3eeSRoland Mainzif [[ $x != '~g.r.emlin' ]] 8734f9b3eeSRoland Mainzthen err_exit "x=~g.r.emlin failed -- expected '~g.r.emlin', got '$x'" 88da2e3ebdSchinfi 89da2e3ebdSchinx=~:~ 90da2e3ebdSchinif [[ $x != "$HOME:$HOME" ]] 9134f9b3eeSRoland Mainzthen err_exit "x=~:~ failed, expected '$HOME:$HOME', got '$x'" 92da2e3ebdSchinfi 93da2e3ebdSchinHOME=/ 94da2e3ebdSchin[[ ~ == / ]] || err_exit '~ should be /' 95da2e3ebdSchin[[ ~/foo == /foo ]] || err_exit '~/foo should be /foo when ~==/' 9634f9b3eeSRoland Mainzprint $'print ~+\n[[ $1 ]] && $0' > $tmp/tilde 9734f9b3eeSRoland Mainzchmod +x $tmp/tilde 987c2fbfb3SApril Chinnl=$'\n' 9934f9b3eeSRoland Mainz[[ $($tmp/tilde foo) == "$PWD$nl$PWD" ]] 2> /dev/null || err_exit 'tilde fails inside a script run by name' 100*b30d1939SAndy Fiddaman 101*b30d1939SAndy Fiddamanexit $((Errors<125?Errors:125)) 102