2011-11-11 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. doc/ * gdb.texinfo (Shell Commands): Document "!". testsuite/ * gdb.base/shell.exp: New file. Index: NEWS =================================================================== RCS file: /cvs/src/src/gdb/NEWS,v retrieving revision 1.464 diff -u -p -r1.464 NEWS --- NEWS 2 Nov 2011 23:44:19 -0000 1.464 +++ NEWS 11 Nov 2011 15:46:51 -0000 @@ -104,6 +104,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 Index: cli/cli-cmds.c =================================================================== RCS file: /cvs/src/src/gdb/cli/cli-cmds.c,v retrieving revision 1.118 diff -u -p -r1.118 cli-cmds.c --- cli/cli-cmds.c 1 Nov 2011 14:51:22 -0000 1.118 +++ cli/cli-cmds.c 11 Nov 2011 15:46:51 -0000 @@ -1825,14 +1825,7 @@ Two arguments (separated by a comma) are 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.")); Index: cli/cli-decode.c =================================================================== RCS file: /cvs/src/src/gdb/cli/cli-decode.c,v retrieving revision 1.98 diff -u -p -r1.98 cli-decode.c --- cli/cli-decode.c 9 Oct 2011 22:21:42 -0000 1.98 +++ cli/cli-decode.c 11 Nov 2011 15:54:29 -0000 @@ -1127,11 +1127,16 @@ find_command_name_length (const char *te 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; Index: doc/gdb.texinfo =================================================================== RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v retrieving revision 1.890 diff -u -p -r1.890 gdb.texinfo --- doc/gdb.texinfo 8 Nov 2011 21:34:18 -0000 1.890 +++ doc/gdb.texinfo 11 Nov 2011 15:46:51 -0000 @@ -1347,8 +1347,10 @@ just use the @code{shell} command. @table @code @kindex shell +@kindex ! @cindex shell escape @item shell @var{command string} +@itemx ! @var{command string} Invoke a standard shell to execute @var{command string}. If it exists, the environment variable @code{SHELL} determines which shell to run. Otherwise @value{GDBN} uses the default shell Index: testsuite/gdb.base/shell.exp =================================================================== RCS file: testsuite/gdb.base/shell.exp diff -N testsuite/gdb.base/shell.exp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ testsuite/gdb.base/shell.exp 11 Nov 2011 15:51:36 -0000 @@ -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"