⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hstech.texinfo

📁 linux下bash的源码
💻 TEXINFO
📖 第 1 页 / 共 2 页
字号:
These functions allow searching of the history list for entries containinga specific string.  Searching may be performed both forward and backwardfrom the current history position.  The search may be @dfn{anchored},meaning that the string must match at the beginning of the history entry.@cindex anchored search@deftypefun int history_search (char *string, int direction)Search the history for @var{string}, starting at the current historyoffset.  If @var{direction} < 0, then the search is through previous entries,else through subsequent.  If @var{string} is found, thenthe current history index is set to that history entry, and the valuereturned is the offset in the line of the entry where@var{string} was found.  Otherwise, nothing is changed, and a -1 isreturned.@end deftypefun@deftypefun int history_search_prefix (char *string, int direction)Search the history for @var{string}, starting at the current historyoffset.  The search is anchored: matching lines must begin with@var{string}.  If @var{direction} < 0, then the search is through previousentries, else through subsequent.  If @var{string} is found, then thecurrent history index is set to that entry, and the return value is 0. Otherwise, nothing is changed, and a -1 is returned. @end deftypefun@deftypefun int history_search_pos (char *string, int direction, int pos)Search for @var{string} in the history list, starting at @var{pos}, anabsolute index into the list.  If @var{direction} is negative, the searchproceeds backward from @var{pos}, otherwise forward.  Returns the absoluteindex of the history element where @var{string} was found, or -1 otherwise.@end deftypefun@node Managing the History File@subsection Managing the History FileThe History library can read the history from and write it to a file.This section documents the functions for managing a history file.@deftypefun int read_history (char *filename)Add the contents of @var{filename} to the history list, a line at atime.  If @var{filename} is @code{NULL}, then read from@file{~/.history}.  Returns 0 if successful, or errno if not.@end deftypefun@deftypefun int read_history_range (char *filename, int from, int to)Read a range of lines from @var{filename}, adding them to the history list.Start reading at line @var{from} and end at @var{to}.  If@var{from} is zero, start at the beginning.  If @var{to} is less than@var{from}, then read until the end of the file.  If @var{filename} is@code{NULL}, then read from @file{~/.history}.  Returns 0 if successful,or @code{errno} if not.@end deftypefun@deftypefun int write_history (char *filename)Write the current history to @var{filename}, overwriting @var{filename}if necessary.  If @var{filename} is@code{NULL}, then write the history list to @file{~/.history}.  Valuesreturned are as in @code{read_history ()}.@end deftypefun@deftypefun int append_history (int nelements, char *filename)Append the last @var{nelements} of the history list to @var{filename}.@end deftypefun@deftypefun int history_truncate_file (char *filename, int nlines)Truncate the history file @var{filename}, leaving only the last@var{nlines} lines.@end deftypefun@node History Expansion@subsection History ExpansionThese functions implement @code{csh}-like history expansion.@deftypefun int history_expand (char *string, char **output)Expand @var{string}, placing the result into @var{output}, a pointerto a string (@pxref{History Interaction}).  Returns:@table @code@item 0If no expansions took place (or, if the only change inthe text was the de-slashifying of the history expansioncharacter);@item 1if expansions did take place;@item -1if there was an error in expansion;@item 2if the returned line should only be displayed, but not executed,as with the @code{:p} modifier (@pxref{Modifiers}).@end tableIf an error ocurred in expansion, then @var{output} contains a descriptiveerror message.@end deftypefun@deftypefun {char *} history_arg_extract (int first, int last, char *string)Extract a string segment consisting of the @var{first} through @var{last}arguments present in @var{string}.  Arguments are broken up as in Bash.@end deftypefun@deftypefun {char *} get_history_event (char *string, int *cindex, int qchar)Returns the text of the history event beginning at @var{string} +@var{*cindex}.  @var{*cindex} is modified to point to after the eventspecifier.  At function entry, @var{cindex} points to the index into@var{string} where the history event specification begins.  @var{qchar}is a character that is allowed to end the event specification in additionto the ``normal'' terminating characters.@end deftypefun@deftypefun {char **} history_tokenize (char *string)Return an array of tokens parsed out of @var{string}, much as theshell might.  The tokens are split on white space and on thecharacters @code{()<>;&|$}, and shell quoting conventions areobeyed.@end deftypefun@node History Variables@section History VariablesThis section describes the externally visible variables exported bythe GNU History Library.@deftypevar int history_baseThe logical offset of the first entry in the history list.@end deftypevar@deftypevar int history_lengthThe number of entries currently stored in the history list.@end deftypevar@deftypevar int max_input_historyThe maximum number of history entries.  This must be changed using@code{stifle_history ()}.@end deftypevar@deftypevar char history_expansion_charThe character that starts a history event.  The default is @samp{!}.@end deftypevar@deftypevar char history_subst_charThe character that invokes word substitution if found at the start ofa line.  The default is @samp{^}.@end deftypevar@deftypevar char history_comment_charDuring tokenization, if this character is seen as the first characterof a word, then it and all subsequent characters up to a newline areignored, suppressing history expansion for the remainder of the line.This is disabled by default.@end deftypevar@deftypevar {char *} history_no_expand_charsThe list of characters which inhibit history expansion if found immediatelyfollowing @var{history_expansion_char}.  The default is whitespace and@samp{=}.@end deftypevar@node History Programming Example@section History Programming ExampleThe following program demonstrates simple use of the GNU History Library.@smallexamplemain ()@{  char line[1024], *t;  int len, done = 0;  line[0] = 0;  using_history ();  while (!done)    @{      printf ("history$ ");      fflush (stdout);      t = fgets (line, sizeof (line) - 1, stdin);      if (t && *t)        @{          len = strlen (t);          if (t[len - 1] == '\n')            t[len - 1] = '\0';        @}      if (!t)        strcpy (line, "quit");      if (line[0])        @{          char *expansion;          int result;          result = history_expand (line, &expansion);          if (result)            fprintf (stderr, "%s\n", expansion);          if (result < 0 || result == 2)            @{              free (expansion);              continue;            @}          add_history (expansion);          strncpy (line, expansion, sizeof (line) - 1);          free (expansion);        @}      if (strcmp (line, "quit") == 0)        done = 1;      else if (strcmp (line, "save") == 0)        write_history ("history_file");      else if (strcmp (line, "read") == 0)        read_history ("history_file");      else if (strcmp (line, "list") == 0)        @{          register HIST_ENTRY **the_list;          register int i;          the_list = history_list ();          if (the_list)            for (i = 0; the_list[i]; i++)              printf ("%d: %s\n", i + history_base, the_list[i]->line);        @}      else if (strncmp (line, "delete", 6) == 0)        @{          int which;          if ((sscanf (line + 6, "%d", &which)) == 1)            @{              HIST_ENTRY *entry = remove_history (which);              if (!entry)                fprintf (stderr, "No such entry %d\n", which);              else                @{                  free (entry->line);                  free (entry);                @}            @}          else            @{              fprintf (stderr, "non-numeric arg given to `delete'\n");            @}        @}    @}@}@end smallexample

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -