2009/12/14 Dr. David Kirkby <david.kir...@onetel.net>: > John Cremona wrote: >> On a 64-bit ubuntu system I had to include the ".sh" like this: >> >> j...@selmer%date -u +%s && ./unixtime.sh >> 1260823644 >> 1260823644 >> >> since: >> >> j...@selmer%date -u +%s && ./unixtime >> 1260823676 >> -bash: ./unixtime: No such file or directory >> >> My $SHELL is /bin/bash but your script uses /bin/sh which here is >> >> j...@selmer%ls -l /bin/sh >> lrwxrwxrwx 1 root root 4 2009-06-25 11:41 /bin/sh -> dash >> >> dash? > > Thank you for that John, > > The code will actually go into the script > > $SAGE_ROOT/spkg/install > > which has at the top of it: > > #!/usr/bin/env bash > echo `date -u "+%s"` > .BUILDSTART > > So my code will actually be executed with 'bash'. I want to get rid of the > GNU-specific option to the date command. > > I guess I should have put > > #!/usr/bin/env bash > > in the script I posted, but I tend only to write scripts that make use of > things > supported by a minimal /bin/sh, rather than rely on any bash-specific > features. > > I must admit I'm puzzled it needed the .sh on the end. Are you sure you had > the > execute permission on the version without the .sh ?
Yes, definitely. (If not, even ./unixtime.sh would have failed.) > > I'm still puzzled though I must admit, why it says "No such file or > directory", > since the file clearly exists. I suppose I have never used the 'dash' shell, > so > don't know how it behaves. > Nor me. But someone will try to build Sage with it one day! John > > bash is considered a perquisite for Sage, though personally I tend to write > thing that work with other shells. 'dash' seems pretty unique in not executing > code without the .sh extension. The shells on Solaris, HP-UX, Linux, OS X and > AIX all work without the .sh. > > So far, anyone that has posted the output and compared it with > > $ date +%s > > appears to give the same result, so I believe this will give us portability > without compromising accuracy. > > Dave > >> John >> >> 2009/12/13 Dr. David Kirkby <david.kir...@onetel.net>: >>> If you have a system with the GNU version of date, then >>> >>> date -u +%s >>> >>> will give the seconds since the Epoch. Unfortunately, it only works with GNU >>> date, and so will not work on Solaris, HP-UX or no doubt many other Unix >>> systems. >>> >>> The following script should compute this is a portable manner. Here's a few >>> examples >>> >>> On sage.math, where date accepts +%s >>> >>> kir...@sage:~$ date -u +%s && ./unixtime >>> 1260720556 >>> 1260720556 >>> >>> >>> On an HP-UX system, where date does *not* accept +%s >>> >>> bash-2.04$ uname -a >>> HP-UX hpbox B.11.11 U 9000/785 2016698240 unlimited-user license >>> bash-2.04$ ./unixtime && date -u +%s >>> 1260720771 >>> date: bad format character - s >>> >>> On an OpenSolaris system, where date does *not* accept +%s >>> >>> bash-3.2$ ./unixtime && date -u +%s >>> 1260720823 >>> %s >>> >>> >>> On an IBM server running AIX 6.1, where date does accept +%s >>> >>> $ uname -a >>> AIX client1 1 6 00C6B7C04C00 >>> $ ./unixtime && date -u +%s >>> 1260721013 >>> 1260721013 >>> >>> >>> >>> For every system I am able to check this on, the following script gives >>> exactly >>> the same output as the GNU date command, but in a more portable manner. >>> >>> Could a few people check it on their systems. >>> >>> If it does work, I'd propose it is used in place of the GNUism introduced in >>> http://trac.sagemath.org/sage_trac/ticket/6744 >>> >>> Currently the file .BUILDSTART created by #6744 is not actually used >>> anywhere in >>> Sage, but clearly the intension is to use it at some point, in which case it >>> will be found not to work on some systems. >>> >>> Dave >>> ----------------------------------------------- >>> >>> >>> #!/bin/sh >>> # Compute seconds since the Epoch. >>> >>> # Call 'date'. Note that >>> # %Y = year including century >>> # %j = day number (1-365) >>> # %H = hour (0-23) >>> # %M = minute (0-59) >>> # %S = seconds (0-59) >>> >>> if type env >/dev/null 2>&1 ; then >>> set -- `env LC_ALL=C LC_TIME=C LANG=C date -u '+%Y %j %H %M %S'` >>> else >>> set -- `date -u '+%Y %j %H %M %S'` >>> fi >>> >>> # $1 = year including century >>> # $2 = day number (1-365) >>> # $3 = hour (0-23) >>> # $4 = minute (0-59) >>> # $5 = seconds (0-59) >>> >>> if [ $? -ne 0 ] || [ $# -lt 5 ] ; then >>> TIME="Error computing seconds since the Epoch" >>> fi >>> >>> DAYS=`expr 365 \* \( $1 - 1970 \) + \( $1 - 1969 \) / 4 + $2 - 1` >>> TIME=`expr $5 + 60 \* \( $4 + 60 \* \( $3 + 24 \* $DAYS \) \)` >>> echo $TIME >>> >>> >>> -- >>> To post to this group, send an email to sage-devel@googlegroups.com >>> To unsubscribe from this group, send an email to >>> sage-devel+unsubscr...@googlegroups.com >>> For more options, visit this group at >>> http://groups.google.com/group/sage-devel >>> URL: http://www.sagemath.org >>> >> > > -- > To post to this group, send an email to sage-devel@googlegroups.com > To unsubscribe from this group, send an email to > sage-devel+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/sage-devel > URL: http://www.sagemath.org > -- To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URL: http://www.sagemath.org