summaryrefslogtreecommitdiffstats
path: root/term-utils
diff options
context:
space:
mode:
authorSami Kerola2018-08-02 20:35:51 +0200
committerKarel Zak2018-08-03 12:27:02 +0200
commit8dd5832395c6a0b12e11b37c062e4c11be3c82ef (patch)
treea0da27e492def5c7dc8ad0e5a2a1e9da9425a85d /term-utils
parenttests: update lscpu tests (diff)
downloadkernel-qcow2-util-linux-8dd5832395c6a0b12e11b37c062e4c11be3c82ef.tar.gz
kernel-qcow2-util-linux-8dd5832395c6a0b12e11b37c062e4c11be3c82ef.tar.xz
kernel-qcow2-util-linux-8dd5832395c6a0b12e11b37c062e4c11be3c82ef.zip
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>
Diffstat (limited to 'term-utils')
-rw-r--r--term-utils/mesg.19
-rw-r--r--term-utils/mesg.c5
2 files changed, 14 insertions, 0 deletions
diff --git a/term-utils/mesg.1 b/term-utils/mesg.1
index b7e73a594..15c834dd7 100644
--- a/term-utils/mesg.1
+++ b/term-utils/mesg.1
@@ -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
diff --git a/term-utils/mesg.c b/term-utils/mesg.c
index 8714ad1aa..608f3cf61 100644
--- a/term-utils/mesg.c
+++ b/term-utils/mesg.c
@@ -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)