You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
227 lines
7.1 KiB
227 lines
7.1 KiB
This patch documents two implemented and classical command |
|
line options "-v" and "-x". It is derived from Debian GNU/Linux. |
|
|
|
Index: doc/bash.1 |
|
--- doc/bash.1.orig 2006-10-03 14:54:26 +0200 |
|
+++ doc/bash.1 2008-03-28 15:28:44 +0100 |
|
@@ -116,6 +116,12 @@ |
|
This option allows the positional parameters to be set |
|
when invoking an interactive shell. |
|
.TP |
|
+.B \-v |
|
+Print shell input lines as they are read. |
|
+.TP |
|
+.B \-x |
|
+Print commands and their arguments as they are executed. |
|
+.TP |
|
.B \-D |
|
A list of all double-quoted strings preceded by \fB$\fP |
|
is printed on the standard output. |
|
|
|
----------------------------------------------------------------------------- |
|
|
|
Port to HP-UX 11i and similar less smart platforms. |
|
|
|
Index: configure |
|
--- configure.orig 2006-09-26 17:06:01 +0200 |
|
+++ configure 2008-03-28 15:28:44 +0100 |
|
@@ -1517,6 +1517,7 @@ |
|
*-beos*) opt_bash_malloc=no ;; # they say it's suitable |
|
*-cygwin*) opt_bash_malloc=no ;; # Cygnus's CYGWIN environment |
|
*-opennt*|*-interix*) opt_bash_malloc=no ;; # Interix, now owned by Microsoft |
|
+*-hpux*) opt_bash_malloc=no ;; # HP HP-UX |
|
esac |
|
|
|
# memory scrambling on free() |
|
@@ -1662,7 +1663,7 @@ |
|
|
|
else |
|
MALLOC_LIB= |
|
- MALLOC_LIBRARY= |
|
+ MALLOC_LIBRARY=dummy |
|
MALLOC_LDFLAGS= |
|
MALLOC_DEP= |
|
fi |
|
Index: syntax.h |
|
--- syntax.h.orig 2006-06-22 19:45:22 +0200 |
|
+++ syntax.h 2008-03-28 15:28:44 +0100 |
|
@@ -21,6 +21,8 @@ |
|
#ifndef _SYNTAX_H_ |
|
#define _SYNTAX_H_ |
|
|
|
+#include "config.h" |
|
+ |
|
/* Defines for use by mksyntax.c */ |
|
|
|
#define slashify_in_quotes "\\`$\"\n" |
|
|
|
----------------------------------------------------------------------------- |
|
|
|
This adds the OpenPKG packaging brand. |
|
|
|
Index: version.c |
|
--- version.c.orig 2005-05-16 17:58:34 +0200 |
|
+++ version.c 2008-03-28 15:28:44 +0100 |
|
@@ -77,7 +77,7 @@ |
|
show_shell_version (extended) |
|
int extended; |
|
{ |
|
- printf ("GNU bash, version %s (%s)\n", shell_version_string (), MACHTYPE); |
|
+ printf ("GNU bash, version %s (%s) [@l_openpkg_release@]\n", shell_version_string (), MACHTYPE); |
|
if (extended) |
|
printf (_("Copyright (C) 2005 Free Software Foundation, Inc.\n")); |
|
} |
|
|
|
----------------------------------------------------------------------------- |
|
|
|
Ensure that Autoconf and friends are not run. |
|
|
|
Index: Makefile.in |
|
--- Makefile.in.orig 2006-08-17 20:03:35 +0200 |
|
+++ Makefile.in 2008-03-28 15:28:44 +0100 |
|
@@ -687,7 +687,6 @@ |
|
|
|
# comment out for distribution |
|
$(srcdir)/configure: $(srcdir)/configure.in $(srcdir)/aclocal.m4 $(srcdir)/config.h.in |
|
- cd $(srcdir) && autoconf |
|
|
|
# for chet |
|
reconfig: force |
|
|
|
----------------------------------------------------------------------------- |
|
|
|
Provide the y.tab.[ch] patches corresponding to what Bash 3.2 patches |
|
001-039 apply to parse.y in order to not require that this package has |
|
dependencies to the GNU bison package. |
|
|
|
--- y.tab.c.orig 2008-04-30 19:34:48 +0200 |
|
+++ y.tab.c 2008-04-30 19:39:08 +0200 |
|
@@ -2359,6 +2359,7 @@ |
|
#define PST_CMDTOKEN 0x1000 /* command token OK - unused */ |
|
#define PST_COMPASSIGN 0x2000 /* parsing x=(...) compound assignment */ |
|
#define PST_ASSIGNOK 0x4000 /* assignment statement ok in this context */ |
|
+#define PST_REGEXP 0x8000 /* parsing an ERE/BRE as a single word */ |
|
|
|
/* Initial size to allocate for tokens, and the |
|
amount to grow them by. */ |
|
@@ -3921,6 +3922,9 @@ |
|
return (character); |
|
} |
|
|
|
+ if (parser_state & PST_REGEXP) |
|
+ goto tokword; |
|
+ |
|
/* Shell meta-characters. */ |
|
if MBTEST(shellmeta (character) && ((parser_state & PST_DBLPAREN) == 0)) |
|
{ |
|
@@ -4028,6 +4032,7 @@ |
|
if MBTEST(character == '-' && (last_read_token == LESS_AND || last_read_token == GREATER_AND)) |
|
return (character); |
|
|
|
+tokword: |
|
/* Okay, if we got this far, we have to read a word. Read one, |
|
and then check it against the known ones. */ |
|
result = read_token_word (character); |
|
@@ -4065,7 +4070,7 @@ |
|
/* itrace("parse_matched_pair: open = %c close = %c", open, close); */ |
|
count = 1; |
|
pass_next_character = backq_backslash = was_dollar = in_comment = 0; |
|
- check_comment = (flags & P_COMMAND) && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0; |
|
+ check_comment = (flags & P_COMMAND) && qc != '`' && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0; |
|
|
|
/* RFLAGS is the set of flags we want to pass to recursive calls. */ |
|
rflags = (qc == '"') ? P_DQUOTE : (flags & P_DQUOTE); |
|
@@ -4532,8 +4537,11 @@ |
|
if (tok == WORD && test_binop (yylval.word->word)) |
|
op = yylval.word; |
|
#if defined (COND_REGEXP) |
|
- else if (tok == WORD && STREQ (yylval.word->word,"=~")) |
|
- op = yylval.word; |
|
+ else if (tok == WORD && STREQ (yylval.word->word, "=~")) |
|
+ { |
|
+ op = yylval.word; |
|
+ parser_state |= PST_REGEXP; |
|
+ } |
|
#endif |
|
else if (tok == '<' || tok == '>') |
|
op = make_word_from_token (tok); /* ( */ |
|
@@ -4564,6 +4572,7 @@ |
|
|
|
/* rhs */ |
|
tok = read_token (READ); |
|
+ parser_state &= ~PST_REGEXP; |
|
if (tok == WORD) |
|
{ |
|
tright = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL); |
|
@@ -4697,7 +4706,7 @@ |
|
if (pass_next_character) |
|
{ |
|
pass_next_character = 0; |
|
- goto got_character; |
|
+ goto got_escaped_character; |
|
} |
|
|
|
cd = current_delimiter (dstack); |
|
@@ -4749,9 +4758,34 @@ |
|
goto next_character; |
|
} |
|
|
|
+#ifdef COND_REGEXP |
|
+ /* When parsing a regexp as a single word inside a conditional command, |
|
+ we need to special-case characters special to both the shell and |
|
+ regular expressions. Right now, that is only '(' and '|'. */ /*)*/ |
|
+ if MBTEST((parser_state & PST_REGEXP) && (character == '(' || character == '|')) /*)*/ |
|
+ { |
|
+ if (character == '|') |
|
+ goto got_character; |
|
+ |
|
+ push_delimiter (dstack, character); |
|
+ ttok = parse_matched_pair (cd, '(', ')', &ttoklen, 0); |
|
+ pop_delimiter (dstack); |
|
+ if (ttok == &matched_pair_error) |
|
+ return -1; /* Bail immediately. */ |
|
+ RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2, |
|
+ token_buffer_size, TOKEN_DEFAULT_GROW_SIZE); |
|
+ token[token_index++] = character; |
|
+ strcpy (token + token_index, ttok); |
|
+ token_index += ttoklen; |
|
+ FREE (ttok); |
|
+ dollar_present = all_digit_token = 0; |
|
+ goto next_character; |
|
+ } |
|
+#endif /* COND_REGEXP */ |
|
+ |
|
#ifdef EXTENDED_GLOB |
|
/* Parse a ksh-style extended pattern matching specification. */ |
|
- if (extended_glob && PATTERN_CHAR (character)) |
|
+ if MBTEST(extended_glob && PATTERN_CHAR (character)) |
|
{ |
|
peek_char = shell_getc (1); |
|
if MBTEST(peek_char == '(') /* ) */ |
|
@@ -4946,12 +4980,14 @@ |
|
|
|
got_character: |
|
|
|
- all_digit_token &= DIGIT (character); |
|
- dollar_present |= character == '$'; |
|
- |
|
if (character == CTLESC || character == CTLNUL) |
|
token[token_index++] = CTLESC; |
|
|
|
+ got_escaped_character: |
|
+ |
|
+ all_digit_token &= DIGIT (character); |
|
+ dollar_present |= character == '$'; |
|
+ |
|
token[token_index++] = character; |
|
|
|
RESIZE_MALLOCED_BUFFER (token, token_index, 1, token_buffer_size, |
|
@@ -5660,7 +5696,7 @@ |
|
if (promptvars || posixly_correct) |
|
{ |
|
last_exit_value = last_command_exit_value; |
|
- list = expand_prompt_string (result, Q_DOUBLE_QUOTES); |
|
+ list = expand_prompt_string (result, Q_DOUBLE_QUOTES, 0); |
|
free (result); |
|
result = string_list (list); |
|
dispose_words (list);
|
|
|