Xref: utzoo unix-pc.sources:321 comp.sys.att:6795 Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!apple!sun-barr!sun!imagen!atari!portal!cup.portal.com!thad From: thad@cup.portal.com (Thad P Floryan) Newsgroups: unix-pc.sources,comp.sys.att Subject: KSHPR: prompt generator for .kshrc Message-ID: <19817@cup.portal.com> Date: 23 Jun 89 12:28:53 GMT Organization: The Portal System (TM) Lines: 103 The following is a l'il qwik'n'dirty you may find useful. If you know of some other method to determine whether one is running su'd or not, please share it. This posting is to unix-pc.sources and comp.sys.att since it's of potential use to any UNIX user of ksh. # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # README # Makefile # kshpr.c # This archive created: Fri Jun 23 05:24:03 1989 echo shar: extracting README sed 's/^X//' << \SHAR_EOF > README X"Kshpr" is the proverbial "one-line" program you may find interesting and Xuseful. It is the result of my requirement for a different prompt while Xoperating ksh su'd. X XAfter several kludge attempts, including attempts to process the output of X`id`, I couldn't find an obvious way to detect the su'd condition directly Xin the shell, so "kshpr" was born. X XKshpr is intended for use in a .kshrc script per: X X PS1=`/usr/local/bin/kshpr` X Xkshpr's normal output is: "ksh $PPID/$$> " Xkshpr's output if su'd is: "ksh-su $PPID/$$# " X X$PPID is the parent process' ID; if it's a 1, then I know that typing a ^D Xwill log me out. $$ is the process ID of "this" process (e.g. this instance Xof the ksh). The typical display of the prompt is "ksh 1/2345> " and is X"ksh-su 2345/6789# " when running as superuser. X XAfter many futile attempts using other approaches, my notes don't indicate Xwhether one MUST specify /bin/ksh as the login shell for root or not (in the X/etc/passwd file), but it's that way on my systems now and all works fine. X XThad Floryan [ thad@cup.portal.com (OR) ..!sun!portal!cup.portal.com!thad ] SHAR_EOF if test 1104 -ne "`wc -c README`" then echo shar: error transmitting README '(should have been 1104 characters)' fi echo shar: extracting Makefile sed 's/^X//' << \SHAR_EOF > Makefile X# Makefile for kshpr X# X# Uncomment the line for your favorite compiler X# X#CC= cc XCC= gcc X XCFLAGS= -O X Xkshpr: kshpr.o X ld /lib/crt0s.o /lib/shlib.ifile kshpr.o -o kshpr -s X rm -f kshpr.o X Xkshpr.o: kshpr.c X $(CC) $(CFLAGS) -c kshpr.c SHAR_EOF if test 236 -ne "`wc -c Makefile`" then echo shar: error transmitting Makefile '(should have been 236 characters)' fi echo shar: extracting kshpr.c sed 's/^X//' << \SHAR_EOF > kshpr.c X/* kshpr X * X * This program displays my idea of a ksh prompt which is different for a X * normal user than it is for a su'd user. X * X * Kshpr is intended for use in a .kshrc script per: X * X * PS1=`/usr/local/bin/kshpr` X * X * The normal output is: "ksh $PPID/$$> ", and X * the output if su'd is: "ksh-su $PPID/$$# " X * X * Thad Floryan, 3-June-1989 X */ X X#include X Xextern int getuid(); X Xmain() X{ X if (getuid() == 0) fprintf(stdout, "ksh-su $PPID/$$# "); X else fprintf(stdout, "ksh $PPID/$$> "); X} SHAR_EOF if test 519 -ne "`wc -c kshpr.c`" then echo shar: error transmitting kshpr.c '(should have been 519 characters)' fi # End of shell archive exit 0