The diff below makes head(1) recognize `-' as a name for the standard input, as many other utilities do.
Jan Index: head.1 =================================================================== RCS file: /cvs/src/usr.bin/head/head.1,v retrieving revision 1.23 diff -u -p -r1.23 head.1 --- head.1 25 Oct 2015 21:50:32 -0000 1.23 +++ head.1 11 Oct 2016 13:33:23 -0000 @@ -47,6 +47,9 @@ utility copies the first lines of each specified .Ar file to the standard output. +A name of +.Sq - +is recognized as standard input. If no files are named, .Nm copies lines from the standard input. @@ -77,6 +80,16 @@ To display the first 500 lines of the fi .Ar foo : .Pp .Dl $ head -n 500 foo +.Pp +To display the first line of +.Ar foo , +the standard input, +.Ar bar +and +.Ar foo +again: +.Pp +.Dl $ head -n 1 foo - bar foo .Pp .Nm can be used in conjunction with Index: head.c =================================================================== RCS file: /cvs/src/usr.bin/head/head.c,v retrieving revision 1.21 diff -u -p -r1.21 head.c --- head.c 20 Mar 2016 17:14:51 -0000 1.21 +++ head.c 11 Oct 2016 13:33:23 -0000 @@ -93,7 +93,9 @@ main(int argc, char *argv[]) if (pledge("stdio", NULL) == -1) err(1, "pledge"); } else { - if ((fp = fopen(*argv, "r")) == NULL) { + fp = (argv[0][0] == '-' && argv[0][1] == 0) + ? stdin : fopen(*argv, "r"); + if (fp == NULL) { warn("%s", *argv++); status = 1; continue; @@ -101,7 +103,9 @@ main(int argc, char *argv[]) if (argc > 1) { if (!firsttime) putchar('\n'); - printf("==> %s <==\n", *argv); + printf("==> %s <==\n", + (argv[0][0] == '-' && argv[0][1] == 0) + ? "(stdin)" : *argv); } ++argv; }