xref: /openbsd/etc/ksh.kshrc (revision c02056c4)
1:
2#	$OpenBSD: ksh.kshrc,v 1.26 2016/09/10 12:50:20 rpe Exp $
3#
4# NAME:
5#	ksh.kshrc - global initialization for ksh
6#
7# DESCRIPTION:
8#	Each invocation of /bin/ksh processes the file pointed
9#	to by $ENV (usually $HOME/.kshrc).
10#	This file is intended as a global .kshrc file for the
11#	Korn shell.  A user's $HOME/.kshrc file simply requires
12#	the line:
13#		. /etc/ksh.kshrc
14#	at or near the start to pick up the defaults in this
15#	file which can then be overridden as desired.
16#
17# SEE ALSO:
18#	$HOME/.kshrc
19#
20
21# RCSid:
22#	$From: ksh.kshrc,v 1.4 1992/12/05 13:14:48 sjg Exp $
23#
24#	@(#)Copyright (c) 1991 Simon J. Gerraty
25#
26#	This file is provided in the hope that it will
27#	be of use.  There is absolutely NO WARRANTY.
28#	Permission to copy, redistribute or otherwise
29#	use this file is hereby granted provided that
30#	the above copyright notice and this notice are
31#	left intact.
32
33case "$-" in
34*i*)	# we are interactive
35	# we may have su'ed so reset these
36	USER=$(id -un)
37	UID=$(id -u)
38	case $UID in
39	0) PS1S='# ';;
40	esac
41	PS1S=${PS1S:-'$ '}
42	HOSTNAME=${HOSTNAME:-`uname -n`}
43	HOST=${HOSTNAME%%.*}
44
45	PROMPT="$USER:!$PS1S"
46	#PROMPT="<$USER@$HOST:!>$PS1S"
47	PPROMPT='$USER:$PWD:!'"$PS1S"
48	#PPROMPT='<$USER@$HOST:$PWD:!>'"$PS1S"
49	PS1=$PPROMPT
50	# $TTY is the tty we logged in on,
51	# $tty is that which we are in now (might by pty)
52	tty=`tty`
53	tty=`basename $tty`
54	TTY=${TTY:-$tty}
55	# $console is the system console device
56	console=$(sysctl kern.consdev)
57	console=${console#*=}
58
59	set -o emacs
60
61	alias ls='ls -CF'
62	alias h='fc -l | more'
63
64	case "$TERM" in
65	sun*-s)
66		# sun console with status line
67		if [[ $tty != $console ]]; then
68			# ilabel
69			ILS='\033]L'; ILE='\033\\'
70			# window title bar
71			WLS='\033]l'; WLE='\033\\'
72		fi
73		;;
74	xterm*)
75		ILS='\033]1;'; ILE='\007'
76		WLS='\033]2;'; WLE='\007'
77		parent="`ps -ax 2>/dev/null | grep $PPID | grep -v grep`"
78		case "$parent" in
79		*telnet*)
80		export TERM=xterms;;
81		esac
82		;;
83	*)	;;
84	esac
85	# do we want window decorations?
86	if [[ -n $ILS ]]; then
87		function ilabel { print -n "${ILS}$*${ILE}">/dev/tty; }
88		function label { print -n "${WLS}$*${WLE}">/dev/tty; }
89
90		alias stripe='label "$USER@$HOST ($tty) - $PWD"'
91		alias istripe='ilabel "$USER@$HOST ($tty)"'
92
93		# Run stuff through this to preserve the exit code
94		function _ignore { local rc=$?; "$@"; return $rc; }
95
96		function wftp { ilabel "ftp $*"; "ftp" "$@"; _ignore eval istripe; }
97
98		function wcd     { \cd "$@";     _ignore eval stripe; }
99
100		function wssh    { \ssh "$@";    _ignore eval 'istripe; stripe'; }
101		function wtelnet { \telnet "$@"; _ignore eval 'istripe; stripe'; }
102		function wsu     { \su "$@";     _ignore eval 'istripe; stripe'; }
103
104		alias su=wsu
105		alias cd=wcd
106		alias ftp=wftp
107		alias ssh=wssh
108		alias telnet=wtelnet
109		eval stripe
110		eval istripe
111		PS1=$PROMPT
112	fi
113	alias quit=exit
114	alias cls=clear
115	alias logout=exit
116	alias bye=exit
117	alias p='ps -l'
118	alias j=jobs
119	alias o='fg %-'
120	alias df='df -k'
121	alias du='du -k'
122	alias rsize='eval `resize`'
123;;
124*)	# non-interactive
125;;
126esac
127# commands for both interactive and non-interactive shells
128
129# is $1 missing from $2 (or PATH) ?
130function no_path {
131	eval _v="\$${2:-PATH}"
132	case :$_v: in
133	*:$1:*) return 1;;		# no we have it
134	esac
135	return 0
136}
137# if $1 exists and is not in path, append it
138function add_path {
139	[[ -d ${1:-.} ]] && no_path $* && eval ${2:-PATH}="\$${2:-PATH}:$1"
140}
141# if $1 exists and is not in path, prepend it
142function pre_path {
143	[[ -d ${1:-.} ]] && no_path $* && eval ${2:-PATH}="$1:\$${2:-PATH}"
144}
145# if $1 is in path, remove it
146function del_path {
147	no_path $* || eval ${2:-PATH}=`eval echo :'$'${2:-PATH}: |
148		sed -e "s;:$1:;:;g" -e "s;^:;;" -e "s;:\$;;"`
149}
150