From ed59ded5ebf4f5eb5014612020c88ebd27f0b819 Mon Sep 17 00:00:00 2001 From: Doug Evans Date: Tue, 15 Nov 2011 05:06:35 +0000 Subject: [PATCH] Make "!" an alias for "shell". * NEWS: Add mention. * cli/cli-cmds.c (init_cli_cmds): Remove xdb_commands condition on adding "!" command, always add it. * cli/cli-decode.c (find_command_name_length): Recognize "!" as a command of length one. doc/ * gdb.texinfo (Shell Commands): Document "!". testsuite/ * gdb.base/shell.exp: New file. --- gdb/ChangeLog | 9 +++++++++ gdb/NEWS | 6 ++++++ gdb/cli/cli-cmds.c | 9 +-------- gdb/cli/cli-decode.c | 7 ++++++- gdb/doc/ChangeLog | 4 ++++ gdb/doc/gdb.texinfo | 7 +++++-- gdb/testsuite/ChangeLog | 4 ++++ gdb/testsuite/gdb.base/shell.exp | 24 ++++++++++++++++++++++++ 8 files changed, 59 insertions(+), 11 deletions(-) create mode 100644 gdb/testsuite/gdb.base/shell.exp diff --git a/gdb/ChangeLog b/gdb/ChangeLog index cf8f7f8..eefae59 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2011-11-14 Doug Evans + + Make "!" an alias for "shell". + * NEWS: Add mention. + * cli/cli-cmds.c (init_cli_cmds): Remove xdb_commands condition on + adding "!" command, always add it. + * cli/cli-decode.c (find_command_name_length): Recognize "!" as a + command of length one. + 2011-11-14 Stan Shebs Kwok Cheung Yeung diff --git a/gdb/NEWS b/gdb/NEWS index dc16a4b..bce8e3c 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -103,6 +103,12 @@ at the time the function got called. Entry values are available only since gcc version 4.7. +* New commands + +!SHELL COMMAND + "!" is now an alias of the "shell" command. + Note that no space is needed between "!" and SHELL COMMAND. + * Changed commands watch EXPRESSION mask MASK_VALUE diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c index 94328c4..d75a6c0 100644 --- a/gdb/cli/cli-cmds.c +++ b/gdb/cli/cli-cmds.c @@ -1825,14 +1825,7 @@ Two arguments (separated by a comma) are taken as a range of memory to dump,\n\ if (xdb_commands) add_com_alias ("va", "disassemble", class_xdb, 0); - /* NOTE: cagney/2000-03-20: Being able to enter ``(gdb) !ls'' would - be a really useful feature. Unfortunately, the below wont do - this. Instead it adds support for the form ``(gdb) ! ls'' - (i.e. the space is required). If the ``!'' command below is - added the complains about no ``!'' command would be replaced by - complains about how the ``!'' command is broken :-) */ - if (xdb_commands) - add_com_alias ("!", "shell", class_support, 0); + add_com_alias ("!", "shell", class_support, 0); c = add_com ("make", class_support, make_command, _("\ Run the ``make'' program using the rest of the line as arguments.")); diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c index 0870782..22ae6ec 100644 --- a/gdb/cli/cli-decode.c +++ b/gdb/cli/cli-decode.c @@ -1127,11 +1127,16 @@ find_command_name_length (const char *text) Note that this is larger than the character set allowed when creating user-defined commands. */ + /* Recognize '!' as a single character command so that, e.g., "!ls" + works as expected. */ + if (*p == '!') + return 1; + while (isalnum (*p) || *p == '-' || *p == '_' /* Characters used by TUI specific commands. */ || *p == '+' || *p == '<' || *p == '>' || *p == '$' /* Characters used for XDB compatibility. */ - || (xdb_commands && (*p == '!' || *p == '/' || *p == '?'))) + || (xdb_commands && (*p == '/' || *p == '?'))) p++; return p - text; diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 02ef07b..15659d6 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,7 @@ +2011-11-14 Doug Evans + + * gdb.texinfo (Shell Commands): Document "!". + 2011-11-14 Stan Shebs Kwok Cheung Yeung diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 0cadc96..9255b89 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -1347,9 +1347,12 @@ just use the @code{shell} command. @table @code @kindex shell +@kindex ! @cindex shell escape -@item shell @var{command string} -Invoke a standard shell to execute @var{command string}. +@item shell @var{command-string} +@itemx !@var{command-string} +Invoke a standard shell to execute @var{command-string}. +Note that no space is needed between @code{!} and @var{command-string}. If it exists, the environment variable @code{SHELL} determines which shell to run. Otherwise @value{GDBN} uses the default shell (@file{/bin/sh} on Unix systems, @file{COMMAND.COM} on MS-DOS, etc.). diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index a53f52f..d71e46c 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2011-11-14 Doug Evans + + * gdb.base/shell.exp: New file. + 2011-11-14 Stan Shebs * gdb.trace/ftrace.c: New. diff --git a/gdb/testsuite/gdb.base/shell.exp b/gdb/testsuite/gdb.base/shell.exp new file mode 100644 index 0000000..ce1223d --- /dev/null +++ b/gdb/testsuite/gdb.base/shell.exp @@ -0,0 +1,24 @@ +# Copyright 2011 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Test that the shell and ! commands work. + +gdb_exit +gdb_start + +gdb_test "shell echo foo" "foo" + +gdb_test "! echo foo" "foo" +gdb_test "!echo foo" "foo" -- 2.7.4