Change ps(1) output width to unlimited if not interactive

Apply patch submitted with PR 217159 to make ps use unlimited
width when not associated with a terminal (i.e., none of stdout, stdin,
or stderr is a tty). Update comments and man page correspondingly.
This change was requested to work around lack of -ww in scripts from
third-party packages, including Hadoop, and adds a small measure of
Linux compatibility. Hopefully few if any non-interactive scripts
depend on the old default of 79.

PR:		217159
Submitted by:	n.deepak at gmail.com
Reviewed by:	vangyzen jhb
Differential Revision:	https://reviews.freebsd.org/D14614
This commit is contained in:
karels 2018-03-10 00:10:47 +00:00
parent 3b632a05ab
commit 7f22cba406
2 changed files with 19 additions and 4 deletions

View File

@ -101,6 +101,14 @@ The default output format includes, for each process, the process' ID,
controlling terminal, state, CPU time (including both user and system time)
and associated command.
.Pp
If the
.Nm
process is associated with a terminal, the default output width is that of the
terminal; otherwise the output width is unlimited.
See also the
.Fl w
option.
.Pp
The options are as follows:
.Bl -tag -width indent
.It Fl -libxo
@ -257,13 +265,15 @@ option implies the
.Fl m
option.
.It Fl w
Use 132 columns to display information, instead of the default which
is your window size.
Use at least 132 columns to display information, instead of the default which
is the window size if
.Nm
is associated with a terminal.
If the
.Fl w
option is specified more than once,
.Nm
will use as many columns as necessary without regard for your window size.
will use as many columns as necessary without regard for the window size.
Note that this option has no effect if the
.Dq command
column is not the last column displayed.

View File

@ -202,6 +202,11 @@ main(int argc, char *argv[])
* any of stdout, stderr, or stdin is a terminal. The intent
* is that "ps", "ps | more", and "ps | grep" all use the same
* default line length unless -w is specified.
*
* If not interactive, the default length was traditionally 79.
* It has been changed to unlimited. This is mostly for the
* benefit of non-interactive scripts, which arguably should
* use -ww, but is compatible with Linux.
*/
if ((cols = getenv("COLUMNS")) != NULL && *cols != '\0')
termwidth = atoi(cols);
@ -209,7 +214,7 @@ main(int argc, char *argv[])
ioctl(STDERR_FILENO, TIOCGWINSZ, (char *)&ws) == -1 &&
ioctl(STDIN_FILENO, TIOCGWINSZ, (char *)&ws) == -1) ||
ws.ws_col == 0)
termwidth = 79;
termwidth = UNLIMITED;
else
termwidth = ws.ws_col - 1;