I've encountered a problem with the openpkg/shtool script when running the mysql daily program, openpkg-20030203-20030203. Around line 1816, ``optionally take logfile size into account'', it's using what seems to me to be a fairly comples combination of ``set, ls, and sed'' to compute the file size which actually is returning the user or group name on a SuSE 8.1 Linux system.
It seems to me that this would be much simpler using something like this: size=`ls -l $ldir/$file | awk '{printf "%d\n", $5}'` I'm attaching a diff for shtool that does this. The patch also includes ``id'' calls to fix problems that occur when running on a Linux system using nss_ldap and nss_ldap where the openpkg users aren't in the /etc/{passwd,group} files or found with ypcat. Bill -- INTERNET: [EMAIL PROTECTED] Bill Campbell; Celestial Software LLC UUCP: camco!bill PO Box 820; 6641 E. Mercer Way FAX: (206) 232-9186 Mercer Island, WA 98040-0820; (206) 236-1676 URL: http://www.celestial.com/ ``Things in our country run in spite of government. Not by aid of it!'' Will Rogers
--- /tmp/shtool 2003-02-21 09:59:14.000000000 -0800 +++ /home/csoft/suse81/lib/openpkg/shtool 2003-02-21 09:58:01.000000000 -0800 @@ -677,6 +677,9 @@ if [ ".$userid" = . ]; then userid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \ sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'` + if [ ".$userid" = . ]; then #{ + userid="`(id -u ${username}) 2>/dev/null`" + fi #} if [ ".$userid" = . ]; then userid=`(ypcat passwd) 2>/dev/null | egrep "^${username}:" | \ @@ -694,6 +697,9 @@ if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[gG]'`" != . ]; then groupid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \ sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'` + if [ ".$groupid" = . ]; then #{ + groupid="`(id -g ${username}) 2>/dev/null`" + fi #} if [ ".$groupid" = . ]; then groupid=`(ypcat passwd) 2>/dev/null | egrep "^${username}:" | \ sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'` @@ -708,6 +714,9 @@ if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%g'`" != . ]; then groupname=`egrep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \ sed -e 's/:.*$//'` + if [ ".$groupname" = . ]; then #{ + groupname="`(id -gn ${username}) 2>/dev/null`" + fi #} if [ ".$groupname" = . ]; then groupname=`(ypcat group) 2>/dev/null | \ egrep "^[^:]*:[^:]*:${groupid}:" | \ @@ -1807,10 +1816,7 @@ # optionally take logfile size into account if [ ".$opt_s" != . ]; then # determine size of logfile - set -- `ls -l $ldir/$file | sed -e 's; -> .*$;;' -e 's;[ ][ ]*; ;g'` - n=`expr $# - 4` - eval "size=\`echo \${$n}\`" - + size=`ls -l $ldir/$file | awk '{printf "%d\n", $5}'` # skip logfile if size is still too small if [ $size -lt $opt_s ]; then if [ ".$opt_v" = .yes ]; then