Je voudrais savoir s'il y a un moyen d'obtenir le nombre de secondes écoulées depuis l'époque UNIX dans un shell compatible POSIX, sans avoir recours à des langues non POSIX comme perl, ou en utilisant des extensions non POSIX comme la fonction strftime de GNU awk . p>
Voici quelques solutions que je l'ai déjà Exclue ... p>
date +% s code> // ne fonctionne pas sur Solaris p> Blockquote>J'ai vu quelques scripts shell suggested avant, qui parser la sortie de
date code> puis secondes Derive de la date du calendrier grégorien au format, mais ils ne « t semblent prendre des détails comme secondes bissextiles. p>GNU awk a le
strftime code>, mais ce n'est pas disponible en standardawk code>. p>Je pourrais écrire un petit programme C qui appelle le temps
code>, mais le binaire serait spécifique à une architecture particulière. p>Est-il possible de la plate-forme croisée de le faire en utilisant seulement des outils conformes POSIX? p>
Je suis tenté d'abandonner et accepter une dépendance sur Perl, qui est au moins largement déployée. P>
perl -e 'print temps' // Tricher (non-POSIX), mais devrait fonctionner sur la plupart des plates-formes p> Blockquote>
3 Réponses :
Juste à des fins éducatives, un peu de hack. Mais c'est comme POSIX que vous pouvez imaginer: -) permet de voir ce que cela imprime: p>
pax -wx cpio x code> produit pax: mauvaise option: -wx code> et ensuite info d'utilisation
PAX -WX CPIO X CODE> Produit deux lignes: PAX: CPIO Header Field est trop petit pour stocker Fichier X CODE> 07070700000000000000000000000000000000000000000000000000000000000000000000000000000000TRAIA !!! CODE> . Il en va de même pour PAX -W -X CPIO X CODE>. Version PAX: 1: 20171021-2 sur Ubuntu 18.04.
devrait être assez portable, mais nécessite un accès en écriture à Je n'ai pas utilisé fonctionne sur FreeBSD, de toute façon. P> {. CURDIR}; code> peut-être peut être modifié. / tmp code> pour L'exécutable depuis la plupart des gens ont / tmp code> monté noexeec. p> #!/bin/sh
# Portably gets the date since epoch
bn=`basename $0`
prog=`mktemp /tmp/${bn}.mktime.XXXXXXX` || exit 1
>${prog}.c cat <<EOF
#include <stdio.h>
#include <time.h>
int main() {printf("%ju", time(NULL)); return 0; }
EOF
cc ${prog}.c
time=`./a.out`
rm ${prog} a.out
echo Time since epoch = $time seconds
Voici une solution POSIX / POSIX CODE> SOLUTION: PATH=`getconf PATH` awk 'BEGIN{srand();print srand()}'
D'ACCORD; Je me suis trompé. Oui, j'ai supposé awk code> 's srand () code> serait parallèle la version C. Ce n'est clairement pas. Weird, mais ce que vous décrivez, c'est ce que les documents POSIX pour AWK CODE> doivent arriver.
Sur mon système (Ubuntu): le premier srand () code> est nécessaire.
@ J.f.sebastian Merci, répondez à la mise à jour du comportement de l'État Gawk.
@jlliagre merci pour la grande réponse! Remarque: Utilisation de printf code> plutôt que Imprimer code> évitera la nouvelle ligne de fin.