diff mbox series

[1/6] fc -s: refuse multiple events instead of ignoring

Message ID 96c003b30fc95cdf5aed3162901abaa9b89430e2.1675798292.git.nabijaczleweli@nabijaczleweli.xyz (mailing list archive)
State Accepted
Delegated to: Herbert Xu
Headers show
Series [1/6] fc -s: refuse multiple events instead of ignoring | expand

Commit Message

Ahelenia Ziemiańska Feb. 7, 2023, 7:33 p.m. UTC
The POSIX SYNOPSIS (and our manual which steals it verbatim) says:
  fc -s [old=new] [first]
and, indeed, we only use the first non-= argument
instead of enforcing the usage, which is confusing.

bash:
	2025     ls
	2026     id
	$ fc -s ls=who 2025 2026
	who
	nabijaczleweli pts/2 2023-02-07 17:36 (192.168.1.109)
	nabijaczleweli pts/3 2023-02-07 17:38 (192.168.1.109)
	nabijaczleweli pts/4 2023-02-07 16:58 (192.168.1.109)
	nabijaczleweli pts/5 2023-02-07 17:45 (192.168.1.109)
ksh93:
	240     id
	241     ls
	$ fc -s ls=who 241 240
	ksh: hist: -e - requires single argument
yash:
	2       ls
	3       id
	$ fc -s ls=who 2 3
	fc: too many operands are specified
zsh:
	    2  id
	    3  ls
	tarta% fc -s ls=who 3 2
	fc: bad option: -s
dash (before):
	    1 ls
	    2 id
	$ fc -s ls=who 1 2
	who
	nabijaczleweli pts/2 2023-02-07 17:36 (192.168.1.109)
	nabijaczleweli pts/3 2023-02-07 17:38 (192.168.1.109)
	nabijaczleweli pts/4 2023-02-07 16:58 (192.168.1.109)
	nabijaczleweli pts/5 2023-02-07 17:45 (192.168.1.109)
dash (after):
	    1 ls
	    2 id
	$ fc -s ls=who 1 2
	src/dash: 3: fc: -s takes one history argument

Adapted-from: NetBSD src bin/sh/histedit.c rev 1.38 by aymeric@
---
Here's a quick few that fix my report and a couple of the ones you list
at the end of that thread.

 src/histedit.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Herbert Xu April 6, 2024, 8:55 a.m. UTC | #1
On Tue, Feb 07, 2023 at 08:33:25PM +0100, наб wrote:
> The POSIX SYNOPSIS (and our manual which steals it verbatim) says:
>   fc -s [old=new] [first]
> and, indeed, we only use the first non-= argument
> instead of enforcing the usage, which is confusing.
> 
> bash:
> 	2025     ls
> 	2026     id
> 	$ fc -s ls=who 2025 2026
> 	who
> 	nabijaczleweli pts/2 2023-02-07 17:36 (192.168.1.109)
> 	nabijaczleweli pts/3 2023-02-07 17:38 (192.168.1.109)
> 	nabijaczleweli pts/4 2023-02-07 16:58 (192.168.1.109)
> 	nabijaczleweli pts/5 2023-02-07 17:45 (192.168.1.109)
> ksh93:
> 	240     id
> 	241     ls
> 	$ fc -s ls=who 241 240
> 	ksh: hist: -e - requires single argument
> yash:
> 	2       ls
> 	3       id
> 	$ fc -s ls=who 2 3
> 	fc: too many operands are specified
> zsh:
> 	    2  id
> 	    3  ls
> 	tarta% fc -s ls=who 3 2
> 	fc: bad option: -s
> dash (before):
> 	    1 ls
> 	    2 id
> 	$ fc -s ls=who 1 2
> 	who
> 	nabijaczleweli pts/2 2023-02-07 17:36 (192.168.1.109)
> 	nabijaczleweli pts/3 2023-02-07 17:38 (192.168.1.109)
> 	nabijaczleweli pts/4 2023-02-07 16:58 (192.168.1.109)
> 	nabijaczleweli pts/5 2023-02-07 17:45 (192.168.1.109)
> dash (after):
> 	    1 ls
> 	    2 id
> 	$ fc -s ls=who 1 2
> 	src/dash: 3: fc: -s takes one history argument
> 
> Adapted-from: NetBSD src bin/sh/histedit.c rev 1.38 by aymeric@
> ---
> Here's a quick few that fix my report and a couple of the ones you list
> at the end of that thread.
> 
>  src/histedit.c | 7 +++++++
>  1 file changed, 7 insertions(+)

All applied.  Thanks.
diff mbox series

Patch

diff --git a/src/histedit.c b/src/histedit.c
index f5c90ab..fc87283 100644
--- a/src/histedit.c
+++ b/src/histedit.c
@@ -296,6 +296,13 @@  histcmd(int argc, char **argv)
 		*repl++ = '\0';
 		argc--, argv++;
 	}
+
+	/*
+	 * If -s is specified, accept only one operand
+	 */
+	if (sflg && argc >= 2)
+		sh_error("too many args");
+
 	/*
 	 * determine [first] and [last]
 	 */