environment. The local environment is used by "shell", "pipe", and
other commands that launch a subprocess other than an inferior.
+save history FILENAME
+ Save the command history to the given file.
+
save skip FILENAME
Save all current "skip"s to the given file.
Only history entries added during the current session are considered for
removal. This option is set to 0 by default.
+@kindex save history
+@item save history @var{filename}
+Occasionally you may want to save your history to a file. This
+command will do just that, saving the commands in your current session
+to the named file. Note that you should normally edit the saved
+history before using @code{source} to reload it, as the @code{save
+history} command itself will be at the end of the file.
+
+Alternatively, you can use @code{server save history} to avoid this
+issue, as the @code{server} prefix prevents the command from being
+recorded (@pxref{Server Prefix}).
@end table
History expansion assigns special meaning to the character @kbd{!}.
--- /dev/null
+# Copyright 2023 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 <http://www.gnu.org/licenses/>.
+
+# This file is part of the gdb testsuite.
+
+# Test the "save history" command.
+
+require {!is_remote host}
+
+gdb_start
+
+# Get something in history.
+gdb_test "print 23" " = 23"
+
+set filename [standard_output_file histfile]
+gdb_test_no_output "save history $filename" \
+ "save history"
+
+set expected "set height 0\n"
+append expected "set width 0\n"
+append expected "print 23\n"
+append expected "save history $filename\n"
+
+cmp_file_string $filename $expected "check history contents"
}
}
+/* Implementation of 'save history' command. */
+
+static void
+save_history_command (const char *filename, int from_tty)
+{
+ if (filename == nullptr || *filename == '\0')
+ error (_("Argument required (file name in which to save)"));
+
+ gdb::unique_xmalloc_ptr<char> expanded_filename (tilde_expand (filename));
+ write_history (expanded_filename.get ());
+}
+
/* Read one line from the command input stream `instream'.
CMD_LINE_BUFFER is a buffer that the function may use to store the result, if
show_write_history_p,
&sethistlist, &showhistlist);
+ cmd_list_element *c = add_cmd ("history", no_class, save_history_command,
+ _("\
+Save current history as a script.\n\
+Usage: save history FILE"),
+ &save_cmdlist);
+ set_cmd_completer (c, deprecated_filename_completer);
+
add_setshow_zuinteger_unlimited_cmd ("size", no_class,
&history_size_setshow_var, _("\
Set the size of the command history."), _("\