mesg: do not print 'ttyname failed' message unless --verbose requested
Lots of people are confused why mesg(1) is priting this message. Usual cause seems to be an uninteractive shell trying to turn running 'mesg n' from a /root/.profile where command invocation is by default on debian based systems. This might be rare case when failing silently is better. [kzak@redhat.com: - add note to the man page - fix if(isatty()) logic] Reference: https://www.google.com/search?q=mesg+ttyname+failed Review: https://marc.info/?l=util-linux-ng&m=153319988631233&w=2 Signed-off-by: Sami Kerola <kerolasa@iki.fi> Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
parent
c6789d37ea
commit
8dd5832395
|
@ -55,6 +55,15 @@ write access by default, at least for the primary login shell. To make
|
|||
sure your ttys are set the way you want them to be set,
|
||||
.B mesg
|
||||
should be executed in your login scripts.
|
||||
.PP
|
||||
The
|
||||
.B mesg
|
||||
utility silently exits with error status 2 if the current standard error output does
|
||||
not refer to the terminal. In this case execute
|
||||
.B mesg
|
||||
is pointless. The command line option \fB\-\-verbose\fR forces
|
||||
mesg to print a warning in this situation. This behaviour has been introduced
|
||||
in version 2.33.
|
||||
.SH ARGUMENTS
|
||||
.TP
|
||||
.B n
|
||||
|
|
|
@ -121,6 +121,11 @@ int main(int argc, char *argv[])
|
|||
argc -= optind;
|
||||
argv += optind;
|
||||
|
||||
if (!isatty(STDERR_FILENO)) {
|
||||
if (verbose)
|
||||
warnx(_("no tty"));
|
||||
exit(MESG_EXIT_FAILURE);
|
||||
}
|
||||
if ((tty = ttyname(STDERR_FILENO)) == NULL)
|
||||
err(MESG_EXIT_FAILURE, _("ttyname failed"));
|
||||
if ((fd = open(tty, O_RDONLY)) < 0)
|
||||
|
|
Loading…
Reference in New Issue