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

Reply via email to