hackish work-around the lexer to make alias definitions in mksh -c
work (Closes: #517009) and mention in the manpage why they sometimes do not work (doing so for COMSUBs is not worth the effort)
This commit is contained in:
		
							
								
								
									
										17
									
								
								check.t
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								check.t
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
# $MirOS: src/bin/mksh/check.t,v 1.546 2012/06/28 20:04:01 tg Exp $
 | 
			
		||||
# $MirOS: src/bin/mksh/check.t,v 1.547 2012/06/28 20:05:05 tg Exp $
 | 
			
		||||
# $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $
 | 
			
		||||
# $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $
 | 
			
		||||
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
 | 
			
		||||
@@ -4085,9 +4085,11 @@ description:
 | 
			
		||||
	(so quotes could also be used to hide hem).  The former is
 | 
			
		||||
	easier, the later better...
 | 
			
		||||
stdin:
 | 
			
		||||
	echo $(echo \()
 | 
			
		||||
	echo $(echo \( )
 | 
			
		||||
	echo $(echo "(" )
 | 
			
		||||
expected-stdout:
 | 
			
		||||
	(
 | 
			
		||||
	(
 | 
			
		||||
---
 | 
			
		||||
name: regression-9
 | 
			
		||||
description:
 | 
			
		||||
@@ -6395,6 +6397,17 @@ expected-stdout:
 | 
			
		||||
	source='PATH=$PATH:. command .'
 | 
			
		||||
	type='whence -v'
 | 
			
		||||
---
 | 
			
		||||
name: aliases-cmdline
 | 
			
		||||
description:
 | 
			
		||||
	Check that aliases work from the command line (Debian #517009)
 | 
			
		||||
	Note that due to the nature of the lexing process, defining
 | 
			
		||||
	aliases in COMSUBs then immediately using them, and things
 | 
			
		||||
	like 'alias foo=bar && foo', still fail.
 | 
			
		||||
stdin:
 | 
			
		||||
	"$__progname" -c $'alias a="echo OK"\na'
 | 
			
		||||
expected-stdout:
 | 
			
		||||
	OK
 | 
			
		||||
---
 | 
			
		||||
name: aliases-funcdef-1
 | 
			
		||||
description:
 | 
			
		||||
	Check if POSIX functions take precedences over aliases
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								lex.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								lex.c
									
									
									
									
									
								
							@@ -23,7 +23,7 @@
 | 
			
		||||
 | 
			
		||||
#include "sh.h"
 | 
			
		||||
 | 
			
		||||
__RCSID("$MirOS: src/bin/mksh/lex.c,v 1.163 2012/05/04 22:44:33 tg Exp $");
 | 
			
		||||
__RCSID("$MirOS: src/bin/mksh/lex.c,v 1.164 2012/06/28 20:05:07 tg Exp $");
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * states while lexing word
 | 
			
		||||
@@ -1283,6 +1283,7 @@ getsc_uu(void)
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case SSTRING:
 | 
			
		||||
		case SSTRINGCMDLINE:
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case SWORDS:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								main.c
									
									
									
									
									
								
							@@ -34,7 +34,7 @@
 | 
			
		||||
#include <locale.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.223 2012/06/24 20:15:47 tg Exp $");
 | 
			
		||||
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.224 2012/06/28 20:05:08 tg Exp $");
 | 
			
		||||
 | 
			
		||||
extern char **environ;
 | 
			
		||||
 | 
			
		||||
@@ -461,7 +461,7 @@ main_init(int argc, const char *argv[], Source **sp, struct block **lp)
 | 
			
		||||
		/* auto-detect from environment variables, always */
 | 
			
		||||
		utf_flag = 3;
 | 
			
		||||
	} else if (Flag(FCOMMAND)) {
 | 
			
		||||
		s = pushs(SSTRING, ATEMP);
 | 
			
		||||
		s = pushs(SSTRINGCMDLINE, ATEMP);
 | 
			
		||||
		if (!(s->start = s->str = argv[argi++]))
 | 
			
		||||
			errorf("%s %s", "-c", "requires an argument");
 | 
			
		||||
#ifdef MKSH_MIDNIGHTBSD01ASH_COMPAT
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								mksh.1
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								mksh.1
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
.\" $MirOS: src/bin/mksh/mksh.1,v 1.286 2012/06/25 16:22:59 tg Exp $
 | 
			
		||||
.\" $MirOS: src/bin/mksh/mksh.1,v 1.287 2012/06/28 20:05:09 tg Exp $
 | 
			
		||||
.\" $OpenBSD: ksh.1,v 1.143 2012/06/19 16:41:00 jmc Exp $
 | 
			
		||||
.\"-
 | 
			
		||||
.\" Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
 | 
			
		||||
@@ -74,7 +74,7 @@
 | 
			
		||||
.\" with -mandoc, it might implement .Mx itself, but we want to
 | 
			
		||||
.\" use our own definition. And .Dd must come *first*, always.
 | 
			
		||||
.\"
 | 
			
		||||
.Dd $Mdocdate: June 25 2012 $
 | 
			
		||||
.Dd $Mdocdate: June 28 2012 $
 | 
			
		||||
.\"
 | 
			
		||||
.\" Check which macro package we use, and do other -mdoc setup.
 | 
			
		||||
.\"
 | 
			
		||||
@@ -1068,6 +1068,12 @@ space or tab, the following word is also checked for alias expansion.
 | 
			
		||||
The alias expansion process stops when a word that is not an alias is found,
 | 
			
		||||
when a quoted word is found, or when an alias word that is currently being
 | 
			
		||||
expanded is found.
 | 
			
		||||
Aliases are specifically an interactive feature: while they do happen
 | 
			
		||||
to work in scripts and on the command line in some cases, aliases are
 | 
			
		||||
expanded during lexing, so their use must be in a separate command tree
 | 
			
		||||
from their definition; otherwise, the alias will not be found.
 | 
			
		||||
Noticeably, command lists (separated by semicolon, in command substitutions
 | 
			
		||||
also by newline) may be one same parse tree.
 | 
			
		||||
.Pp
 | 
			
		||||
The following command aliases are defined automatically by the shell:
 | 
			
		||||
.Bd -literal -offset indent
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								sh.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								sh.h
									
									
									
									
									
								
							@@ -157,7 +157,7 @@
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef EXTERN
 | 
			
		||||
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.566 2012/06/28 20:02:28 tg Exp $");
 | 
			
		||||
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.567 2012/06/28 20:05:11 tg Exp $");
 | 
			
		||||
#endif
 | 
			
		||||
#define MKSH_VERSION "R40 2012/06/26"
 | 
			
		||||
 | 
			
		||||
@@ -1462,6 +1462,7 @@ struct source {
 | 
			
		||||
#define SWORDSEP	6	/* string[] separator */
 | 
			
		||||
#define SALIAS		7	/* alias expansion */
 | 
			
		||||
#define SREREAD		8	/* read ahead to be re-scanned */
 | 
			
		||||
#define SSTRINGCMDLINE	9	/* string from "mksh -c ..." */
 | 
			
		||||
 | 
			
		||||
/* Source.flags values */
 | 
			
		||||
#define SF_ECHO		BIT(0)	/* echo input to shlout */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user