diff --git a/bin/hostname/hostname.1 b/bin/hostname/hostname.1 index bfff27baa6c6..73255d280041 100644 --- a/bin/hostname/hostname.1 +++ b/bin/hostname/hostname.1 @@ -29,7 +29,7 @@ .\" @(#)hostname.1 8.2 (Berkeley) 4/28/95 .\" $FreeBSD$ .\" -.Dd December 7, 2006 +.Dd November 9, 2016 .Dt HOSTNAME 1 .Os .Sh NAME @@ -37,7 +37,8 @@ .Nd set or print name of current host system .Sh SYNOPSIS .Nm -.Op Fl fs +.Op Fl f +.Op Fl s|d .Op Ar name-of-host .Sh DESCRIPTION The @@ -62,6 +63,8 @@ This is the default behavior. .It Fl s Trim off any domain information from the printed name. +.It Fl d +Only print domain information. .El .Sh SEE ALSO .Xr gethostname 3 , diff --git a/bin/hostname/hostname.c b/bin/hostname/hostname.c index ecc319db6b17..3b07b8b5f537 100644 --- a/bin/hostname/hostname.c +++ b/bin/hostname/hostname.c @@ -54,11 +54,12 @@ static void usage(void) __dead2; int main(int argc, char *argv[]) { - int ch, sflag; + int ch, sflag, dflag; char *p, hostname[MAXHOSTNAMELEN]; sflag = 0; - while ((ch = getopt(argc, argv, "fs")) != -1) + dflag = 0; + while ((ch = getopt(argc, argv, "fsd")) != -1) switch (ch) { case 'f': /* @@ -70,6 +71,9 @@ main(int argc, char *argv[]) case 's': sflag = 1; break; + case 'd': + dflag = 1; + break; case '?': default: usage(); @@ -77,7 +81,7 @@ main(int argc, char *argv[]) argc -= optind; argv += optind; - if (argc > 1) + if (argc > 1 || (sflag && dflag)) usage(); if (*argv) { @@ -90,6 +94,10 @@ main(int argc, char *argv[]) p = strchr(hostname, '.'); if (p != NULL) *p = '\0'; + } else if (dflag) { + p = strchr(hostname, '.'); + if (p != NULL) + strcpy(hostname, ++p); } (void)printf("%s\n", hostname); } @@ -100,6 +108,6 @@ static void usage(void) { - (void)fprintf(stderr, "usage: hostname [-fs] [name-of-host]\n"); + (void)fprintf(stderr, "usage: hostname [-f] [s|d] [name-of-host]\n"); exit(1); }