suggested addition to 'date'
Julian Elischer
julian at elischer.org
Sat Sep 2 23:33:07 PDT 2006
Peter Jeremy wrote:
>On Sat, 2006-Sep-02 09:56:53 +1000, Lucas James wrote:
>
>
>>On Saturday 02 September 2006 03:53, Garance A Drosehn wrote:>
>>
>>
>>>mode. Not ever. Date is a command to set or display dates.
>>>It is not a command to filter files. 'cat' would be a more
>>>
>>>
>>appropriate place to add this option.
>>
>>
>
>I tend to agree.
>
>
>
>>or add an option to cat to prepend each line with an arbitrary string ala:
>>
>>cat -p `date` file
>>
>>
>
>Firstly, we already have this:
> sed "s=^=$(date)=" file
>
>And secondly, this pre-pends a fixed string. What's wanted is a filter
>to prepend a time/date stamp (which varies) to the input stream.
>
>The justification for extending date(1) is that it already has the code
>to handle date/time stamps. In reality, this code is all in strftime(3)
>and cat(1) already has hooks to insert a string at the beginning of a
>line so I believe that the attached patch is more appropriate. (Man
>page update on request).
>
>
I look forward to this commit..
(I don't care where I get the capacity from as long as I can datestamp
files)
puting it in 'tee' is also an option.. timestamping the 'file' output.
>
>
>------------------------------------------------------------------------
>
>Index: cat.c
>===================================================================
>RCS file: /usr/ncvs/src/bin/cat/cat.c,v
>retrieving revision 1.32
>diff -u -r1.32 cat.c
>--- cat.c 10 Jan 2005 08:39:20 -0000 1.32
>+++ cat.c 2 Sep 2006 03:08:58 -0000
>@@ -67,6 +67,7 @@
> int bflag, eflag, nflag, sflag, tflag, vflag;
> int rval;
> const char *filename;
>+const char *datefmt;
>
> static void usage(void);
> static void scanfiles(char *argv[], int cooked);
>@@ -84,7 +85,7 @@
>
> setlocale(LC_CTYPE, "");
>
>- while ((ch = getopt(argc, argv, "benstuv")) != -1)
>+ while ((ch = getopt(argc, argv, "benp:stuv")) != -1)
> switch (ch) {
> case 'b':
> bflag = nflag = 1; /* -b implies -n */
>@@ -95,6 +96,8 @@
> case 'n':
> nflag = 1;
> break;
>+ case 'p':
>+ datefmt = optarg;
> case 's':
> sflag = 1;
> break;
>@@ -177,6 +180,8 @@
> cook_cat(FILE *fp)
> {
> int ch, gobble, line, prev;
>+ char datebuf[1024];
>+ time_t now;
>
> /* Reset EOF condition on stdin. */
> if (fp == stdin && feof(stdin))
>@@ -198,6 +203,14 @@
> if (ferror(stdout))
> break;
> }
>+ if (datefmt != NULL) {
>+ time(&now);
>+ strftime(datebuf, sizeof(datebuf), datefmt,
>+ localtime(&now));
>+ (void)fputs(datebuf, stdout);
>+ if (ferror(stdout))
>+ break;
>+ }
> }
> if (ch == '\n') {
> if (eflag && putchar('$') == EOF)
>
>
More information about the freebsd-current
mailing list