From owner-freebsd-hackers@freebsd.org Sun Jan 24 12:19:41 2021 Return-Path: Delivered-To: freebsd-hackers@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id EC5A74F9B6A for ; Sun, 24 Jan 2021 12:19:41 +0000 (UTC) (envelope-from alx.manpages@gmail.com) Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4DNsWK0Xclz3CBQ; Sun, 24 Jan 2021 12:19:40 +0000 (UTC) (envelope-from alx.manpages@gmail.com) Received: by mail-wm1-x332.google.com with SMTP id y187so8330026wmd.3; Sun, 24 Jan 2021 04:19:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vxB7sFIhkdFfNASyegI8j5fZfgIskJRC51MEpIRmbBA=; b=dacZbrzlGb4FT8BBTvRaDqhJvckM60roK7MwqkJOCW99h2S6ouYuHFiT32/Kue5cyW zeT2wuVwW/U25GFILMXUlo7uEDvA04wVIBWfhSws2vfKi1i22tcKWuyE2VQZrmWhzKe5 KaGXJUlyQ4psiIzODB1Lp/G3PhVl8IUDFzKsmhuLL9s5F/NYoXe9XDusMRzx+pwI5TrW oQ3viZZ8/S3oeotjZqiPAFiNCRLcxOIQmZErY9+Gt2tZWDLtYR9l6+BoN0Y1Cm0Xt9qH vp6jALRBE6v3oNQHUH88n3nRInfoh0jH2+u6OCiJ+uF3qvSfpQNSQxJcOC4tZOSW8lWL AM2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vxB7sFIhkdFfNASyegI8j5fZfgIskJRC51MEpIRmbBA=; b=AYzH7KhaNnG0Jdp3yZu7cITDiyKJ22ELBu/iHAv1NlsgbFbDbn8QU/n5lHmEmbhdXN DG3rZyQtS8Sk+aO/7oA9ob3VnZMMjHVTX5QWHgOgWhJeHbP3uByXjEi9Wx/Vb0XZCF/j gZ+ZsRTqUZ8nvUITdPJD0vatmXXPZI6iIczBgZea1a9e++4Iadj/6wTtGv+dfhupZJSE b8lCxRmjyJfRff1UyqSre+oJfqESfeZXRkDuMgvJ3euYTvtWhHwWFezidrPBhypc5W1Q 8qz604sFxTCbeleu1hx+ax1T9DTkFQRNUZlX2s652J1zgIIFQ4BDY9CvUyw7c+UeINBi VFLA== X-Gm-Message-State: AOAM5311S0PhDdAcKtEMJgWymhL31Rv89FKxhqy8sSz9EOT0Cnxy7/KQ H9qJnssAg9v40EosjXjrPww= X-Google-Smtp-Source: ABdhPJz5Z5GPSB9eGxsrOUhA1AgtLGKGLG0h4QMnBuo5WBtxvT4ResoOf2VKlRavQFLJikqXsiz/+Q== X-Received: by 2002:a05:600c:230e:: with SMTP id 14mr2173459wmo.161.1611490779526; Sun, 24 Jan 2021 04:19:39 -0800 (PST) Received: from debian.vlc ([170.253.51.130]) by smtp.gmail.com with ESMTPSA id n16sm18680871wrj.26.2021.01.24.04.19.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 04:19:38 -0800 (PST) From: Alejandro Colomar To: Bernhard Voelker , Alex Henrie , Christian Groessler , =?UTF-8?q?P=C3=A1draig=20Brady?= , Coreutils , William Ahern , Erik Auerswald , Eric Pruitt , Jeffrey Walton Cc: Alejandro Colomar , Michael Kerrisk , Fabrice BAUZAC , tech@openbsd.org, freebsd-hackers@freebsd.org, linux-api@vger.kernel.org, juli@clockworksquid.com, ed@nuxi.nl, oshogbo@freebsd.org Subject: [PATCH v3 (resend)] tee: Add -q, --quiet, --silent option to not write to stdout Date: Sun, 24 Jan 2021 13:18:46 +0100 Message-Id: <20210124121845.38293-1-alx.manpages@gmail.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <1f8ce444-35e2-56a7-dbd1-34e885372b11@gmail.com> References: <1f8ce444-35e2-56a7-dbd1-34e885372b11@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 4DNsWK0Xclz3CBQ X-Spamd-Bar: +++++++ Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20161025 header.b=dacZbrzl; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx1.freebsd.org: domain of alxmanpages@gmail.com designates 2a00:1450:4864:20::332 as permitted sender) smtp.mailfrom=alxmanpages@gmail.com X-Spamd-Result: default: False [7.35 / 15.00]; RCVD_VIA_SMTP_AUTH(0.00)[]; GREYLIST(0.00)[pass,meta]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4000::/36:c]; FREEMAIL_FROM(0.00)[gmail.com]; R_MISSING_CHARSET(2.50)[]; BROKEN_CONTENT_TYPE(1.50)[]; RCVD_COUNT_THREE(0.00)[3]; DKIM_TRACE(0.00)[gmail.com:+]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; FREEMAIL_TO(0.00)[bernhard-voelker.de,gmail.com,groessler.org,draigbrady.com,gnu.org,25thandclement.com,unix-ag.uni-kl.de]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; FREEMAIL_ENVFROM(0.00)[gmail.com]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; TAGGED_FROM(0.00)[]; MID_RHS_MATCH_FROM(0.00)[]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim]; ARC_NA(0.00)[]; RBL_DBL_DONT_QUERY_IPS(0.00)[2a00:1450:4864:20::332:from]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20161025]; RECEIVED_SPAMHAUS_PBL(0.00)[170.253.51.130:received]; FROM_HAS_DN(0.00)[]; NEURAL_SPAM_SHORT(0.85)[0.847]; TAGGED_RCPT(0.00)[]; MIME_GOOD(-0.10)[text/plain]; NEURAL_SPAM_MEDIUM(1.00)[1.000]; SPAMHAUS_ZRD(0.00)[2a00:1450:4864:20::332:from:127.0.2.255]; TO_MATCH_ENVRCPT_SOME(0.00)[]; NEURAL_SPAM_LONG(1.00)[1.000]; RCPT_COUNT_TWELVE(0.00)[18]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::332:from]; FREEMAIL_CC(0.00)[gmail.com,mykolab.com,openbsd.org,freebsd.org,vger.kernel.org,clockworksquid.com,nuxi.nl]; RCVD_TLS_ALL(0.00)[]; SUSPICIOUS_RECIPS(1.50)[]; MAILMAN_DEST(0.00)[freebsd-hackers] X-Spam: Yes X-Mailman-Approved-At: Sun, 24 Jan 2021 13:12:08 +0000 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Technical discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 24 Jan 2021 12:19:42 -0000 This is useful for using tee to just write to a file, at the end of a pipeline, without having to redirect to /dev/null Example: echo 'foo' | sudo tee -q /etc/foo; is equivalent to the old (and ugly) echo 'foo' | sudo tee /etc/foo >/dev/null; Signed-off-by: Alejandro Colomar --- Resend as v3. I forgot to change the subject line. Everything else is the same as in <20210123145356.53962-1-alx.manpages@gmail.com>. src/tee.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/tee.c b/src/tee.c index c81faea91..1dfa92cf2 100644 --- a/src/tee.c +++ b/src/tee.c @@ -45,6 +45,9 @@ static bool append; /* If true, ignore interrupts. */ static bool ignore_interrupts; +/* Don't write to stdout */ +static bool quiet; + enum output_error { output_error_sigpipe, /* traditional behavior, sigpipe enabled. */ @@ -61,6 +64,8 @@ static struct option const long_options[] = {"append", no_argument, NULL, 'a'}, {"ignore-interrupts", no_argument, NULL, 'i'}, {"output-error", optional_argument, NULL, 'p'}, + {"quiet", no_argument, NULL, 'q'}, + {"silent", no_argument, NULL, 'q'}, {GETOPT_HELP_OPTION_DECL}, {GETOPT_VERSION_OPTION_DECL}, {NULL, 0, NULL, 0} @@ -93,6 +98,7 @@ Copy standard input to each FILE, and also to standard output.\n\ "), stdout); fputs (_("\ -p diagnose errors writing to non pipes\n\ + -q, --quiet, --silent don't write to standard output\n\ --output-error[=MODE] set behavior on write error. See MODE below\n\ "), stdout); fputs (HELP_OPTION_DESCRIPTION, stdout); @@ -130,8 +136,9 @@ main (int argc, char **argv) append = false; ignore_interrupts = false; + quiet = false; - while ((optc = getopt_long (argc, argv, "aip", long_options, NULL)) != -1) + while ((optc = getopt_long (argc, argv, "aipq", long_options, NULL)) != -1) { switch (optc) { @@ -151,6 +158,10 @@ main (int argc, char **argv) output_error = output_error_warn_nopipe; break; + case 'q': + quiet = true; + break; + case_GETOPT_HELP_CHAR; case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS); @@ -235,8 +246,9 @@ tee_files (int nfiles, char **files) break; /* Write to all NFILES + 1 descriptors. - Standard output is the first one. */ - for (i = 0; i <= nfiles; i++) + Standard output is the first one. + If 'quiet' is true, write to descriptors 1 and above (omit stdout) */ + for (i = quiet; i <= nfiles; i++) if (descriptors[i] && fwrite (buffer, bytes_read, 1, descriptors[i]) != 1) { -- 2.30.0