]> git.ipfire.org Git - thirdparty/bash.git/commitdiff
commit bash-20100415 snapshot
authorChet Ramey <chet.ramey@case.edu>
Tue, 13 Dec 2011 02:57:14 +0000 (21:57 -0500)
committerChet Ramey <chet.ramey@case.edu>
Tue, 13 Dec 2011 02:57:14 +0000 (21:57 -0500)
32 files changed:
#redir.c# [new file with mode: 0644]
CWRU/CWRU.chlog
CWRU/CWRU.chlog~
bashline.c
bashline.c~
builtins/fc.def
builtins/fc.def~ [new file with mode: 0644]
doc/bash.1
doc/bash.1~
doc/bashref.texi
doc/bashref.texi~
doc/version.texi
doc/version.texi~ [new file with mode: 0644]
execute_cmd.c
execute_cmd.c~
lib/readline/complete.c
lib/readline/complete.c~
lib/readline/doc/readline.3
lib/readline/doc/readline.3~ [new file with mode: 0644]
lib/readline/doc/rluser.texi
lib/readline/doc/rluser.texi~
lib/readline/doc/version.texi
lib/readline/doc/version.texi~ [new file with mode: 0644]
lib/readline/input.c
parse.y
parse.y~
po/fr.po
redir.c~
subst.c
subst.c~
subst.h
subst.h~

diff --git a/#redir.c# b/#redir.c#
new file mode 100644 (file)
index 0000000..e58cf60
--- /dev/null
+++ b/#redir.c#
@@ -0,0 +1,1279 @@
+/* redir.c -- Functions to perform input and output redirection. */
+
+/* Copyright (C) 1997-2009 Free Software Foundation, Inc.
+
+   This file is part of GNU Bash, the Bourne Again SHell.
+
+   Bash 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.
+
+   Bash 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 Bash.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "config.h"
+
+#if !defined (__GNUC__) && !defined (HAVE_ALLOCA_H) && defined (_AIX)
+  #pragma alloca
+#endif /* _AIX && RISC6000 && !__GNUC__ */
+
+#include <stdio.h>
+#include "bashtypes.h"
+#if !defined (_MINIX) && defined (HAVE_SYS_FILE_H)
+#  include <sys/file.h>
+#endif
+#include "filecntl.h"
+#include "posixstat.h"
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include <errno.h>
+
+#if !defined (errno)
+extern int errno;
+#endif
+
+#include "bashansi.h"
+#include "bashintl.h"
+#include "memalloc.h"
+
+#define NEED_FPURGE_DECL
+
+#include "shell.h"
+#include "flags.h"
+#include "execute_cmd.h"
+#include "redir.h"
+
+#if defined (BUFFERED_INPUT)
+#  include "input.h"
+#endif
+
+#define SHELL_FD_BASE  10
+
+int expanding_redir;
+
+extern int posixly_correct;
+extern REDIRECT *redirection_undo_list;
+extern REDIRECT *exec_redirection_undo_list;
+
+/* Static functions defined and used in this file. */
+static void add_undo_close_redirect __P((int));
+static void add_exec_redirect __P((REDIRECT *));
+static int add_undo_redirect __P((int, enum r_instruction, int));
+static int expandable_redirection_filename __P((REDIRECT *));
+static int stdin_redirection __P((enum r_instruction, int));
+static int undoablefd __P((int));
+static int do_redirection_internal __P((REDIRECT *, int));
+
+static int write_here_document __P((int, WORD_DESC *));
+static int write_here_string __P((int, WORD_DESC *));
+static int here_document_to_fd __P((WORD_DESC *, enum r_instruction));
+
+static int redir_special_open __P((int, char *, int, int, enum r_instruction));
+static int noclobber_open __P((char *, int, int, enum r_instruction));
+static int redir_open __P((char *, int, int, enum r_instruction));
+
+static int redir_varassign __P((REDIRECT *, int));
+static int redir_varvalue __P((REDIRECT *));
+
+/* Spare redirector used when translating [N]>&WORD[-] or [N]<&WORD[-] to
+   a new redirection and when creating the redirection undo list. */
+static REDIRECTEE rd;
+
+/* Set to errno when a here document cannot be created for some reason.
+   Used to print a reasonable error message. */
+static int heredoc_errno;
+
+void
+redirection_error (temp, error)
+     REDIRECT *temp;
+     int error;
+{
+  char *filename, *allocname;
+  int oflags;
+
+  allocname = 0;
+  if (temp->rflags & REDIR_VARASSIGN)
+    filename = savestring (temp->redirector.filename->word);
+  else if (temp->redirector.dest < 0)
+    /* This can happen when read_token_word encounters overflow, like in
+       exec 4294967297>x */
+    filename = _("file descriptor out of range");
+#ifdef EBADF
+  /* This error can never involve NOCLOBBER */
+  else if (error != NOCLOBBER_REDIRECT && temp->redirector.dest >= 0 && error == EBADF)
+    {
+      /* If we're dealing with two file descriptors, we have to guess about
+         which one is invalid; in the cases of r_{duplicating,move}_input and
+         r_{duplicating,move}_output we're here because dup2() failed. */
+      switch (temp->instruction)
+        {
+        case r_duplicating_input:
+        case r_duplicating_output:
+        case r_move_input:
+        case r_move_output:
+         filename = allocname = itos (temp->redirectee.dest);
+         break;
+       case r_duplicating_input_word:
+         if (temp->redirector.dest == 0)       /* Guess */
+           filename = temp->redirectee.filename->word; /* XXX */
+         else
+           filename = allocname = itos (temp->redirector.dest);
+         break;
+       case r_duplicating_output_word:
+         if (temp->redirector.dest == 1)       /* Guess */
+           filename = temp->redirectee.filename->word; /* XXX */
+         else
+           filename = allocname = itos (temp->redirector.dest);
+         break;
+       default:
+         filename = allocname = itos (temp->redirector.dest);
+         break;
+        }
+    }
+#endif
+  else if (expandable_redirection_filename (temp))
+    {
+expandable_filename:
+      if (posixly_correct && interactive_shell == 0)
+       {
+         oflags = temp->redirectee.filename->flags;
+         temp->redirectee.filename->flags |= W_NOGLOB;
+       }
+      filename = allocname = redirection_expand (temp->redirectee.filename);
+      if (posixly_correct && interactive_shell == 0)
+       temp->redirectee.filename->flags = oflags;
+      if (filename == 0)
+       filename = temp->redirectee.filename->word;
+    }
+  else if (temp->redirectee.dest < 0)
+    filename = "file descriptor out of range";
+  else
+    filename = allocname = itos (temp->redirectee.dest);
+
+  switch (error)
+    {
+    case AMBIGUOUS_REDIRECT:
+      internal_error (_("%s: ambiguous redirect"), filename);
+      break;
+
+    case NOCLOBBER_REDIRECT:
+      internal_error (_("%s: cannot overwrite existing file"), filename);
+      break;
+
+#if defined (RESTRICTED_SHELL)
+    case RESTRICTED_REDIRECT:
+      internal_error (_("%s: restricted: cannot redirect output"), filename);
+      break;
+#endif /* RESTRICTED_SHELL */
+
+    case HEREDOC_REDIRECT:
+      internal_error (_("cannot create temp file for here-document: %s"), strerror (heredoc_errno));
+      break;
+
+    case BADVAR_REDIRECT:
+      internal_error (_("%s: cannot assign fd to variable"), filename);
+      break;
+
+    default:
+      internal_error ("%s: %s", filename, strerror (error));
+      break;
+    }
+
+  FREE (allocname);
+}
+
+/* Perform the redirections on LIST.  If flags & RX_ACTIVE, then actually
+   make input and output file descriptors, otherwise just do whatever is
+   neccessary for side effecting.  flags & RX_UNDOABLE says to remember
+   how to undo the redirections later, if non-zero.  If flags & RX_CLEXEC
+   is non-zero, file descriptors opened in do_redirection () have their
+   close-on-exec flag set. */
+int
+do_redirections (list, flags)
+     REDIRECT *list;
+     int flags;
+{
+  int error;
+  REDIRECT *temp;
+
+  if (flags & RX_UNDOABLE)
+    {
+      if (redirection_undo_list)
+       {
+         dispose_redirects (redirection_undo_list);
+         redirection_undo_list = (REDIRECT *)NULL;
+       }
+      if (exec_redirection_undo_list)
+       dispose_exec_redirects ();
+    }
+
+  for (temp = list; temp; temp = temp->next)
+    {
+      error = do_redirection_internal (temp, flags);
+      if (error)
+       {
+         redirection_error (temp, error);
+         return (error);
+       }
+    }
+  return (0);
+}
+
+/* Return non-zero if the redirection pointed to by REDIRECT has a
+   redirectee.filename that can be expanded. */
+static int
+expandable_redirection_filename (redirect)
+     REDIRECT *redirect;
+{
+  switch (redirect->instruction)
+    {
+    case r_output_direction:
+    case r_appending_to:
+    case r_input_direction:
+    case r_inputa_direction:
+    case r_err_and_out:
+    case r_append_err_and_out:
+    case r_input_output:
+    case r_output_force:
+    case r_duplicating_input_word:
+    case r_duplicating_output_word:
+    case r_move_input_word:
+    case r_move_output_word:
+      return 1;
+
+    default:
+      return 0;
+    }
+}
+
+/* Expand the word in WORD returning a string.  If WORD expands to
+   multiple words (or no words), then return NULL. */
+char *
+redirection_expand (word)
+     WORD_DESC *word;
+{
+  char *result;
+  WORD_LIST *tlist1, *tlist2;
+  WORD_DESC *w;
+
+  w = copy_word (word);
+  if (posixly_correct)
+    w->flags |= W_NOSPLIT;
+
+  tlist1 = make_word_list (w, (WORD_LIST *)NULL);
+  expanding_redir = 1;
+  tlist2 = expand_words_no_vars (tlist1);
+  expanding_redir = 0;
+  dispose_words (tlist1);
+
+  if (!tlist2 || tlist2->next)
+    {
+      /* We expanded to no words, or to more than a single word.
+        Dispose of the word list and return NULL. */
+      if (tlist2)
+       dispose_words (tlist2);
+      return ((char *)NULL);
+    }
+  result = string_list (tlist2);  /* XXX savestring (tlist2->word->word)? */
+  dispose_words (tlist2);
+  return (result);
+}
+
+static int
+write_here_string (fd, redirectee)
+     int fd;
+     WORD_DESC *redirectee;
+{
+  char *herestr;
+  int herelen, n, e;
+
+  expanding_redir = 1;
+  herestr = expand_string_to_string (redirectee->word, 0);
+  expanding_redir = 0;
+  herelen = STRLEN (herestr);
+
+  n = write (fd, herestr, herelen);
+  if (n == herelen)
+    {
+      n = write (fd, "\n", 1);
+      herelen = 1;
+    }
+  e = errno;
+  FREE (herestr);
+  if (n != herelen)
+    {
+      if (e == 0)
+       e = ENOSPC;
+      return e;
+    }
+  return 0;
+}  
+
+/* Write the text of the here document pointed to by REDIRECTEE to the file
+   descriptor FD, which is already open to a temp file.  Return 0 if the
+   write is successful, otherwise return errno. */
+static int
+write_here_document (fd, redirectee)
+     int fd;
+     WORD_DESC *redirectee;
+{
+  char *document;
+  int document_len, fd2;
+  FILE *fp;
+  register WORD_LIST *t, *tlist;
+
+  /* Expand the text if the word that was specified had
+     no quoting.  The text that we expand is treated
+     exactly as if it were surrounded by double quotes. */
+
+  if (redirectee->flags & W_QUOTED)
+    {
+      document = redirectee->word;
+      document_len = strlen (document);
+      /* Set errno to something reasonable if the write fails. */
+      if (write (fd, document, document_len) < document_len)
+       {
+         if (errno == 0)
+           errno = ENOSPC;
+         return (errno);
+       }
+      else
+       return 0;
+    }
+
+  expanding_redir = 1;
+  tlist = expand_string (redirectee->word, Q_HERE_DOCUMENT);
+  expanding_redir = 0;
+
+  if (tlist)
+    {
+      /* Try using buffered I/O (stdio) and writing a word
+        at a time, letting stdio do the work of buffering
+        for us rather than managing our own strings.  Most
+        stdios are not particularly fast, however -- this
+        may need to be reconsidered later. */
+      if ((fd2 = dup (fd)) < 0 || (fp = fdopen (fd2, "w")) == NULL)
+       {
+         if (fd2 >= 0)
+           close (fd2);
+         return (errno);
+       }
+      errno = 0;
+      for (t = tlist; t; t = t->next)
+       {
+         /* This is essentially the body of
+            string_list_internal expanded inline. */
+         document = t->word->word;
+         document_len = strlen (document);
+         if (t != tlist)
+           putc (' ', fp);     /* separator */
+         fwrite (document, document_len, 1, fp);
+         if (ferror (fp))
+           {
+             if (errno == 0)
+               errno = ENOSPC;
+             fd2 = errno;
+             fclose(fp);
+             dispose_words (tlist);
+             return (fd2);
+           }
+       }
+      dispose_words (tlist);
+      if (fclose (fp) != 0)
+       {
+         if (errno == 0)
+           errno = ENOSPC;
+         return (errno);
+       }
+    }
+  return 0;
+}
+
+/* Create a temporary file holding the text of the here document pointed to
+   by REDIRECTEE, and return a file descriptor open for reading to the temp
+   file.  Return -1 on any error, and make sure errno is set appropriately. */
+static int
+here_document_to_fd (redirectee, ri)
+     WORD_DESC *redirectee;
+     enum r_instruction ri;
+{
+  char *filename;
+  int r, fd, fd2;
+
+  fd = sh_mktmpfd ("sh-thd", MT_USERANDOM|MT_USETMPDIR, &filename);
+
+  /* If we failed for some reason other than the file existing, abort */
+  if (fd < 0)
+    {
+      FREE (filename);
+      return (fd);
+    }
+
+  errno = r = 0;               /* XXX */
+  /* write_here_document returns 0 on success, errno on failure. */
+  if (redirectee->word)
+    r = (ri != r_reading_string) ? write_here_document (fd, redirectee)
+                                : write_here_string (fd, redirectee);
+
+  if (r)
+    {
+      close (fd);
+      unlink (filename);
+      free (filename);
+      errno = r;
+      return (-1);
+    }
+
+  /* In an attempt to avoid races, we close the first fd only after opening
+     the second. */
+  /* Make the document really temporary.  Also make it the input. */
+  fd2 = open (filename, O_RDONLY, 0600);
+
+  if (fd2 < 0)
+    {
+      r = errno;
+      unlink (filename);
+      free (filename);
+      close (fd);
+      errno = r;
+      return -1;
+    }
+
+  close (fd);
+  if (unlink (filename) < 0)
+    {
+      r = errno;
+#if defined (__CYGWIN__)
+      /* Under CygWin 1.1.0, the unlink will fail if the file is
+        open. This hack will allow the previous action of silently
+        ignoring the error, but will still leave the file there. This
+        needs some kind of magic. */
+      if (r == EACCES)
+       return (fd2);
+#endif /* __CYGWIN__ */
+      close (fd2);
+      free (filename);
+      errno = r;
+      return (-1);
+    }
+
+  free (filename);
+  return (fd2);
+}
+
+#define RF_DEVFD       1
+#define RF_DEVSTDERR   2
+#define RF_DEVSTDIN    3
+#define RF_DEVSTDOUT   4
+#define RF_DEVTCP      5
+#define RF_DEVUDP      6
+
+/* A list of pattern/value pairs for filenames that the redirection
+   code handles specially. */
+static STRING_INT_ALIST _redir_special_filenames[] = {
+#if !defined (HAVE_DEV_FD)
+  { "/dev/fd/[0-9]*", RF_DEVFD },
+#endif
+#if !defined (HAVE_DEV_STDIN)
+  { "/dev/stderr", RF_DEVSTDERR },
+  { "/dev/stdin", RF_DEVSTDIN },
+  { "/dev/stdout", RF_DEVSTDOUT },
+#endif
+#if defined (NETWORK_REDIRECTIONS)
+  { "/dev/tcp/*/*", RF_DEVTCP },
+  { "/dev/udp/*/*", RF_DEVUDP },
+#endif
+  { (char *)NULL, -1 }
+};
+
+static int
+redir_special_open (spec, filename, flags, mode, ri)
+     int spec;
+     char *filename;
+     int flags, mode;
+     enum r_instruction ri;
+{
+  int fd;
+#if !defined (HAVE_DEV_FD)
+  intmax_t lfd;
+#endif
+
+  fd = -1;
+  switch (spec)
+    {
+#if !defined (HAVE_DEV_FD)
+    case RF_DEVFD:
+      if (all_digits (filename+8) && legal_number (filename+8, &lfd) && lfd == (int)lfd)
+       {
+         fd = lfd;
+         fd = fcntl (fd, F_DUPFD, SHELL_FD_BASE);
+       }
+      else
+       fd = AMBIGUOUS_REDIRECT;
+      break;
+#endif
+
+#if !defined (HAVE_DEV_STDIN)
+    case RF_DEVSTDIN:
+      fd = fcntl (0, F_DUPFD, SHELL_FD_BASE);
+      break;
+    case RF_DEVSTDOUT:
+      fd = fcntl (1, F_DUPFD, SHELL_FD_BASE);
+      break;
+    case RF_DEVSTDERR:
+      fd = fcntl (2, F_DUPFD, SHELL_FD_BASE);
+      break;
+#endif
+
+#if defined (NETWORK_REDIRECTIONS)
+    case RF_DEVTCP:
+    case RF_DEVUDP:
+#if defined (HAVE_NETWORK)
+      fd = netopen (filename);
+#else
+      internal_warning (_("/dev/(tcp|udp)/host/port not supported without networking"));
+      fd = open (filename, flags, mode);
+#endif
+      break;
+#endif /* NETWORK_REDIRECTIONS */
+    }
+
+  return fd;
+}
+      
+/* Open FILENAME with FLAGS in noclobber mode, hopefully avoiding most
+   race conditions and avoiding the problem where the file is replaced
+   between the stat(2) and open(2). */
+static int
+noclobber_open (filename, flags, mode, ri)
+     char *filename;
+     int flags, mode;
+     enum r_instruction ri;
+{
+  int r, fd;
+  struct stat finfo, finfo2;
+
+  /* If the file exists and is a regular file, return an error
+     immediately. */
+  r = stat (filename, &finfo);
+  if (r == 0 && (S_ISREG (finfo.st_mode)))
+    return (NOCLOBBER_REDIRECT);
+
+  /* If the file was not present (r != 0), make sure we open it
+     exclusively so that if it is created before we open it, our open
+     will fail.  Make sure that we do not truncate an existing file.
+     Note that we don't turn on O_EXCL unless the stat failed -- if
+     the file was not a regular file, we leave O_EXCL off. */
+  flags &= ~O_TRUNC;
+  if (r != 0)
+    {
+      fd = open (filename, flags|O_EXCL, mode);
+      return ((fd < 0 && errno == EEXIST) ? NOCLOBBER_REDIRECT : fd);
+    }
+  fd = open (filename, flags, mode);
+
+  /* If the open failed, return the file descriptor right away. */
+  if (fd < 0)
+    return (errno == EEXIST ? NOCLOBBER_REDIRECT : fd);
+
+  /* OK, the open succeeded, but the file may have been changed from a
+     non-regular file to a regular file between the stat and the open.
+     We are assuming that the O_EXCL open handles the case where FILENAME
+     did not exist and is symlinked to an existing file between the stat
+     and open. */
+
+  /* If we can open it and fstat the file descriptor, and neither check
+     revealed that it was a regular file, and the file has not been replaced,
+     return the file descriptor. */
+  if ((fstat (fd, &finfo2) == 0) && (S_ISREG (finfo2.st_mode) == 0) &&
+      r == 0 && (S_ISREG (finfo.st_mode) == 0) &&
+      same_file (filename, filename, &finfo, &finfo2))
+    return fd;
+
+  /* The file has been replaced.  badness. */
+  close (fd);  
+  errno = EEXIST;
+  return (NOCLOBBER_REDIRECT);
+}
+
+static int
+redir_open (filename, flags, mode, ri)
+     char *filename;
+     int flags, mode;
+     enum r_instruction ri;
+{
+  int fd, r;
+
+  r = find_string_in_alist (filename, _redir_special_filenames, 1);
+  if (r >= 0)
+    return (redir_special_open (r, filename, flags, mode, ri));
+
+  /* If we are in noclobber mode, you are not allowed to overwrite
+     existing files.  Check before opening. */
+  if (noclobber && CLOBBERING_REDIRECT (ri))
+    {
+      fd = noclobber_open (filename, flags, mode, ri);
+      if (fd == NOCLOBBER_REDIRECT)
+       return (NOCLOBBER_REDIRECT);
+    }
+  else
+    {
+      fd = open (filename, flags, mode);
+#if defined (AFS)
+      if ((fd < 0) && (errno == EACCES))
+       {
+         fd = open (filename, flags & ~O_CREAT, mode);
+         errno = EACCES;       /* restore errno */
+       }
+#endif /* AFS */
+    }
+
+itrace("redir_open: %s -> %d", filename, fd
+
+  return fd;
+}
+
+static int
+undoablefd (fd)
+     int fd;
+{
+  int clexec;
+
+  clexec = fcntl (fd, F_GETFD, 0);
+  if (clexec == -1 || (fd >= SHELL_FD_BASE && clexec == 1))
+    return 0;
+  return 1;
+}
+
+/* Do the specific redirection requested.  Returns errno or one of the
+   special redirection errors (*_REDIRECT) in case of error, 0 on success.
+   If flags & RX_ACTIVE is zero, then just do whatever is neccessary to
+   produce the appropriate side effects.   flags & RX_UNDOABLE, if non-zero,
+   says to remember how to undo each redirection.  If flags & RX_CLEXEC is
+   non-zero, then we set all file descriptors > 2 that we open to be
+   close-on-exec.  */
+static int
+do_redirection_internal (redirect, flags)
+     REDIRECT *redirect;
+     int flags;
+{
+  WORD_DESC *redirectee;
+  int redir_fd, fd, redirector, r, oflags;
+  intmax_t lfd;
+  char *redirectee_word;
+  enum r_instruction ri;
+  REDIRECT *new_redirect;
+  REDIRECTEE sd;
+
+  redirectee = redirect->redirectee.filename;
+  redir_fd = redirect->redirectee.dest;
+  redirector = redirect->redirector.dest;
+  ri = redirect->instruction;
+
+  if (redirect->flags & RX_INTERNAL)
+    flags |= RX_INTERNAL;
+
+  if (TRANSLATE_REDIRECT (ri))
+    {
+      /* We have [N]>&WORD[-] or [N]<&WORD[-] (or {V}>&WORD[-] or {V}<&WORD-).
+         and WORD, then translate the redirection into a new one and 
+        continue. */
+      redirectee_word = redirection_expand (redirectee);
+
+      /* XXX - what to do with [N]<&$w- where w is unset or null?  ksh93
+              closes N. */
+      if (redirectee_word == 0)
+       return (AMBIGUOUS_REDIRECT);
+      else if (redirectee_word[0] == '-' && redirectee_word[1] == '\0')
+       {
+         sd = redirect->redirector;
+         rd.dest = 0;
+         new_redirect = make_redirection (sd, r_close_this, rd, 0);
+       }
+      else if (all_digits (redirectee_word))
+       {
+         sd = redirect->redirector;
+         if (legal_number (redirectee_word, &lfd) && (int)lfd == lfd)
+           rd.dest = lfd;
+         else
+           rd.dest = -1;       /* XXX */
+         switch (ri)
+           {
+           case r_duplicating_input_word:
+             new_redirect = make_redirection (sd, r_duplicating_input, rd, 0);
+             break;
+           case r_duplicating_output_word:
+             new_redirect = make_redirection (sd, r_duplicating_output, rd, 0);
+             break;
+           case r_move_input_word:
+             new_redirect = make_redirection (sd, r_move_input, rd, 0);
+             break;
+           case r_move_output_word:
+             new_redirect = make_redirection (sd, r_move_output, rd, 0);
+             break;
+           }
+       }
+      else if (ri == r_duplicating_output_word && (redirect->rflags & REDIR_VARASSIGN) == 0 && redirector == 1)
+       {
+         sd = redirect->redirector;
+         rd.filename = make_bare_word (redirectee_word);
+         new_redirect = make_redirection (sd, r_err_and_out, rd, 0);
+       }
+      else
+       {
+         free (redirectee_word);
+         return (AMBIGUOUS_REDIRECT);
+       }
+
+      free (redirectee_word);
+
+      /* Set up the variables needed by the rest of the function from the
+        new redirection. */
+      if (new_redirect->instruction == r_err_and_out)
+       {
+         char *alloca_hack;
+
+         /* Copy the word without allocating any memory that must be
+            explicitly freed. */
+         redirectee = (WORD_DESC *)alloca (sizeof (WORD_DESC));
+         xbcopy ((char *)new_redirect->redirectee.filename,
+                (char *)redirectee, sizeof (WORD_DESC));
+
+         alloca_hack = (char *)
+           alloca (1 + strlen (new_redirect->redirectee.filename->word));
+         redirectee->word = alloca_hack;
+         strcpy (redirectee->word, new_redirect->redirectee.filename->word);
+       }
+      else
+       /* It's guaranteed to be an integer, and shouldn't be freed. */
+       redirectee = new_redirect->redirectee.filename;
+
+      redir_fd = new_redirect->redirectee.dest;
+      redirector = new_redirect->redirector.dest;
+      ri = new_redirect->instruction;
+
+      /* Overwrite the flags element of the old redirect with the new value. */
+      redirect->flags = new_redirect->flags;
+      dispose_redirects (new_redirect);
+    }
+
+  switch (ri)
+    {
+    case r_output_direction:
+    case r_appending_to:
+    case r_input_direction:
+    case r_inputa_direction:
+    case r_err_and_out:                /* command &>filename */
+    case r_append_err_and_out: /* command &>> filename */
+    case r_input_output:
+    case r_output_force:
+      if (posixly_correct && interactive_shell == 0)
+       {
+         oflags = redirectee->flags;
+         redirectee->flags |= W_NOGLOB;
+       }
+      redirectee_word = redirection_expand (redirectee);
+      if (posixly_correct && interactive_shell == 0)
+       redirectee->flags = oflags;
+
+      if (redirectee_word == 0)
+       return (AMBIGUOUS_REDIRECT);
+
+#if defined (RESTRICTED_SHELL)
+      if (restricted && (WRITE_REDIRECT (ri)))
+       {
+         free (redirectee_word);
+         return (RESTRICTED_REDIRECT);
+       }
+#endif /* RESTRICTED_SHELL */
+
+      fd = redir_open (redirectee_word, redirect->flags, 0666, ri);
+      free (redirectee_word);
+
+      if (fd == NOCLOBBER_REDIRECT)
+       return (fd);
+
+      if (fd < 0)
+       return (errno);
+
+      if (flags & RX_ACTIVE)
+       {
+         if (redirect->rflags & REDIR_VARASSIGN)
+           redirector = fcntl (fd, F_DUPFD, SHELL_FD_BASE);            /* XXX try this for now */
+
+         if (flags & RX_UNDOABLE)
+           {
+             /* Only setup to undo it if the thing to undo is active. */
+             if ((fd != redirector) && (fcntl (redirector, F_GETFD, 0) != -1))
+               add_undo_redirect (redirector, ri, -1);
+             else
+               add_undo_close_redirect (redirector);
+           }
+
+#if defined (BUFFERED_INPUT)
+         check_bash_input (redirector);
+#endif
+
+         /* Make sure there is no pending output before we change the state
+            of the underlying file descriptor, since the builtins use stdio
+            for output. */
+         if (redirector == 1 && fileno (stdout) == redirector)
+           {
+             fflush (stdout);
+             fpurge (stdout);
+           }
+         else if (redirector == 2 && fileno (stderr) == redirector)
+           {
+             fflush (stderr);
+             fpurge (stderr);
+           }
+
+         if (redirect->rflags & REDIR_VARASSIGN)
+           {
+             if ((r = redir_varassign (redirect, redirector)) < 0)
+               {
+                 close (redirector);
+                 close (fd);
+                 return (r);   /* XXX */
+               }
+           }
+         else if ((fd != redirector) && (dup2 (fd, redirector) < 0))
+           return (errno);
+
+#if defined (BUFFERED_INPUT)
+         /* Do not change the buffered stream for an implicit redirection
+            of /dev/null to fd 0 for asynchronous commands without job
+            control (r_inputa_direction). */
+         if (ri == r_input_direction || ri == r_input_output)
+           duplicate_buffered_stream (fd, redirector);
+#endif /* BUFFERED_INPUT */
+
+         /*
+          * If we're remembering, then this is the result of a while, for
+          * or until loop with a loop redirection, or a function/builtin
+          * executing in the parent shell with a redirection.  In the
+          * function/builtin case, we want to set all file descriptors > 2
+          * to be close-on-exec to duplicate the effect of the old
+          * for i = 3 to NOFILE close(i) loop.  In the case of the loops,
+          * both sh and ksh leave the file descriptors open across execs.
+          * The Posix standard mentions only the exec builtin.
+          */
+         if ((flags & RX_CLEXEC) && (redirector > 2))
+           SET_CLOSE_ON_EXEC (redirector);
+       }
+
+      if (fd != redirector)
+       {
+#if defined (BUFFERED_INPUT)
+         if (INPUT_REDIRECT (ri))
+           close_buffered_fd (fd);
+         else
+#endif /* !BUFFERED_INPUT */
+           close (fd);         /* Don't close what we just opened! */
+       }
+
+      /* If we are hacking both stdout and stderr, do the stderr
+        redirection here.  XXX - handle {var} here? */
+      if (ri == r_err_and_out || ri == r_append_err_and_out)
+       {
+         if (flags & RX_ACTIVE)
+           {
+             if (flags & RX_UNDOABLE)
+               add_undo_redirect (2, ri, -1);
+             if (dup2 (1, 2) < 0)
+               return (errno);
+           }
+       }
+      break;
+
+    case r_reading_until:
+    case r_deblank_reading_until:
+    case r_reading_string:
+      /* REDIRECTEE is a pointer to a WORD_DESC containing the text of
+        the new input.  Place it in a temporary file. */
+      if (redirectee)
+       {
+         fd = here_document_to_fd (redirectee, ri);
+
+         if (fd < 0)
+           {
+             heredoc_errno = errno;
+             return (HEREDOC_REDIRECT);
+           }
+
+         if (redirect->rflags & REDIR_VARASSIGN)
+           redirector = fcntl (fd, F_DUPFD, SHELL_FD_BASE);            /* XXX try this for now */
+
+         if (flags & RX_ACTIVE)
+           {
+             if (flags & RX_UNDOABLE)
+               {
+                 /* Only setup to undo it if the thing to undo is active. */
+                 if ((fd != redirector) && (fcntl (redirector, F_GETFD, 0) != -1))
+                   add_undo_redirect (redirector, ri, -1);
+                 else
+                   add_undo_close_redirect (redirector);
+               }
+
+#if defined (BUFFERED_INPUT)
+             check_bash_input (redirector);
+#endif
+             if (redirect->rflags & REDIR_VARASSIGN)
+               {
+                 if ((r = redir_varassign (redirect, redirector)) < 0)
+                   {
+                     close (redirector);
+                     close (fd);
+                     return (r);       /* XXX */
+                   }
+               }
+             else if (fd != redirector && dup2 (fd, redirector) < 0)
+               {
+                 r = errno;
+                 close (fd);
+                 return (r);
+               }
+
+#if defined (BUFFERED_INPUT)
+             duplicate_buffered_stream (fd, redirector);
+#endif
+
+             if ((flags & RX_CLEXEC) && (redirector > 2))
+               SET_CLOSE_ON_EXEC (redirector);
+           }
+
+         if (fd != redirector)
+#if defined (BUFFERED_INPUT)
+           close_buffered_fd (fd);
+#else
+           close (fd);
+#endif
+       }
+      break;
+
+    case r_duplicating_input:
+    case r_duplicating_output:
+    case r_move_input:
+    case r_move_output:
+      if ((flags & RX_ACTIVE) && (redirect->rflags & REDIR_VARASSIGN))
+       redirector = fcntl (redir_fd, F_DUPFD, SHELL_FD_BASE);          /* XXX try this for now */
+
+      if ((flags & RX_ACTIVE) && (redir_fd != redirector))
+       {
+         if (flags & RX_UNDOABLE)
+           {
+             /* Only setup to undo it if the thing to undo is active. */
+             if (fcntl (redirector, F_GETFD, 0) != -1)
+               add_undo_redirect (redirector, ri, redir_fd);
+             else
+               add_undo_close_redirect (redirector);
+           }
+#if defined (BUFFERED_INPUT)
+         check_bash_input (redirector);
+#endif
+         if (redirect->rflags & REDIR_VARASSIGN)
+           {
+             if ((r = redir_varassign (redirect, redirector)) < 0)
+               {
+                 close (redirector);
+                 return (r);   /* XXX */
+               }
+           }
+         /* This is correct.  2>&1 means dup2 (1, 2); */
+         else if (dup2 (redir_fd, redirector) < 0)
+           return (errno);
+
+#if defined (BUFFERED_INPUT)
+         if (ri == r_duplicating_input || ri == r_move_input)
+           duplicate_buffered_stream (redir_fd, redirector);
+#endif /* BUFFERED_INPUT */
+
+         /* First duplicate the close-on-exec state of redirectee.  dup2
+            leaves the flag unset on the new descriptor, which means it
+            stays open.  Only set the close-on-exec bit for file descriptors
+            greater than 2 in any case, since 0-2 should always be open
+            unless closed by something like `exec 2<&-'.  It should always
+            be safe to set fds > 2 to close-on-exec if they're being used to
+            save file descriptors < 2, since we don't need to preserve the
+            state of the close-on-exec flag for those fds -- they should
+            always be open. */
+         /* if ((already_set || set_unconditionally) && (ok_to_set))
+               set_it () */
+#if 0
+         if (((fcntl (redir_fd, F_GETFD, 0) == 1) || redir_fd < 2 || (flags & RX_CLEXEC)) &&
+              (redirector > 2))
+#else
+         if (((fcntl (redir_fd, F_GETFD, 0) == 1) || (redir_fd < 2 && (flags & RX_INTERNAL)) || (flags & RX_CLEXEC)) &&
+              (redirector > 2))
+#endif
+           SET_CLOSE_ON_EXEC (redirector);
+
+         /* When undoing saving of non-standard file descriptors (>=3) using
+            file descriptors >= SHELL_FD_BASE, we set the saving fd to be
+            close-on-exec and use a flag to decide how to set close-on-exec
+            when the fd is restored. */
+         if ((redirect->flags & RX_INTERNAL) && (redirect->flags & RX_SAVCLEXEC) && redirector >= 3 && redir_fd >= SHELL_FD_BASE)
+           SET_OPEN_ON_EXEC (redirector);
+           
+         /* dup-and-close redirection */
+         if (ri == r_move_input || ri == r_move_output)
+           {
+             xtrace_fdchk (redir_fd);
+
+             close (redir_fd);
+#if defined (COPROCESS_SUPPORT)
+             coproc_fdchk (redir_fd);  /* XXX - loses coproc fds */
+#endif
+           }
+       }
+      break;
+
+    case r_close_this:
+      if (flags & RX_ACTIVE)
+       {
+         if (redirect->rflags & REDIR_VARASSIGN)
+           {
+             redirector = redir_varvalue (redirect);
+             if (redirector < 0)
+               return AMBIGUOUS_REDIRECT;
+           }
+
+         if ((flags & RX_UNDOABLE) && (fcntl (redirector, F_GETFD, 0) != -1))
+           add_undo_redirect (redirector, ri, -1);
+
+#if defined (COPROCESS_SUPPORT)
+         coproc_fdchk (redirector);
+#endif
+         xtrace_fdchk (redirector);
+
+#if defined (BUFFERED_INPUT)
+         check_bash_input (redirector);
+         close_buffered_fd (redirector);
+#else /* !BUFFERED_INPUT */
+         close (redirector);
+#endif /* !BUFFERED_INPUT */
+       }
+      break;
+
+    case r_duplicating_input_word:
+    case r_duplicating_output_word:
+      break;
+    }
+  return (0);
+}
+
+/* Remember the file descriptor associated with the slot FD,
+   on REDIRECTION_UNDO_LIST.  Note that the list will be reversed
+   before it is executed.  Any redirections that need to be undone
+   even if REDIRECTION_UNDO_LIST is discarded by the exec builtin
+   are also saved on EXEC_REDIRECTION_UNDO_LIST.  FDBASE says where to
+   start the duplicating.  If it's less than SHELL_FD_BASE, we're ok,
+   and can use SHELL_FD_BASE (-1 == don't care).  If it's >= SHELL_FD_BASE,
+   we have to make sure we don't use fdbase to save a file descriptor,
+   since we're going to use it later (e.g., make sure we don't save fd 0
+   to fd 10 if we have a redirection like 0<&10).  If the value of fdbase
+   puts the process over its fd limit, causing fcntl to fail, we try
+   again with SHELL_FD_BASE. */
+static int
+add_undo_redirect (fd, ri, fdbase)
+     int fd;
+     enum r_instruction ri;
+     int fdbase;
+{
+  int new_fd, clexec_flag;
+  REDIRECT *new_redirect, *closer, *dummy_redirect;
+  REDIRECTEE sd;
+
+  new_fd = fcntl (fd, F_DUPFD, (fdbase < SHELL_FD_BASE) ? SHELL_FD_BASE : fdbase+1);
+  if (new_fd < 0)
+    new_fd = fcntl (fd, F_DUPFD, SHELL_FD_BASE);
+
+  if (new_fd < 0)
+    {
+      sys_error (_("redirection error: cannot duplicate fd"));
+      return (-1);
+    }
+
+  clexec_flag = fcntl (fd, F_GETFD, 0);
+
+  sd.dest = new_fd;
+  rd.dest = 0;
+  closer = make_redirection (sd, r_close_this, rd, 0);
+  closer->flags |= RX_INTERNAL;
+  dummy_redirect = copy_redirects (closer);
+
+  sd.dest = fd;
+  rd.dest = new_fd;
+  if (fd == 0)
+    new_redirect = make_redirection (sd, r_duplicating_input, rd, 0);
+  else
+    new_redirect = make_redirection (sd, r_duplicating_output, rd, 0);
+  new_redirect->flags |= RX_INTERNAL;
+  if (clexec_flag == 0 && fd >= 3 && new_fd >= SHELL_FD_BASE)
+    new_redirect->flags |= RX_SAVCLEXEC;
+  new_redirect->next = closer;
+
+  closer->next = redirection_undo_list;
+  redirection_undo_list = new_redirect;
+
+  /* Save redirections that need to be undone even if the undo list
+     is thrown away by the `exec' builtin. */
+  add_exec_redirect (dummy_redirect);
+
+  /* experimental:  if we're saving a redirection to undo for a file descriptor
+     above SHELL_FD_BASE, add a redirection to be undone if the exec builtin
+     causes redirections to be discarded.  There needs to be a difference
+     between fds that are used to save other fds and then are the target of
+     user redirctions and fds that are just the target of user redirections.
+     We use the close-on-exec flag to tell the difference; fds > SHELL_FD_BASE
+     that have the close-on-exec flag set are assumed to be fds used internally
+     to save others. */
+  if (fd >= SHELL_FD_BASE && ri != r_close_this && clexec_flag)
+    {
+      sd.dest = fd;
+      rd.dest = new_fd;
+      new_redirect = make_redirection (sd, r_duplicating_output, rd, 0);
+      new_redirect->flags |= RX_INTERNAL;
+
+      add_exec_redirect (new_redirect);
+    }
+
+  /* File descriptors used only for saving others should always be
+     marked close-on-exec.  Unfortunately, we have to preserve the
+     close-on-exec state of the file descriptor we are saving, since
+     fcntl (F_DUPFD) sets the new file descriptor to remain open
+     across execs.  If, however, the file descriptor whose state we
+     are saving is <= 2, we can just set the close-on-exec flag,
+     because file descriptors 0-2 should always be open-on-exec,
+     and the restore above in do_redirection() will take care of it. */
+  if (clexec_flag || fd < 3)
+    SET_CLOSE_ON_EXEC (new_fd);
+  else if (redirection_undo_list->flags & RX_SAVCLEXEC)
+    SET_CLOSE_ON_EXEC (new_fd);
+
+  return (0);
+}
+
+/* Set up to close FD when we are finished with the current command
+   and its redirections. */
+static void
+add_undo_close_redirect (fd)
+     int fd;
+{
+  REDIRECT *closer;
+  REDIRECTEE sd;
+
+  sd.dest = fd;
+  rd.dest = 0;
+  closer = make_redirection (sd, r_close_this, rd, 0);
+  closer->flags |= RX_INTERNAL;
+  closer->next = redirection_undo_list;
+  redirection_undo_list = closer;
+}
+
+static void
+add_exec_redirect (dummy_redirect)
+     REDIRECT *dummy_redirect;
+{
+  dummy_redirect->next = exec_redirection_undo_list;
+  exec_redirection_undo_list = dummy_redirect;
+}
+
+/* Return 1 if the redirection specified by RI and REDIRECTOR alters the
+   standard input. */
+static int
+stdin_redirection (ri, redirector)
+     enum r_instruction ri;
+     int redirector;
+{
+  switch (ri)
+    {
+    case r_input_direction:
+    case r_inputa_direction:
+    case r_input_output:
+    case r_reading_until:
+    case r_deblank_reading_until:
+    case r_reading_string:
+      return (1);
+    case r_duplicating_input:
+    case r_duplicating_input_word:
+    case r_close_this:
+      return (redirector == 0);
+    case r_output_direction:
+    case r_appending_to:
+    case r_duplicating_output:
+    case r_err_and_out:
+    case r_append_err_and_out:
+    case r_output_force:
+    case r_duplicating_output_word:
+      return (0);
+    }
+  return (0);
+}
+
+/* Return non-zero if any of the redirections in REDIRS alter the standard
+   input. */
+int
+stdin_redirects (redirs)
+     REDIRECT *redirs;
+{
+  REDIRECT *rp;
+  int n;
+
+  for (n = 0, rp = redirs; rp; rp = rp->next)
+    if ((rp->rflags & REDIR_VARASSIGN) == 0)
+      n += stdin_redirection (rp->instruction, rp->redirector.dest);
+  return n;
+}
+
+/* These don't yet handle array references */
+static int
+redir_varassign (redir, fd)
+     REDIRECT *redir;
+     int fd;
+{
+  WORD_DESC *w;
+  SHELL_VAR *v;
+
+  w = redir->redirector.filename;
+  v = bind_var_to_int (w->word, fd);
+  if (v == 0 || readonly_p (v) || noassign_p (v))
+    return BADVAR_REDIRECT;
+
+  return 0;
+}
+
+static int
+redir_varvalue (redir)
+     REDIRECT *redir;
+{
+  SHELL_VAR *v;
+  char *val;
+  intmax_t vmax;
+  int i;
+
+  /* XXX - handle set -u here? */
+  v = find_variable (redir->redirector.filename->word);
+  if (v == 0 || invisible_p (v))
+    return -1;
+
+  val = get_variable_value (v);
+  if (val == 0 || *val == 0)
+    return -1;
+
+  if (legal_number (val, &vmax) < 0)
+    return -1;
+
+  i = vmax;    /* integer truncation */
+  return i;
+}
index ba68b82aa540532cabcffe302380e4381add426d..eff46f7e6f53053a66059dc1f6dc061e7cb28cdc 100644 (file)
@@ -9697,3 +9697,42 @@ builtins/declare.def
          allocated memory for the key argument when using an implicit key
          of "0".  Bug report and fix from Andreas Schwab
          <schwab@linux-m68k.org>
+
+                                  4/14
+                                  ----
+lib/readline/input.c
+       - restructure the rl_event_hook loop in rl_read_key to call the
+         event hook after rl_gather_tyi() returns and rl_get_char has
+         a chance to collect the input.  Previous behavior was to call
+         the event hook before attempting to read input.  Problem
+         reported by Anant Shankar <anantshankar17@gmail.com>
+
+                                  4/15
+                                  ----
+builtins/fc.def
+       - fc_builtin needs to check whether the calculation of last_hist
+         leaves hlist[last_hist] == 0, and keep decrementing it until it
+         leaves a non-null history entry or goes < 0.  Currently only
+         does this if saved_command_line_count > 0, indicating we're
+         trying to edit a multi-line command.  Fixes bug reported by
+         Roman Rakus <rrakus@redhat.com>
+
+                                  4/17
+                                  ----
+subst.c
+       - new process substitution helper functions:
+               unlink_fifo - closes a single FD or FIFO
+               num_fifos - returns number of open FDs or active FIFOs
+               copy_fifo_list - returns a bitmap of open FDs or active FIFOs
+                 by index into appropriate list (dev_fd_list or fifo_list)
+               close_new_fifos - take a bitmap saved by copy_fifo_list and
+                 call unlink_fifo on any FD or FIFO open at the time of the
+                 call that is not marked as active in list
+
+execute_cmd.c
+       - execute_builtin_or_function: use new framework to close process
+         substitution FDs or FIFOs created by a shell builtin or shell
+         function.  Fixes bug reported by Charles Duffy <charles@dyfis.net>
+
+doc/{bash.1,bashref.texi}
+       - document 'C and "C constants for printf builtin
index b5ad1aced4a6facad6a8df7074c0fc0bb9f6381d..61e00ce30a52e7c1e6b89dcd2661693f5c5bc490 100644 (file)
@@ -9690,10 +9690,48 @@ parser.h
 subst.c
        - include parser.h
 
-                                   4/8
+                                   4/9
                                    ---
 builtins/declare.def
        - make sure declare_internal calls bind_assoc_variable with newly-
          allocated memory for the key argument when using an implicit key
          of "0".  Bug report and fix from Andreas Schwab
          <schwab@linux-m68k.org>
+
+                                  4/14
+                                  ----
+lib/readline/input.c
+       - restructure the rl_event_hook loop in rl_read_key to call the
+         event hook after rl_gather_tyi() returns and rl_get_char has
+         a chance to collect the input.  Previous behavior was to call
+         the event hook before attempting to read input.  Problem
+         reported by Anant Shankar <anantshankar17@gmail.com>
+
+                                  4/15
+                                  ----
+builtins/fc.def
+       - fc_builtin needs to check whether the calculation of last_hist
+         leaves hlist[last_hist] == 0, and keep decrementing it until it
+         leaves a non-null history entry or goes < 0.  Currently only
+         does this if saved_command_line_count > 0, indicating we're
+         trying to edit a multi-line command.  Fixes bug reported by
+         Roman Rakus <rrakus@redhat.com>
+
+                                  4/17
+                                  ----
+subst.c
+       - new process substitution helper functions:
+               unlink_fifo - closes a single FD or FIFO
+               num_fifos - returns number of open FDs or active FIFOs
+               copy_fifo_list - returns a bitmap of open FDs or active FIFOs
+                 by index into appropriate list (dev_fd_list or fifo_list)
+               close_new_fifos - take a bitmap saved by copy_fifo_list and
+                 call unlink_fifo on any FD or FIFO open at the time of the
+                 call that is not marked as active in list
+
+execute_cmd.c
+       - execute_builtin_or_function: use new framework to close process
+         substitution FDs or FIFOs created by a shell builtin or shell
+         function.  Fixes bug reported by Charles Duffy <charles@dyfis.net>
+
+
index d4d00637e5550c05620edea2bd87596fd84beb13..1116198e2bc0eed0216ddf45eb3927bb4aa50540 100644 (file)
@@ -175,7 +175,8 @@ static char **prog_complete_matches;
 extern int hist_verify;
 #endif
 
-extern int current_command_line_count, last_command_exit_value;
+extern int current_command_line_count, saved_command_line_count;
+extern int last_command_exit_value;
 extern int array_needs_making;
 extern int posixly_correct, no_symbolic_links;
 extern char *current_prompt_string, *ps1_prompt;
@@ -862,11 +863,11 @@ edit_and_execute_command (count, c, editing_mode, edit_command)
      char *edit_command;
 {
   char *command, *metaval;
-  int r, cclc, rrs, metaflag;
+  int r, rrs, metaflag;
   sh_parser_state_t ps;
 
   rrs = rl_readline_state;
-  cclc = current_command_line_count;
+  saved_command_line_count = current_command_line_count;
 
   /* Accept the current line. */
   rl_newline (1, c);
@@ -882,6 +883,8 @@ edit_and_execute_command (count, c, editing_mode, edit_command)
         then call fc to operate on it.  We have to add a dummy command to
         the end of the history because fc ignores the last command (assumes
         it's supposed to deal with the command before the `fc'). */
+      /* This breaks down when using command-oriented history and are not
+        finished with the command, so we should not ignore the last command */
       using_history ();
       bash_add_history (rl_line_buffer);
       bash_add_history ("");
@@ -904,7 +907,7 @@ edit_and_execute_command (count, c, editing_mode, edit_command)
   if (rl_prep_term_function)
     (*rl_prep_term_function) (metaflag);
 
-  current_command_line_count = cclc;
+  current_command_line_count = saved_command_line_count;
 
   /* Now erase the contents of the current line and undo the effects of the
      rl_accept_line() above.  We don't even want to make the text we just
index 6164bc6fa844c4e60efbf36720dfb78e78dce2f5..da3353d4787413de8e03e34f655c0059cfcdc8ac 100644 (file)
@@ -175,7 +175,8 @@ static char **prog_complete_matches;
 extern int hist_verify;
 #endif
 
-extern int current_command_line_count, last_command_exit_value;
+extern int current_command_line_count, fc_command_line_count;
+extern int last_command_exit_value;
 extern int array_needs_making;
 extern int posixly_correct, no_symbolic_links;
 extern char *current_prompt_string, *ps1_prompt;
@@ -863,6 +864,7 @@ edit_and_execute_command (count, c, editing_mode, edit_command)
 {
   char *command, *metaval;
   int r, cclc, rrs, metaflag;
+  sh_parser_state_t ps;
 
   rrs = rl_readline_state;
   cclc = current_command_line_count;
@@ -881,6 +883,8 @@ edit_and_execute_command (count, c, editing_mode, edit_command)
         then call fc to operate on it.  We have to add a dummy command to
         the end of the history because fc ignores the last command (assumes
         it's supposed to deal with the command before the `fc'). */
+      /* This breaks down when using command-oriented history and are not
+        finished with the command, so we should not ignore the last command */
       using_history ();
       bash_add_history (rl_line_buffer);
       bash_add_history ("");
@@ -897,7 +901,9 @@ edit_and_execute_command (count, c, editing_mode, edit_command)
      yet. */
   if (rl_deprep_term_function)
     (*rl_deprep_term_function) ();
+  save_parser_state (&ps);
   r = parse_and_execute (command, (editing_mode == VI_EDITING_MODE) ? "v" : "C-xC-e", SEVAL_NOHIST);
+  restore_parser_state (&ps);
   if (rl_prep_term_function)
     (*rl_prep_term_function) (metaflag);
 
index a378d9de099a1760bbd4266e028662ac52ea4ec3..a9b67030c96ade95f0475828e10311438912c927 100644 (file)
@@ -85,7 +85,7 @@ $END
 extern int errno;
 #endif /* !errno */
 
-extern int current_command_line_count;
+extern int current_command_line_count, saved_command_line_count;
 extern int literal_history;
 extern int posixly_correct;
 extern int subshell_environment, interactive_shell;
@@ -303,6 +303,16 @@ fc_builtin (list)
   rh = remember_on_history || ((subshell_environment & SUBSHELL_COMSUB) && enable_history_list);
   last_hist = i - rh - hist_last_line_added;
 
+  /* XXX */
+  if (saved_command_line_count > 0 && i == last_hist && hlist[last_hist] == 0)
+    while (last_hist >= 0 && hlist[last_hist] == 0)
+      last_hist--;
+  if (last_hist < 0)
+    {
+      sh_erange ((char *)NULL, _("history specification"));
+      return (EXECUTION_FAILURE);
+    }
+
   if (list)
     {
       histbeg = fc_gethnum (list->word->word, hlist);
diff --git a/builtins/fc.def~ b/builtins/fc.def~
new file mode 100644 (file)
index 0000000..c01f6c9
--- /dev/null
@@ -0,0 +1,675 @@
+This file is fc.def, from which is created fc.c.
+It implements the builtin "fc" in Bash.
+
+Copyright (C) 1987-2009 Free Software Foundation, Inc.
+
+This file is part of GNU Bash, the Bourne Again SHell.
+
+Bash 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.
+
+Bash 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 Bash.  If not, see <http://www.gnu.org/licenses/>.
+
+$PRODUCES fc.c
+
+$BUILTIN fc
+$FUNCTION fc_builtin
+$DEPENDS_ON HISTORY
+$SHORT_DOC fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]
+Display or execute commands from the history list.
+
+fc is used to list or edit and re-execute commands from the history list.
+FIRST and LAST can be numbers specifying the range, or FIRST can be a
+string, which means the most recent command beginning with that
+string.
+
+Options:
+  -e ENAME     select which editor to use.  Default is FCEDIT, then EDITOR,
+               then vi
+  -l   list lines instead of editing
+  -n   omit line numbers when listing
+  -r   reverse the order of the lines (newest listed first)
+
+With the `fc -s [pat=rep ...] [command]' format, COMMAND is
+re-executed after the substitution OLD=NEW is performed.
+
+A useful alias to use with this is r='fc -s', so that typing `r cc'
+runs the last command beginning with `cc' and typing `r' re-executes
+the last command.
+
+Exit Status:
+Returns success or status of executed command; non-zero if an error occurs.
+$END
+
+#include <config.h>
+
+#if defined (HISTORY)
+#ifndef _MINIX
+#  include <sys/param.h>
+#endif
+#include "../bashtypes.h"
+#include "posixstat.h"
+#if ! defined(_MINIX) && defined (HAVE_SYS_FILE_H)
+#  include <sys/file.h>
+#endif
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include <stdio.h>
+#include <chartypes.h>
+
+#include "../bashansi.h"
+#include "../bashintl.h"
+#include <errno.h>
+
+#include "../shell.h"
+#include "../builtins.h"
+#include "../flags.h"
+#include "../bashhist.h"
+#include "maxpath.h"
+#include <readline/history.h>
+#include "bashgetopt.h"
+#include "common.h"
+
+#if !defined (errno)
+extern int errno;
+#endif /* !errno */
+
+extern int current_command_line_count, saved_command_line_count;
+extern int literal_history;
+extern int posixly_correct;
+extern int subshell_environment, interactive_shell;
+
+extern int unlink __P((const char *));
+
+extern FILE *sh_mktmpfp __P((char *, int, char **));
+
+/* **************************************************************** */
+/*                                                                 */
+/*     The K*rn shell style fc command (Fix Command)               */
+/*                                                                 */
+/* **************************************************************** */
+
+/* fc builtin command (fix command) for Bash for those who
+   like K*rn-style history better than csh-style.
+
+     fc [-e ename] [-nlr] [first] [last]
+
+   FIRST and LAST can be numbers specifying the range, or FIRST can be
+   a string, which means the most recent command beginning with that
+   string.
+
+   -e ENAME selects which editor to use.  Default is FCEDIT, then EDITOR,
+      then the editor which corresponds to the current readline editing
+      mode, then vi.
+
+   -l means list lines instead of editing.
+   -n means no line numbers listed.
+   -r means reverse the order of the lines (making it newest listed first).
+
+     fc -e - [pat=rep ...] [command]
+     fc -s [pat=rep ...] [command]
+
+   Equivalent to !command:sg/pat/rep execpt there can be multiple PAT=REP's.
+*/
+
+/* Data structure describing a list of global replacements to perform. */
+typedef struct repl {
+  struct repl *next;
+  char *pat;
+  char *rep;
+} REPL;
+
+/* Accessors for HIST_ENTRY lists that are called HLIST. */
+#define histline(i) (hlist[(i)]->line)
+#define histdata(i) (hlist[(i)]->data)
+
+#define FREE_RLIST() \
+       do { \
+               for (rl = rlist; rl; ) { \
+                       REPL *r;        \
+                       r = rl->next; \
+                       if (rl->pat) \
+                               free (rl->pat); \
+                       if (rl->rep) \
+                               free (rl->rep); \
+                       free (rl); \
+                       rl = r; \
+               } \
+       } while (0)
+
+static char *fc_dosubs __P((char *, REPL *));
+static char *fc_gethist __P((char *, HIST_ENTRY **));
+static int fc_gethnum __P((char *, HIST_ENTRY **));
+static int fc_number __P((WORD_LIST *));
+static void fc_replhist __P((char *));
+#ifdef INCLUDE_UNUSED
+static char *fc_readline __P((FILE *));
+static void fc_addhist __P((char *));
+#endif
+
+/* String to execute on a file that we want to edit. */
+#define FC_EDIT_COMMAND "${FCEDIT:-${EDITOR:-vi}}"
+#if defined (STRICT_POSIX)
+#  define POSIX_FC_EDIT_COMMAND "${FCEDIT:-ed}"
+#else
+#  define POSIX_FC_EDIT_COMMAND "${FCEDIT:-${EDITOR:-ed}}"
+#endif
+
+int
+fc_builtin (list)
+     WORD_LIST *list;
+{
+  register int i;
+  register char *sep;
+  int numbering, reverse, listing, execute;
+  int histbeg, histend, last_hist, retval, opt, rh;
+  FILE *stream;
+  REPL *rlist, *rl;
+  char *ename, *command, *newcom, *fcedit;
+  HIST_ENTRY **hlist;
+  char *fn;
+
+  numbering = 1;
+  reverse = listing = execute = 0;
+  ename = (char *)NULL;
+
+  /* Parse out the options and set which of the two forms we're in. */
+  reset_internal_getopt ();
+  lcurrent = list;             /* XXX */
+  while (fc_number (loptend = lcurrent) == 0 &&
+        (opt = internal_getopt (list, ":e:lnrs")) != -1)
+    {
+      switch (opt)
+       {
+       case 'n':
+         numbering = 0;
+         break;
+
+       case 'l':
+         listing = 1;
+         break;
+
+       case 'r':
+         reverse = 1;
+         break;
+
+       case 's':
+         execute = 1;
+         break;
+
+       case 'e':
+         ename = list_optarg;
+         break;
+
+       default:
+         builtin_usage ();
+         return (EX_USAGE);
+       }
+    }
+
+  list = loptend;
+
+  if (ename && (*ename == '-') && (ename[1] == '\0'))
+    execute = 1;
+
+  /* The "execute" form of the command (re-run, with possible string
+     substitutions). */
+  if (execute)
+    {
+      rlist = (REPL *)NULL;
+      while (list && ((sep = (char *)strchr (list->word->word, '=')) != NULL))
+       {
+         *sep++ = '\0';
+         rl = (REPL *)xmalloc (sizeof (REPL));
+         rl->next = (REPL *)NULL;
+         rl->pat = savestring (list->word->word);
+         rl->rep = savestring (sep);
+
+         if (rlist == NULL)
+           rlist = rl;
+         else
+           {
+             rl->next = rlist;
+             rlist = rl;
+           }
+         list = list->next;
+       }
+
+      /* If we have a list of substitutions to do, then reverse it
+        to get the replacements in the proper order. */
+
+      rlist = REVERSE_LIST (rlist, REPL *);
+
+      hlist = history_list ();
+
+      /* If we still have something in list, it is a command spec.
+        Otherwise, we use the most recent command in time. */
+      command = fc_gethist (list ? list->word->word : (char *)NULL, hlist);
+
+      if (command == NULL)
+       {
+         builtin_error (_("no command found"));
+         if (rlist)
+           FREE_RLIST ();
+
+         return (EXECUTION_FAILURE);
+       }
+
+      if (rlist)
+       {
+         newcom = fc_dosubs (command, rlist);
+         free (command);
+         FREE_RLIST ();
+         command = newcom;
+       }
+
+      fprintf (stderr, "%s\n", command);
+      fc_replhist (command);   /* replace `fc -s' with command */
+      /* Posix says that the re-executed commands should be entered into the
+        history. */
+      return (parse_and_execute (command, "fc", SEVAL_NOHIST));
+    }
+
+  /* This is the second form of the command (the list-or-edit-and-rerun
+     form). */
+  hlist = history_list ();
+  if (hlist == 0)
+    return (EXECUTION_SUCCESS);
+  for (i = 0; hlist[i]; i++);
+
+  /* With the Bash implementation of history, the current command line
+     ("fc blah..." and so on) is already part of the history list by
+     the time we get to this point.  This just skips over that command
+     and makes the last command that this deals with be the last command
+     the user entered before the fc.  We need to check whether the
+     line was actually added (HISTIGNORE may have caused it to not be),
+     so we check hist_last_line_added. */
+
+  /* Even though command substitution through parse_and_execute turns off
+     remember_on_history, command substitution in a shell when set -o history
+     has been enabled (interactive or not) should use it in the last_hist
+     calculation as if it were on. */
+  rh = remember_on_history || ((subshell_environment & SUBSHELL_COMSUB) && enable_history_list);
+  last_hist = i - rh - hist_last_line_added;
+
+  /* XXX */
+  if (i == last_hist && hlist[last_hist] == 0)
+    while (saved_command_line_count > 0 && last_hist >= 0 && hlist[last_hist] == 0)
+      last_hist--;
+  if (last_hist < 0)
+    {
+      sh_erange ((char *)NULL, _("history specification"));
+      return (EXECUTION_FAILURE);
+    }
+
+  if (list)
+    {
+      histbeg = fc_gethnum (list->word->word, hlist);
+      list = list->next;
+
+      if (list)
+       histend = fc_gethnum (list->word->word, hlist);
+      else
+       histend = listing ? last_hist : histbeg;
+    }
+  else
+    {
+      /* The default for listing is the last 16 history items. */
+      if (listing)
+       {
+         histend = last_hist;
+         histbeg = histend - 16 + 1;   /* +1 because loop below uses >= */
+         if (histbeg < 0)
+           histbeg = 0;
+       }
+      else
+       /* For editing, it is the last history command. */
+       histbeg = histend = last_hist;
+    }
+
+  /* "When not listing, the fc command that caused the editing shall not be
+     entered into the history list." */
+  if (listing == 0 && hist_last_line_added)
+    {
+      bash_delete_last_history ();
+      /* If we're editing a single command -- the last command in the
+        history -- and we just removed the dummy command added by
+        edit_and_execute_command (), we need to check whether or not we
+        just removed the last command in the history and need to back
+        the pointer up.  remember_on_history is off because we're running
+        in parse_and_execute(). */
+      if (histbeg == histend && histend == last_hist && hlist[last_hist] == 0)
+       last_hist = histbeg = --histend;
+    }
+
+  /* We print error messages for line specifications out of range. */
+  if ((histbeg < 0) || (histend < 0))
+    {
+      sh_erange ((char *)NULL, _("history specification"));
+      return (EXECUTION_FAILURE);
+    }
+
+  if (histend < histbeg)
+    {
+      i = histend;
+      histend = histbeg;
+      histbeg = i;
+
+      reverse = 1;
+    }
+
+  if (listing)
+    stream = stdout;
+  else
+    {
+      numbering = 0;
+      stream = sh_mktmpfp ("bash-fc", MT_USERANDOM|MT_USETMPDIR, &fn);
+      if (stream == 0)
+       {
+         builtin_error (_("%s: cannot open temp file: %s"), fn ? fn : "", strerror (errno));
+         FREE (fn);
+         return (EXECUTION_FAILURE);
+       }
+    }
+
+  for (i = reverse ? histend : histbeg; reverse ? i >= histbeg : i <= histend; reverse ? i-- : i++)
+    {
+      QUIT;
+      if (numbering)
+       fprintf (stream, "%d", i + history_base);
+      if (listing)
+       {
+         if (posixly_correct)
+           fputs ("\t", stream);
+         else
+           fprintf (stream, "\t%c", histdata (i) ? '*' : ' ');
+       }
+      fprintf (stream, "%s\n", histline (i));
+    }
+
+  if (listing)
+    return (sh_chkwrite (EXECUTION_SUCCESS));
+
+  fflush (stream);
+  if (ferror (stream))
+    {
+      sh_wrerror ();
+      fclose (stream);
+      return (EXECUTION_FAILURE);
+    }
+  fclose (stream);
+
+  /* Now edit the file of commands. */
+  if (ename)
+    {
+      command = (char *)xmalloc (strlen (ename) + strlen (fn) + 2);
+      sprintf (command, "%s %s", ename, fn);
+    }
+  else
+    {
+      fcedit = posixly_correct ? POSIX_FC_EDIT_COMMAND : FC_EDIT_COMMAND;
+      command = (char *)xmalloc (3 + strlen (fcedit) + strlen (fn));
+      sprintf (command, "%s %s", fcedit, fn);
+    }
+  retval = parse_and_execute (command, "fc", SEVAL_NOHIST);
+  if (retval != EXECUTION_SUCCESS)
+    {
+      unlink (fn);
+      free (fn);
+      return (EXECUTION_FAILURE);
+    }
+
+  /* Make sure parse_and_execute doesn't turn this off, even though a
+     call to parse_and_execute farther up the function call stack (e.g.,
+     if this is called by vi_edit_and_execute_command) may have already
+     called bash_history_disable. */
+  remember_on_history = 1;
+
+  /* Turn on the `v' flag while fc_execute_file runs so the commands
+     will be echoed as they are read by the parser. */
+  begin_unwind_frame ("fc builtin");
+  add_unwind_protect ((Function *)xfree, fn);
+  add_unwind_protect (unlink, fn);
+  unwind_protect_int (echo_input_at_read);
+  echo_input_at_read = 1;
+    
+  retval = fc_execute_file (fn);
+
+  run_unwind_frame ("fc builtin");
+
+  return (retval);
+}
+
+/* Return 1 if LIST->word->word is a legal number for fc's use. */
+static int
+fc_number (list)
+     WORD_LIST *list;
+{
+  char *s;
+
+  if (list == 0)
+    return 0;
+  s = list->word->word;
+  if (*s == '-')
+    s++;
+  return (legal_number (s, (intmax_t *)NULL));
+}
+
+/* Return an absolute index into HLIST which corresponds to COMMAND.  If
+   COMMAND is a number, then it was specified in relative terms.  If it
+   is a string, then it is the start of a command line present in HLIST. */
+static int
+fc_gethnum (command, hlist)
+     char *command;
+     HIST_ENTRY **hlist;
+{
+  int sign, n, clen, rh;
+  register int i, j;
+  register char *s;
+
+  sign = 1;
+  /* Count history elements. */
+  for (i = 0; hlist[i]; i++);
+
+  /* With the Bash implementation of history, the current command line
+     ("fc blah..." and so on) is already part of the history list by
+     the time we get to this point.  This just skips over that command
+     and makes the last command that this deals with be the last command
+     the user entered before the fc.  We need to check whether the
+     line was actually added (HISTIGNORE may have caused it to not be),
+     so we check hist_last_line_added.  This needs to agree with the
+     calculation of last_hist in fc_builtin above. */
+  /* Even though command substitution through parse_and_execute turns off
+     remember_on_history, command substitution in a shell when set -o history
+     has been enabled (interactive or not) should use it in the last_hist
+     calculation as if it were on. */
+  rh = remember_on_history || ((subshell_environment & SUBSHELL_COMSUB) && enable_history_list);
+  i -= rh + hist_last_line_added;
+
+  /* No specification defaults to most recent command. */
+  if (command == NULL)
+    return (i);
+
+  /* Otherwise, there is a specification.  It can be a number relative to
+     the current position, or an absolute history number. */
+  s = command;
+
+  /* Handle possible leading minus sign. */
+  if (s && (*s == '-'))
+    {
+      sign = -1;
+      s++;
+    }
+
+  if (s && DIGIT(*s))
+    {
+      n = atoi (s);
+      n *= sign;
+
+      /* If the value is negative or zero, then it is an offset from
+        the current history item. */
+      if (n < 0)
+       {
+         n += i + 1;
+         return (n < 0 ? 0 : n);
+       }
+      else if (n == 0)
+       return (i);
+      else
+       {
+         n -= history_base;
+         return (i < n ? i : n);
+       }
+    }
+
+  clen = strlen (command);
+  for (j = i; j >= 0; j--)
+    {
+      if (STREQN (command, histline (j), clen))
+       return (j);
+    }
+  return (-1);
+}
+
+/* Locate the most recent history line which begins with
+   COMMAND in HLIST, and return a malloc()'ed copy of it. */
+static char *
+fc_gethist (command, hlist)
+     char *command;
+     HIST_ENTRY **hlist;
+{
+  int i;
+
+  if (hlist == 0)
+    return ((char *)NULL);
+
+  i = fc_gethnum (command, hlist);
+
+  if (i >= 0)
+    return (savestring (histline (i)));
+  else
+    return ((char *)NULL);
+}
+
+#ifdef INCLUDE_UNUSED
+/* Read the edited history lines from STREAM and return them
+   one at a time.  This can read unlimited length lines.  The
+   caller should free the storage. */
+static char *
+fc_readline (stream)
+     FILE *stream;
+{
+  register int c;
+  int line_len = 0, lindex = 0;
+  char *line = (char *)NULL;
+
+  while ((c = getc (stream)) != EOF)
+    {
+      if ((lindex + 2) >= line_len)
+       line = (char *)xrealloc (line, (line_len += 128));
+
+      if (c == '\n')
+       {
+         line[lindex++] = '\n';
+         line[lindex++] = '\0';
+         return (line);
+       }
+      else
+       line[lindex++] = c;
+    }
+
+  if (!lindex)
+    {
+      if (line)
+       free (line);
+
+      return ((char *)NULL);
+    }
+
+  if (lindex + 2 >= line_len)
+    line = (char *)xrealloc (line, lindex + 3);
+
+  line[lindex++] = '\n';           /* Finish with newline if none in file */
+  line[lindex++] = '\0';
+  return (line);
+}
+#endif
+
+/* Perform the SUBS on COMMAND.
+   SUBS is a list of substitutions, and COMMAND is a simple string.
+   Return a pointer to a malloc'ed string which contains the substituted
+   command. */
+static char *
+fc_dosubs (command, subs)
+     char *command;
+     REPL *subs;
+{
+  register char *new, *t;
+  register REPL *r;
+
+  for (new = savestring (command), r = subs; r; r = r->next)
+    {
+      t = strsub (new, r->pat, r->rep, 1);
+      free (new);
+      new = t;
+    }
+  return (new);
+}
+
+/* Use `command' to replace the last entry in the history list, which,
+   by this time, is `fc blah...'.  The intent is that the new command
+   become the history entry, and that `fc' should never appear in the
+   history list.  This way you can do `r' to your heart's content. */
+static void
+fc_replhist (command)
+     char *command;
+{
+  int n;
+
+  if (command == 0 || *command == '\0')
+    return;
+
+  n = strlen (command);
+  if (command[n - 1] == '\n')
+    command[n - 1] = '\0';
+
+  if (command && *command)
+    {
+      bash_delete_last_history ();
+      maybe_add_history (command);     /* Obeys HISTCONTROL setting. */
+    }
+}
+
+#ifdef INCLUDE_UNUSED
+/* Add LINE to the history, after removing a single trailing newline. */
+static void
+fc_addhist (line)
+     char *line;
+{
+  register int n;
+
+  if (line == 0 || *line == 0)
+    return;
+
+  n = strlen (line);
+
+  if (line[n - 1] == '\n')
+    line[n - 1] = '\0';
+
+  if (line && *line)
+    maybe_add_history (line);          /* Obeys HISTCONTROL setting. */
+}
+#endif
+
+#endif /* HISTORY */
index 89a22e44c8fb4b753f73352ef7fdfe9594c4125d..89e4a88d096e9db37748aabfb3edeac542c3ee99 100644 (file)
@@ -5,12 +5,12 @@
 .\"    Case Western Reserve University
 .\"    chet@po.cwru.edu
 .\"
-.\"    Last Change: Fri Jan 15 10:50:42 EST 2010
+.\"    Last Change: Sat Apr 17 23:24:15 EDT 2010
 .\"
 .\" bash_builtins, strip all but Built-Ins section
 .if \n(zZ=1 .ig zZ
 .if \n(zY=1 .ig zY
-.TH BASH 1 "2010 January 15" "GNU Bash-4.1"
+.TH BASH 1 "2010 April 17" "GNU Bash-4.1"
 .\"
 .\" There's some problem with having a `@'
 .\" in a tagged paragraph with the BSD man macros.
@@ -50,8 +50,8 @@ bash \- GNU Bourne-Again SHell
 [options]
 [file]
 .SH COPYRIGHT
-.if n Bash is Copyright (C) 1989-2009 by the Free Software Foundation, Inc.
-.if t Bash is Copyright \(co 1989-2009 by the Free Software Foundation, Inc.
+.if n Bash is Copyright (C) 1989-2010 by the Free Software Foundation, Inc.
+.if t Bash is Copyright \(co 1989-2010 by the Free Software Foundation, Inc.
 .SH DESCRIPTION
 .B Bash
 is an \fBsh\fR-compatible command language interpreter that
@@ -5159,7 +5159,8 @@ have a slash appended (subject to the value of
 .B match\-hidden\-files (On)
 This variable, when set to \fBOn\fP, causes readline to match files whose
 names begin with a `.' (hidden files) when performing filename 
-completion, unless the leading `.' is
+completion.
+If set to \fBOff\fP, the leading `.' must be
 supplied by the user in the filename to be completed.
 .TP
 .B output\-meta (Off)
@@ -8064,6 +8065,11 @@ beginning with \fB\e0\fP may contain up to four digits),
 and \fB%q\fP causes \fBprintf\fP to output the corresponding
 \fIargument\fP in a format that can be reused as shell input.
 .sp 1
+Arguments to non-string format specifiers are treated as C constants,
+except that a leading plus or minus sign is allowed, and if the leading
+character is a single or double quote, the value is the ASCII value of
+the following character.
+.sp 1
 The \fB\-v\fP option causes the output to be assigned to the variable
 \fIvar\fP rather than being printed to the standard output.
 .sp 1
index 21ace22babc95fba234f8a0b8c7917124719f335..f40844ddb111cb210895ca11d23eb0011249bef8 100644 (file)
@@ -5,12 +5,12 @@
 .\"    Case Western Reserve University
 .\"    chet@po.cwru.edu
 .\"
-.\"    Last Change: Fri Jan 15 10:50:42 EST 2010
+.\"    Last Change: Sat Apr 17 23:24:15 EDT 2010
 .\"
 .\" bash_builtins, strip all but Built-Ins section
 .if \n(zZ=1 .ig zZ
 .if \n(zY=1 .ig zY
-.TH BASH 1 "2010 January 15" "GNU Bash-4.1"
+.TH BASH 1 "2010 April 17" "GNU Bash-4.1"
 .\"
 .\" There's some problem with having a `@'
 .\" in a tagged paragraph with the BSD man macros.
@@ -3902,7 +3902,7 @@ turned on to be used in an expression.
 .PP
 Constants with a leading 0 are interpreted as octal numbers.
 A leading 0x or 0X denotes hexadecimal.
-Otherwise, numbers take the form [\fIbase#\fP]n, where \fIbase\fP
+Otherwise, numbers take the form [\fIbase#\fP]n, where the optional \fIbase\fP
 is a decimal number between 2 and 64 representing the arithmetic
 base, and \fIn\fP is a number in that base.
 If \fIbase#\fP is omitted, then base 10 is used.
@@ -5159,7 +5159,8 @@ have a slash appended (subject to the value of
 .B match\-hidden\-files (On)
 This variable, when set to \fBOn\fP, causes readline to match files whose
 names begin with a `.' (hidden files) when performing filename 
-completion, unless the leading `.' is
+completion.
+If set to \fBOff\fP, the leading `.' must be
 supplied by the user in the filename to be completed.
 .TP
 .B output\-meta (Off)
@@ -8064,6 +8065,11 @@ beginning with \fB\e0\fP may contain up to four digits),
 and \fB%q\fP causes \fBprintf\fP to output the corresponding
 \fIargument\fP in a format that can be reused as shell input.
 .sp 1
+Arguments to non-string format specifiers are treated as C constants,
+except that a leading plus or minus sign is allowed, and if the leading
+character is a single or double quote, the value is the ASCII value of
+the following character.
+.sp 1
 The \fB\-v\fP option causes the output to be assigned to the variable
 \fIvar\fP rather than being printed to the standard output.
 .sp 1
index 042ca92fbc838a0a21d37bec18308bd0d621d3ca..15ede23b5e29bdc0d319388436d57f7074271253 100644 (file)
@@ -16,7 +16,7 @@ This is Edition @value{EDITION}, last updated @value{UPDATED},
 of @cite{The GNU Bash Reference Manual},
 for @code{Bash}, Version @value{VERSION}.
 
-Copyright @copyright{} 1988--2009 Free Software Foundation, Inc.
+Copyright @copyright{} 1988--2010 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -3713,6 +3713,11 @@ beginning with @samp{\0} may contain up to four digits),
 and @samp{%q} causes @code{printf} to output the
 corresponding @var{argument} in a format that can be reused as shell input.
 
+Arguments to non-string format specifiers are treated as C language constants,
+except that a leading plus or minus sign is allowed, and if the leading
+character is a single or double quote, the value is the ASCII value of
+the following character.
+
 The @option{-v} option causes the output to be assigned to the variable
 @var{var} rather than being printed to the standard output.
 
index 6203624f59e65b38efee28df9e82014183e9afcb..8636e8ebd569e8249fd10927680c225cc3d090b7 100644 (file)
@@ -3713,6 +3713,11 @@ beginning with @samp{\0} may contain up to four digits),
 and @samp{%q} causes @code{printf} to output the
 corresponding @var{argument} in a format that can be reused as shell input.
 
+Arguments to non-string format specifiers are treated as C language constants,
+except that a leading plus or minus sign is allowed, and if the leading
+character is a single or double quote, the value is the ASCII value of
+the following character.
+
 The @option{-v} option causes the output to be assigned to the variable
 @var{var} rather than being printed to the standard output.
 
@@ -5966,7 +5971,7 @@ to be used in an expression.
 
 Constants with a leading 0 are interpreted as octal numbers.
 A leading @samp{0x} or @samp{0X} denotes hexadecimal.  Otherwise,
-numbers take the form [@var{base}@code{#}]@var{n}, where @var{base}
+numbers take the form [@var{base}@code{#}]@var{n}, where the optional @var{base}
 is a decimal number between 2 and 64 representing the arithmetic
 base, and @var{n} is a number in that base.  If @var{base}@code{#} is
 omitted, then base 10 is used.
index 1628278f1bcb77959da11a95840a86113610b3a2..972af30cc7e8432b382c554bfdb4b269f5f85620 100644 (file)
@@ -2,9 +2,9 @@
 Copyright (C) 1988-2010 Free Software Foundation, Inc.
 @end ignore
 
-@set LASTCHANGE Fri Jan 15 10:50:20 EST 2010
+@set LASTCHANGE Sat Apr 17 23:23:55 EDT 2010
 
 @set EDITION 4.1
 @set VERSION 4.1
-@set UPDATED 15 January 2010
-@set UPDATED-MONTH January 2010
+@set UPDATED 17 April 2010
+@set UPDATED-MONTH April 2010
diff --git a/doc/version.texi~ b/doc/version.texi~
new file mode 100644 (file)
index 0000000..1628278
--- /dev/null
@@ -0,0 +1,10 @@
+@ignore
+Copyright (C) 1988-2010 Free Software Foundation, Inc.
+@end ignore
+
+@set LASTCHANGE Fri Jan 15 10:50:20 EST 2010
+
+@set EDITION 4.1
+@set VERSION 4.1
+@set UPDATED 15 January 2010
+@set UPDATED-MONTH January 2010
index b61740b1ec6670b7d9e0fa6386ec1eecd977950b..a31d98bc6b351ced698e6fd4c5dde64c63a9cdc6 100644 (file)
@@ -4381,12 +4381,25 @@ execute_builtin_or_function (words, builtin, var, redirects,
 {
   int result;
   REDIRECT *saved_undo_list;
+#if defined (PROCESS_SUBSTITUTION)
+  int ofifo, nfifo, osize;
+  char *ofifo_list;
+#endif
+
+
+#if defined (PROCESS_SUBSTITUTION)  
+  ofifo = num_fifos ();
+  ofifo_list = copy_fifo_list (&osize);
+#endif
 
   if (do_redirections (redirects, RX_ACTIVE|RX_UNDOABLE) != 0)
     {
       cleanup_redirects (redirection_undo_list);
       redirection_undo_list = (REDIRECT *)NULL;
       dispose_exec_redirects ();
+#if defined (PROCESS_SUBSTITUTION)
+      free (ofifo_list);
+#endif
       return (EX_REDIRFAIL);   /* was EXECUTION_FAILURE */
     }
 
@@ -4448,6 +4461,14 @@ execute_builtin_or_function (words, builtin, var, redirects,
       redirection_undo_list = (REDIRECT *)NULL;
     }
 
+#if defined (PROCESS_SUBSTITUTION)
+  /* Close any FIFOs created by this builtin or function. */
+  nfifo = num_fifos ();
+  if (nfifo > ofifo)
+    close_new_fifos (ofifo_list, osize);
+  free (ofifo_list);
+#endif
+
   return (result);
 }
 
index 37f348795cc1170ebf0438b00292e36dc8adcfcb..67b89cb710c37db8567c7137bd0cf87129f236ca 100644 (file)
@@ -3812,15 +3812,13 @@ run_builtin:
       if (already_forked)
        {
          /* reset_terminating_signals (); */   /* XXX */
-#if 1  /* XXX - bash-4.2 */
-itrace("execute_simple_command: forked builtin or shell function: calling restore_original_signals");
+#if 0  /* XXX - bash-4.2 */
          /* Reset the signal handlers in the child, but don't free the
             trap strings.  Set a flag noting that we have to free the
             trap strings if we run trap to change a signal disposition. */
          reset_signal_handlers ();
          subshell_environment |= SUBSHELL_RESETTRAP;
 #else
-itrace("execute_simple_command: forked builtin or shell function: calling restore_original_signals");
          /* Cancel traps, in trap.c. */
          restore_original_signals ();
 #endif
@@ -4383,6 +4381,16 @@ execute_builtin_or_function (words, builtin, var, redirects,
 {
   int result;
   REDIRECT *saved_undo_list;
+#if defined (PROCESS_SUBSTITUTION)
+  int ofifo, nfifo, osize;
+  char *ofifo_list;
+#endif
+
+
+#if defined (PROCESS_SUBSTITUTION)  
+  ofifo = num_fifos ();
+  ofifo_list = copy_fifo_list (&osize);
+#endif
 
   if (do_redirections (redirects, RX_ACTIVE|RX_UNDOABLE) != 0)
     {
@@ -4450,6 +4458,14 @@ execute_builtin_or_function (words, builtin, var, redirects,
       redirection_undo_list = (REDIRECT *)NULL;
     }
 
+#if defined (PROCESS_SUBSTITUTION)
+  /* Close any FIFOs created by this builtin or function. */
+  nfifo = num_fifos ();
+  if (nfifo > ofifo)
+    close_new_fifos (ofifo_list, osize);
+  free (ofifo_list);
+#endif
+
   return (result);
 }
 
index 806356cf9094b936ed8fa9b3e0eb666ccf5f3463..56cf90f9aeb160281604b848d9c3ff105862996f 100644 (file)
@@ -160,7 +160,7 @@ int _rl_completion_case_fold = 1;
 int _rl_completion_case_fold;
 #endif
 
-/* If non-zero, don't match hidden files (filenames beginning with a `.' on
+/* If zero, don't match hidden files (filenames beginning with a `.' on
    Unix) when doing filename completion. */
 int _rl_match_hidden_files = 1;
 
index 453b2e6719fb0665d5d90d17753c67de5fd4ccbc..806356cf9094b936ed8fa9b3e0eb666ccf5f3463 100644 (file)
@@ -2094,9 +2094,9 @@ rl_filename_completion_function (text, state)
       else if (rl_completion_found_quote && rl_filename_dequoting_function)
        {
          /* delete single and double quotes */
-         temp = (*rl_filename_dequoting_function) (users_dirname, rl_completion_quote_character);
-         free (users_dirname);
-         users_dirname = temp;
+         temp = (*rl_filename_dequoting_function) (dirname, rl_completion_quote_character);
+         free (dirname);
+         dirname = temp;
        }
       directory = opendir (dirname);
 
index a41af09b5cf6b08b9944a4780be576809c39038c..a94cb6cc30f03b8411ff8b8a0cbb3a6e7104e4d6 100644 (file)
@@ -6,9 +6,9 @@
 .\"    Case Western Reserve University
 .\"    chet@ins.CWRU.Edu
 .\"
-.\"    Last Change: Fri Oct  9 12:57:27 EDT 2009
+.\"    Last Change: Sat Apr 17 23:46:04 EDT 2010
 .\"
-.TH READLINE 3 "2009 October 9" "GNU Readline 6.1"
+.TH READLINE 3 "2009 April 17" "GNU Readline 6.1"
 .\"
 .\" File Name macro.  This used to be `.PN', for Path Name,
 .\" but Sun doesn't seem to like that very much.
@@ -34,8 +34,8 @@ readline \- get a line from a user with editing
 \fBreadline\fP (\fIconst char *prompt\fP);
 .fi
 .SH COPYRIGHT
-.if n Readline is Copyright (C) 1989\-2009 Free Software Foundation,  Inc.
-.if t Readline is Copyright \(co 1989\-2009 Free Software Foundation, Inc.
+.if n Readline is Copyright (C) 1989\-2010 Free Software Foundation,  Inc.
+.if t Readline is Copyright \(co 1989\-2010 Free Software Foundation, Inc.
 .SH DESCRIPTION
 .LP
 .B readline
@@ -475,7 +475,8 @@ have a slash appended (subject to the value of
 .B match\-hidden\-files (On)
 This variable, when set to \fBOn\fP, causes readline to match files whose 
 names begin with a `.' (hidden files) when performing filename     
-completion, unless the leading `.' is     
+completion.
+If set to \fBOff\fP, the leading `.' must be
 supplied by the user in the filename to be completed.
 .TP
 .B output\-meta (Off)
diff --git a/lib/readline/doc/readline.3~ b/lib/readline/doc/readline.3~
new file mode 100644 (file)
index 0000000..ee5ead3
--- /dev/null
@@ -0,0 +1,1353 @@
+.\"
+.\" MAN PAGE COMMENTS to
+.\"
+.\"    Chet Ramey
+.\"    Information Network Services
+.\"    Case Western Reserve University
+.\"    chet@ins.CWRU.Edu
+.\"
+.\"    Last Change: Fri Oct  9 12:57:27 EDT 2009
+.\"
+.TH READLINE 3 "2009 October 9" "GNU Readline 6.1"
+.\"
+.\" File Name macro.  This used to be `.PN', for Path Name,
+.\" but Sun doesn't seem to like that very much.
+.\"
+.de FN
+\fI\|\\$1\|\fP
+..
+.SH NAME
+readline \- get a line from a user with editing
+.SH SYNOPSIS
+.LP
+.nf
+.ft B
+#include <stdio.h>
+#include <readline/readline.h>
+#include <readline/history.h>
+.ft
+.fi
+.LP
+.nf
+\fIchar *\fP
+.br
+\fBreadline\fP (\fIconst char *prompt\fP);
+.fi
+.SH COPYRIGHT
+.if n Readline is Copyright (C) 1989\-2009 Free Software Foundation,  Inc.
+.if t Readline is Copyright \(co 1989\-2009 Free Software Foundation, Inc.
+.SH DESCRIPTION
+.LP
+.B readline
+will read a line from the terminal
+and return it, using
+.B prompt
+as a prompt.  If 
+.B prompt
+is \fBNULL\fP or the empty string, no prompt is issued.
+The line returned is allocated with
+.IR malloc (3);
+the caller must free it when finished.  The line returned
+has the final newline removed, so only the text of the line
+remains.
+.LP
+.B readline
+offers editing capabilities while the user is entering the
+line.
+By default, the line editing commands
+are similar to those of emacs.
+A vi\-style line editing interface is also available.
+.LP
+This manual page describes only the most basic use of \fBreadline\fP.
+Much more functionality is available; see
+\fIThe GNU Readline Library\fP and \fIThe GNU History Library\fP
+for additional information.
+.SH RETURN VALUE
+.LP
+.B readline
+returns the text of the line read.  A blank line
+returns the empty string.  If
+.B EOF
+is encountered while reading a line, and the line is empty,
+.B NULL
+is returned.  If an
+.B EOF
+is read with a non\-empty line, it is
+treated as a newline.
+.SH NOTATION
+.LP
+An emacs-style notation is used to denote
+keystrokes.  Control keys are denoted by C\-\fIkey\fR, e.g., C\-n
+means Control\-N.  Similarly, 
+.I meta
+keys are denoted by M\-\fIkey\fR, so M\-x means Meta\-X.  (On keyboards
+without a 
+.I meta
+key, M\-\fIx\fP means ESC \fIx\fP, i.e., press the Escape key
+then the
+.I x
+key.  This makes ESC the \fImeta prefix\fP.
+The combination M\-C\-\fIx\fP means ESC\-Control\-\fIx\fP,
+or press the Escape key
+then hold the Control key while pressing the
+.I x
+key.)
+.PP
+Readline commands may be given numeric
+.IR arguments ,
+which normally act as a repeat count.  Sometimes, however, it is the
+sign of the argument that is significant.  Passing a negative argument
+to a command that acts in the forward direction (e.g., \fBkill\-line\fP)
+causes that command to act in a backward direction.  Commands whose
+behavior with arguments deviates from this are noted.
+.PP
+When a command is described as \fIkilling\fP text, the text
+deleted is saved for possible future retrieval
+(\fIyanking\fP).  The killed text is saved in a
+\fIkill ring\fP.  Consecutive kills cause the text to be
+accumulated into one unit, which can be yanked all at once. 
+Commands which do not kill text separate the chunks of text
+on the kill ring.
+.SH INITIALIZATION FILE
+.LP
+Readline is customized by putting commands in an initialization
+file (the \fIinputrc\fP file).
+The name of this file is taken from the value of the
+.B INPUTRC
+environment variable.  If that variable is unset, the default is
+.IR ~/.inputrc .
+If that file  does not exist or cannot be read, the ultimate default is
+.IR /etc/inputrc .
+When a program which uses the readline library starts up, the
+init file is read, and the key bindings and variables are set.
+There are only a few basic constructs allowed in the
+readline init file.  Blank lines are ignored.
+Lines beginning with a \fB#\fP are comments.
+Lines beginning with a \fB$\fP indicate conditional constructs.
+Other lines denote key bindings and variable settings.
+Each program using this library may add its own commands
+and bindings.
+.PP
+For example, placing
+.RS
+.PP
+M\-Control\-u: universal\-argument
+.RE
+or
+.RS
+C\-Meta\-u: universal\-argument
+.RE
+.sp
+into the 
+.I inputrc
+would make M\-C\-u execute the readline command
+.IR universal\-argument .
+.PP
+The following symbolic character names are recognized while
+processing key bindings:
+.IR DEL ,
+.IR ESC ,
+.IR ESCAPE ,
+.IR LFD ,
+.IR NEWLINE ,
+.IR RET ,
+.IR RETURN ,
+.IR RUBOUT ,
+.IR SPACE ,
+.IR SPC ,
+and
+.IR TAB .
+.PP
+In addition to command names, readline allows keys to be bound
+to a string that is inserted when the key is pressed (a \fImacro\fP).
+.PP
+.SS Key Bindings
+.PP
+The syntax for controlling key bindings in the
+.I inputrc
+file is simple.  All that is required is the name of the
+command or the text of a macro and a key sequence to which
+it should be bound. The name may be specified in one of two ways:
+as a symbolic key name, possibly with \fIMeta\-\fP or \fIControl\-\fP
+prefixes, or as a key sequence.
+The name and key sequence are separated by a colon.  There can be no
+whitespace between the name and the colon.
+.PP
+When using the form \fBkeyname\fP:\^\fIfunction-name\fP or \fImacro\fP,
+.I keyname
+is the name of a key spelled out in English.  For example:
+.sp
+.RS
+Control\-u: universal\-argument
+.br
+Meta\-Rubout: backward\-kill\-word
+.br
+Control\-o: "> output"
+.RE
+.LP
+In the above example,
+.I C\-u
+is bound to the function
+.BR universal\-argument ,
+.I M-DEL
+is bound to the function
+.BR backward\-kill\-word ,
+and
+.I C\-o
+is bound to run the macro
+expressed on the right hand side (that is, to insert the text
+.if t \f(CW> output\fP
+.if n ``> output''
+into the line).
+.PP
+In the second form, \fB"keyseq"\fP:\^\fIfunction\-name\fP or \fImacro\fP,
+.B keyseq
+differs from
+.B keyname
+above in that strings denoting
+an entire key sequence may be specified by placing the sequence
+within double quotes.  Some GNU Emacs style key escapes can be
+used, as in the following example, but the symbolic character names
+are not recognized.
+.sp
+.RS
+"\eC\-u": universal\-argument
+.br
+"\eC\-x\eC\-r": re\-read\-init\-file
+.br
+"\ee[11~": "Function Key 1"
+.RE
+.PP
+In this example,
+.I C-u
+is again bound to the function
+.BR universal\-argument .
+.I "C-x C-r"
+is bound to the function
+.BR re\-read\-init\-file ,
+and 
+.I "ESC [ 1 1 ~"
+is bound to insert the text
+.if t \f(CWFunction Key 1\fP.
+.if n ``Function Key 1''.
+.PP
+The full set of GNU Emacs style escape sequences available when specifying
+key sequences is
+.RS
+.PD 0
+.TP
+.B \eC\-
+control prefix
+.TP
+.B \eM\-
+meta prefix
+.TP
+.B \ee
+an escape character
+.TP
+.B \e\e
+backslash
+.TP
+.B \e"
+literal ", a double quote
+.TP
+.B \e'
+literal ', a single quote
+.RE
+.PD
+.PP
+In addition to the GNU Emacs style escape sequences, a second
+set of backslash escapes is available:
+.RS
+.PD 0
+.TP
+.B \ea
+alert (bell)
+.TP
+.B \eb
+backspace
+.TP
+.B \ed
+delete
+.TP
+.B \ef
+form feed
+.TP
+.B \en
+newline
+.TP
+.B \er
+carriage return
+.TP
+.B \et
+horizontal tab
+.TP
+.B \ev
+vertical tab
+.TP
+.B \e\fInnn\fP
+the eight-bit character whose value is the octal value \fInnn\fP
+(one to three digits)
+.TP
+.B \ex\fIHH\fP
+the eight-bit character whose value is the hexadecimal value \fIHH\fP
+(one or two hex digits)
+.RE
+.PD
+.PP
+When entering the text of a macro, single or double quotes should
+be used to indicate a macro definition.  Unquoted text
+is assumed to be a function name.
+In the macro body, the backslash escapes described above are expanded.
+Backslash will quote any other character in the macro text,
+including " and '.
+.PP
+.B Bash
+allows the current readline key bindings to be displayed or modified
+with the
+.B bind
+builtin command.  The editing mode may be switched during interactive
+use by using the
+.B \-o
+option to the
+.B set
+builtin command.  Other programs using this library provide
+similar mechanisms.  The
+.I inputrc
+file may be edited and re-read if a program does not provide
+any other means to incorporate new bindings.
+.SS Variables
+.PP
+Readline has variables that can be used to further customize its
+behavior.  A variable may be set in the
+.I inputrc
+file with a statement of the form
+.RS
+.PP
+\fBset\fP \fIvariable\-name\fP \fIvalue\fP
+.RE
+.PP
+Except where noted, readline variables can take the values
+.B On
+or
+.B Off
+(without regard to case).
+Unrecognized variable names are ignored.
+When a variable value is read, empty or null values, "on" (case-insensitive),
+and "1" are equivalent to \fBOn\fP.  All other values are equivalent to
+\fBOff\fP.
+The variables and their default values are:
+.PP
+.PD 0
+.TP
+.B bell\-style (audible)
+Controls what happens when readline wants to ring the terminal bell.
+If set to \fBnone\fP, readline never rings the bell.  If set to
+\fBvisible\fP, readline uses a visible bell if one is available.
+If set to \fBaudible\fP, readline attempts to ring the terminal's bell.
+.TP
+.B bind\-tty\-special\-chars (On)
+If set to \fBOn\fP, readline attempts to bind the control characters  
+treated specially by the kernel's terminal driver to their readline
+equivalents.
+.TP
+.B comment\-begin (``#'')
+The string that is inserted in \fBvi\fP mode when the
+.B insert\-comment
+command is executed.
+This command is bound to
+.B M\-#
+in emacs mode and to
+.B #
+in vi command mode.
+.TP 
+.B completion\-ignore\-case (Off)
+If set to \fBOn\fP, readline performs filename matching and completion
+in a case\-insensitive fashion.
+.TP
+.B completion\-prefix\-display\-length (0)
+The length in characters of the common prefix of a list of possible
+completions that is displayed without modification.  When set to a
+value greater than zero, common prefixes longer than this value are
+replaced with an ellipsis when displaying possible completions.
+.TP
+.B completion\-query\-items (100)
+This determines when the user is queried about viewing
+the number of possible completions
+generated by the \fBpossible\-completions\fP command.
+It may be set to any integer value greater than or equal to
+zero.  If the number of possible completions is greater than
+or equal to the value of this variable, the user is asked whether
+or not he wishes to view them; otherwise they are simply listed
+on the terminal.  A negative value causes readline to never ask.
+.TP
+.B convert\-meta (On)
+If set to \fBOn\fP, readline will convert characters with the
+eighth bit set to an ASCII key sequence
+by stripping the eighth bit and prefixing it with an
+escape character (in effect, using escape as the \fImeta prefix\fP).
+.TP
+.B disable\-completion (Off)
+If set to \fBOn\fP, readline will inhibit word completion.  Completion 
+characters will be inserted into the line as if they had been
+mapped to \fBself-insert\fP.
+.TP
+.B editing\-mode (emacs)
+Controls whether readline begins with a set of key bindings similar
+to emacs or vi.
+.B editing\-mode
+can be set to either
+.B emacs
+or
+.BR vi .
+.TP
+.B echo\-control\-characters (On)
+When set to \fBOn\fP, on operating systems that indicate they support it,
+readline echoes a character corresponding to a signal generated from the
+keyboard.
+.TP
+.B enable\-keypad (Off)
+When set to \fBOn\fP, readline will try to enable the application
+keypad when it is called.  Some systems need this to enable the
+arrow keys.
+.TP
+.B enable\-meta\-key (On)
+When set to \fBOn\fP, readline will try to enable any meta modifier
+key the terminal claims to support when it is called.  On many terminals,
+the meta key is used to send eight-bit characters.
+.TP
+.B expand\-tilde (Off)
+If set to \fBon\fP, tilde expansion is performed when readline
+attempts word completion.
+.TP
+.B history\-preserve\-point (Off)
+If set to \fBon\fP, the history code attempts to place point at the 
+same location on each history line retrieved with \fBprevious-history\fP 
+or \fBnext-history\fP.
+.TP
+.B history\-size (0)
+Set the maximum number of history entries saved in the history list.  If
+set to zero, the number of entries in the history list is not limited.
+.TP
+.B horizontal\-scroll\-mode (Off)
+When set to \fBOn\fP, makes readline use a single line for display,
+scrolling the input horizontally on a single screen line when it
+becomes longer than the screen width rather than wrapping to a new line.
+.TP
+.B input\-meta (Off)
+If set to \fBOn\fP, readline will enable eight-bit input (that is,
+it will not clear the eighth bit in the characters it reads),
+regardless of what the terminal claims it can support.  The name
+.B meta\-flag
+is a synonym for this variable.
+.TP
+.B isearch\-terminators (``C\-[ C\-J'')
+The string of characters that should terminate an incremental
+search without subsequently executing the character as a command.
+If this variable has not been given a value, the characters
+\fIESC\fP and \fIC\-J\fP will terminate an incremental search.
+.TP
+.B keymap (emacs)
+Set the current readline keymap.  The set of legal keymap names is
+\fIemacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,
+vi-command\fP, and
+.IR vi-insert .
+\fIvi\fP is equivalent to \fIvi-command\fP; \fIemacs\fP is
+equivalent to \fIemacs-standard\fP.  The default value is
+.IR emacs .
+The value of
+.B editing\-mode
+also affects the default keymap.
+.TP
+.B mark\-directories (On)
+If set to \fBOn\fP, completed directory names have a slash
+appended.
+.TP
+.B mark\-modified\-lines (Off)
+If set to \fBOn\fP, history lines that have been modified are displayed
+with a preceding asterisk (\fB*\fP).
+.TP
+.B mark\-symlinked\-directories (Off)
+If set to \fBOn\fP, completed names which are symbolic links to directories
+have a slash appended (subject to the value of
+\fBmark\-directories\fP).
+.TP
+.B match\-hidden\-files (On)
+This variable, when set to \fBOn\fP, causes readline to match files whose 
+names begin with a `.' (hidden files) when performing filename     
+completion.
+If set to \fBOff\fP, the leading `.' must be
+supplied by the user in the filename to be completed.
+.TP
+.B output\-meta (Off)
+If set to \fBOn\fP, readline will display characters with the
+eighth bit set directly rather than as a meta-prefixed escape
+sequence.
+.TP
+.B page\-completions (On)
+If set to \fBOn\fP, readline uses an internal \fImore\fP-like pager
+to display a screenful of possible completions at a time.
+.TP
+.B print\-completions\-horizontally (Off)
+If set to \fBOn\fP, readline will display completions with matches
+sorted horizontally in alphabetical order, rather than down the screen.
+.TP
+.B revert\-all\-at\-newline (Off)
+If set to \fBon\fP, readline will undo all changes to history lines
+before returning when \fBaccept\-line\fP is executed.  By default,
+history lines may be modified and retain individual undo lists across
+calls to \fBreadline\fP.
+.TP
+.B show\-all\-if\-ambiguous (Off)
+This alters the default behavior of the completion functions.  If
+set to
+.BR on ,
+words which have more than one possible completion cause the
+matches to be listed immediately instead of ringing the bell.
+.TP
+.B show\-all\-if\-unmodified (Off)
+This alters the default behavior of the completion functions in
+a fashion similar to \fBshow\-all\-if\-ambiguous\fP.
+If set to
+.BR on , 
+words which have more than one possible completion without any
+possible partial completion (the possible completions don't share 
+a common prefix) cause the matches to be listed immediately instead
+of ringing the bell.
+.TP
+.B skip\-completed\-text (Off)
+If set to \fBOn\fP, this alters the default completion behavior when
+inserting a single match into the line.  It's only active when
+performing completion in the middle of a word.  If enabled, readline
+does not insert characters from the completion that match characters
+after point in the word being completed, so portions of the word
+following the cursor are not duplicated.
+.TP
+.B visible\-stats (Off)
+If set to \fBOn\fP, a character denoting a file's type as reported  
+by \fIstat\fP(2) is appended to the filename when listing possible
+completions.
+.PD
+.SS Conditional Constructs
+.PP
+Readline implements a facility similar in spirit to the conditional
+compilation features of the C preprocessor which allows key
+bindings and variable settings to be performed as the result
+of tests.  There are four parser directives used.
+.IP \fB$if\fP
+The 
+.B $if
+construct allows bindings to be made based on the
+editing mode, the terminal being used, or the application using
+readline.  The text of the test extends to the end of the line;
+no characters are required to isolate it.
+.RS
+.IP \fBmode\fP
+The \fBmode=\fP form of the \fB$if\fP directive is used to test
+whether readline is in emacs or vi mode.
+This may be used in conjunction
+with the \fBset keymap\fP command, for instance, to set bindings in
+the \fIemacs-standard\fP and \fIemacs-ctlx\fP keymaps only if
+readline is starting out in emacs mode.
+.IP \fBterm\fP
+The \fBterm=\fP form may be used to include terminal-specific
+key bindings, perhaps to bind the key sequences output by the
+terminal's function keys.  The word on the right side of the
+.B =
+is tested against the full name of the terminal and the portion
+of the terminal name before the first \fB\-\fP.  This allows
+.I sun
+to match both
+.I sun
+and
+.IR sun\-cmd ,
+for instance.
+.IP \fBapplication\fP
+The \fBapplication\fP construct is used to include
+application-specific settings.  Each program using the readline
+library sets the \fIapplication name\fP, and an initialization
+file can test for a particular value.
+This could be used to bind key sequences to functions useful for
+a specific program.  For instance, the following command adds a
+key sequence that quotes the current or previous word in Bash:
+.sp 1
+.RS
+.nf
+\fB$if\fP Bash
+# Quote the current or previous word
+"\eC-xq": "\eeb\e"\eef\e""
+\fB$endif\fP
+.fi
+.RE
+.RE
+.IP \fB$endif\fP
+This command, as seen in the previous example, terminates an
+\fB$if\fP command.
+.IP \fB$else\fP
+Commands in this branch of the \fB$if\fP directive are executed if
+the test fails.
+.IP \fB$include\fP
+This directive takes a single filename as an argument and reads commands
+and bindings from that file.  For example, the following directive
+would read \fI/etc/inputrc\fP:
+.sp 1
+.RS
+.nf
+\fB$include\fP \^ \fI/etc/inputrc\fP
+.fi 
+.RE
+.SH SEARCHING
+.PP
+Readline provides commands for searching through the command history
+for lines containing a specified string.
+There are two search modes:
+.I incremental
+and
+.IR non-incremental .
+.PP
+Incremental searches begin before the user has finished typing the
+search string.
+As each character of the search string is typed, readline displays
+the next entry from the history matching the string typed so far.
+An incremental search requires only as many characters as needed to
+find the desired history entry.
+To search backward in the history for a particular string, type
+\fBC\-r\fP.  Typing \fBC\-s\fP searches forward through the history.
+The characters present in the value of the \fBisearch-terminators\fP
+variable are used to terminate an incremental search.
+If that variable has not been assigned a value the \fIEscape\fP and
+\fBC\-J\fP characters will terminate an incremental search.
+\fBC\-G\fP will abort an incremental search and restore the original
+line.
+When the search is terminated, the history entry containing the
+search string becomes the current line.
+.PP
+To find other matching entries in the history list, type \fBC\-s\fP or
+\fBC\-r\fP as appropriate.
+This will search backward or forward in the history for the next
+line matching the search string typed so far.
+Any other key sequence bound to a readline command will terminate
+the search and execute that command.
+For instance, a newline will terminate the search and accept
+the line, thereby executing the command from the history list.
+A movement command will terminate the search, make the last line found
+the current line, and begin editing.
+.PP
+Non-incremental searches read the entire search string before starting
+to search for matching history lines.  The search string may be
+typed by the user or be part of the contents of the current line.
+.SH EDITING COMMANDS
+.PP
+The following is a list of the names of the commands and the default
+key sequences to which they are bound.
+Command names without an accompanying key sequence are unbound by default.
+.PP
+In the following descriptions, \fIpoint\fP refers to the current cursor
+position, and \fImark\fP refers to a cursor position saved by the
+\fBset\-mark\fP command.
+The text between the point and mark is referred to as the \fIregion\fP.
+.SS Commands for Moving
+.PP
+.PD 0
+.TP
+.B beginning\-of\-line (C\-a)
+Move to the start of the current line.
+.TP
+.B end\-of\-line (C\-e)
+Move to the end of the line.
+.TP
+.B forward\-char (C\-f)
+Move forward a character.
+.TP
+.B backward\-char (C\-b)
+Move back a character.
+.TP
+.B forward\-word (M\-f)
+Move forward to the end of the next word.  Words are composed of
+alphanumeric characters (letters and digits).
+.TP
+.B backward\-word (M\-b)
+Move back to the start of the current or previous word.  Words are
+composed of alphanumeric characters (letters and digits).
+.TP
+.B clear\-screen (C\-l)
+Clear the screen leaving the current line at the top of the screen.
+With an argument, refresh the current line without clearing the
+screen.
+.TP
+.B redraw\-current\-line
+Refresh the current line.
+.PD
+.SS Commands for Manipulating the History
+.PP
+.PD 0
+.TP
+.B accept\-line (Newline, Return)
+Accept the line regardless of where the cursor is.
+If this line is
+non-empty, it may be added to the history list for future recall with
+\fBadd_history()\fP.
+If the line is a modified history line, the history line is restored to its original state.
+.TP
+.B previous\-history (C\-p)
+Fetch the previous command from the history list, moving back in
+the list.
+.TP
+.B next\-history (C\-n)
+Fetch the next command from the history list, moving forward in the
+list.
+.TP
+.B beginning\-of\-history (M\-<)
+Move to the first line in the history.
+.TP
+.B end\-of\-history (M\->)
+Move to the end of the input history, i.e., the line currently being
+entered.
+.TP
+.B reverse\-search\-history (C\-r)
+Search backward starting at the current line and moving `up' through
+the history as necessary.  This is an incremental search.
+.TP
+.B forward\-search\-history (C\-s)
+Search forward starting at the current line and moving `down' through
+the history as necessary.  This is an incremental search.
+.TP
+.B non\-incremental\-reverse\-search\-history (M\-p)
+Search backward through the history starting at the current line
+using a non-incremental search for a string supplied by the user.
+.TP
+.B non\-incremental\-forward\-search\-history (M\-n)
+Search forward through the history using a non-incremental search
+for a string supplied by the user.
+.TP
+.B history\-search\-forward
+Search forward through the history for the string of characters
+between the start of the current line and the current cursor
+position (the \fIpoint\fP).
+This is a non-incremental search.
+.TP
+.B history\-search\-backward
+Search backward through the history for the string of characters
+between the start of the current line and the point.
+This is a non-incremental search.
+.TP
+.B yank\-nth\-arg (M\-C\-y)
+Insert the first argument to the previous command (usually
+the second word on the previous line) at point.
+With an argument
+.IR n ,
+insert the \fIn\fPth word from the previous command (the words
+in the previous command begin with word 0).  A negative argument
+inserts the \fIn\fPth word from the end of the previous command.
+Once the argument \fIn\fP is computed, the argument is extracted
+as if the "!\fIn\fP" history expansion had been specified.
+.TP
+.B
+yank\-last\-arg (M\-.\^, M\-_\^)
+Insert the last argument to the previous command (the last word of
+the previous history entry).  With an argument,
+behave exactly like \fByank\-nth\-arg\fP.
+Successive calls to \fByank\-last\-arg\fP move back through the history
+list, inserting the last argument of each line in turn.
+The history expansion facilities are used to extract the last argument,
+as if the "!$" history expansion had been specified.
+.PD
+.SS Commands for Changing Text
+.PP
+.PD 0
+.TP
+.B delete\-char (C\-d)
+Delete the character at point.  If point is at the
+beginning of the line, there are no characters in the line, and
+the last character typed was not bound to \fBdelete\-char\fP, then return
+.SM
+.BR EOF .
+.TP
+.B backward\-delete\-char (Rubout)
+Delete the character behind the cursor.  When given a numeric argument,
+save the deleted text on the kill ring.
+.TP
+.B forward\-backward\-delete\-char   
+Delete the character under the cursor, unless the cursor is at the
+end of the line, in which case the character behind the cursor is
+deleted.
+.TP
+.B quoted\-insert (C\-q, C\-v)
+Add the next character that you type to the line verbatim.  This is
+how to insert characters like \fBC\-q\fP, for example.
+.TP
+.B tab\-insert (M-TAB)
+Insert a tab character.
+.TP
+.B self\-insert (a,\ b,\ A,\ 1,\ !,\ ...)
+Insert the character typed.
+.TP
+.B transpose\-chars (C\-t)
+Drag the character before point forward over the character at point,
+moving point forward as well.
+If point is at the end of the line, then this transposes
+the two characters before point.
+Negative arguments have no effect.
+.TP
+.B transpose\-words (M\-t)
+Drag the word before point past the word after point,
+moving point over that word as well.
+If point is at the end of the line, this transposes
+the last two words on the line.
+.TP
+.B upcase\-word (M\-u)
+Uppercase the current (or following) word.  With a negative argument,
+uppercase the previous word, but do not move point.
+.TP
+.B downcase\-word (M\-l)
+Lowercase the current (or following) word.  With a negative argument,
+lowercase the previous word, but do not move point.
+.TP
+.B capitalize\-word (M\-c)
+Capitalize the current (or following) word.  With a negative argument,
+capitalize the previous word, but do not move point.
+.TP
+.B overwrite\-mode
+Toggle overwrite mode.  With an explicit positive numeric argument,
+switches to overwrite mode.  With an explicit non-positive numeric
+argument, switches to insert mode.  This command affects only
+\fBemacs\fP mode; \fBvi\fP mode does overwrite differently.
+Each call to \fIreadline()\fP starts in insert mode.
+In overwrite mode, characters bound to \fBself\-insert\fP replace   
+the text at point rather than pushing the text to the right.
+Characters bound to \fBbackward\-delete\-char\fP replace the character
+before point with a space.  By default, this command is unbound.
+.PD
+.SS Killing and Yanking
+.PP
+.PD 0
+.TP
+.B kill\-line (C\-k)
+Kill the text from point to the end of the line.
+.TP
+.B backward\-kill\-line (C\-x Rubout)
+Kill backward to the beginning of the line.
+.TP
+.B unix\-line\-discard (C\-u)
+Kill backward from point to the beginning of the line.
+The killed text is saved on the kill-ring.
+.\" There is no real difference between this and backward-kill-line
+.TP
+.B kill\-whole\-line
+Kill all characters on the current line, no matter where point is.
+.TP
+.B kill\-word  (M\-d)
+Kill from point the end of the current word, or if between
+words, to the end of the next word.  Word boundaries are the same as
+those used by \fBforward\-word\fP.
+.TP
+.B backward\-kill\-word (M\-Rubout)
+Kill the word behind point.
+Word boundaries are the same as those used by \fBbackward\-word\fP.
+.TP
+.B unix\-word\-rubout (C\-w)
+Kill the word behind point, using white space as a word boundary.
+The killed text is saved on the kill-ring.
+.TP
+.B unix\-filename\-rubout
+Kill the word behind point, using white space and the slash character
+as the word boundaries.
+The killed text is saved on the kill-ring.
+.TP
+.B delete\-horizontal\-space (M\-\e)
+Delete all spaces and tabs around point.
+.TP
+.B kill\-region
+Kill the text between the point and \fImark\fP (saved cursor position).
+This text is referred to as the \fIregion\fP.
+.TP
+.B copy\-region\-as\-kill
+Copy the text in the region to the kill buffer.
+.TP
+.B copy\-backward\-word
+Copy the word before point to the kill buffer.
+The word boundaries are the same as \fBbackward\-word\fP.
+.TP
+.B copy\-forward\-word
+Copy the word following point to the kill buffer.
+The word boundaries are the same as \fBforward\-word\fP.
+.TP
+.B yank (C\-y)
+Yank the top of the kill ring into the buffer at point.
+.TP
+.B yank\-pop (M\-y)
+Rotate the kill ring, and yank the new top.  Only works following
+.B yank
+or
+.BR yank\-pop .
+.PD
+.SS Numeric Arguments
+.PP
+.PD 0
+.TP
+.B digit\-argument (M\-0, M\-1, ..., M\-\-)
+Add this digit to the argument already accumulating, or start a new
+argument.  M\-\- starts a negative argument.
+.TP
+.B universal\-argument
+This is another way to specify an argument.
+If this command is followed by one or more digits, optionally with a
+leading minus sign, those digits define the argument.
+If the command is followed by digits, executing
+.B universal\-argument
+again ends the numeric argument, but is otherwise ignored.
+As a special case, if this command is immediately followed by a
+character that is neither a digit or minus sign, the argument count
+for the next command is multiplied by four.
+The argument count is initially one, so executing this function the
+first time makes the argument count four, a second time makes the
+argument count sixteen, and so on.
+.PD
+.SS Completing
+.PP
+.PD 0
+.TP
+.B complete (TAB)
+Attempt to perform completion on the text before point.
+The actual completion performed is application-specific.
+.BR Bash ,
+for instance, attempts completion treating the text as a variable
+(if the text begins with \fB$\fP), username (if the text begins with
+\fB~\fP), hostname (if the text begins with \fB@\fP), or
+command (including aliases and functions) in turn.  If none
+of these produces a match, filename completion is attempted.
+.BR Gdb ,
+on the other hand,
+allows completion of program functions and variables, and
+only attempts filename completion under certain circumstances.
+.TP
+.B possible\-completions (M\-?)
+List the possible completions of the text before point.
+.TP
+.B insert\-completions (M\-*)
+Insert all completions of the text before point
+that would have been generated by
+\fBpossible\-completions\fP.
+.TP
+.B menu\-complete
+Similar to \fBcomplete\fP, but replaces the word to be completed
+with a single match from the list of possible completions.
+Repeated execution of \fBmenu\-complete\fP steps through the list
+of possible completions, inserting each match in turn.
+At the end of the list of completions, the bell is rung
+(subject to the setting of \fBbell\-style\fP)
+and the original text is restored.
+An argument of \fIn\fP moves \fIn\fP positions forward in the list
+of matches; a negative argument may be used to move backward 
+through the list.
+This command is intended to be bound to \fBTAB\fP, but is unbound
+by default.
+.TP
+.B menu\-complete-\backward
+Identical to \fBmenu\-complete\fP, but moves backward through the list
+of possible completions, as if \fBmenu\-complete\fP had been given a
+negative argument.  This command is unbound by default.
+.TP
+.B delete\-char\-or\-list
+Deletes the character under the cursor if not at the beginning or
+end of the line (like \fBdelete-char\fP).
+If at the end of the line, behaves identically to
+\fBpossible-completions\fP.
+.PD
+.SS Keyboard Macros
+.PP
+.PD 0
+.TP
+.B start\-kbd\-macro (C\-x (\^)
+Begin saving the characters typed into the current keyboard macro.
+.TP
+.B end\-kbd\-macro (C\-x )\^)
+Stop saving the characters typed into the current keyboard macro
+and store the definition.
+.TP
+.B call\-last\-kbd\-macro (C\-x e)
+Re-execute the last keyboard macro defined, by making the characters
+in the macro appear as if typed at the keyboard.
+.PD
+.SS Miscellaneous
+.PP
+.PD 0
+.TP
+.B re\-read\-init\-file (C\-x C\-r)
+Read in the contents of the \fIinputrc\fP file, and incorporate
+any bindings or variable assignments found there.
+.TP
+.B abort (C\-g)
+Abort the current editing command and
+ring the terminal's bell (subject to the setting of
+.BR bell\-style ).
+.TP
+.B do\-uppercase\-version (M\-a, M\-b, M\-\fIx\fP, ...)
+If the metafied character \fIx\fP is lowercase, run the command
+that is bound to the corresponding uppercase character.
+.TP
+.B prefix\-meta (ESC)
+Metafy the next character typed.
+.SM
+.B ESC
+.B f
+is equivalent to
+.BR Meta\-f .
+.TP
+.B undo (C\-_, C\-x C\-u)
+Incremental undo, separately remembered for each line.
+.TP
+.B revert\-line (M\-r)
+Undo all changes made to this line.  This is like executing the
+.B undo
+command enough times to return the line to its initial state.
+.TP
+.B tilde\-expand (M\-&)
+Perform tilde expansion on the current word.
+.TP
+.B set\-mark (C\-@, M\-<space>)
+Set the mark to the point.  If a
+numeric argument is supplied, the mark is set to that position.
+.TP
+.B exchange\-point\-and\-mark (C\-x C\-x)
+Swap the point with the mark.  The current cursor position is set to
+the saved position, and the old cursor position is saved as the mark.
+.TP
+.B character\-search (C\-])
+A character is read and point is moved to the next occurrence of that
+character.  A negative count searches for previous occurrences.
+.TP
+.B character\-search\-backward (M\-C\-])
+A character is read and point is moved to the previous occurrence of that
+character.  A negative count searches for subsequent occurrences.
+.TP
+.B skip\-csi\-sequence ()
+Read enough characters to consume a multi-key sequence such as those
+defined for keys like Home and End.  Such sequences begin with a
+Control Sequence Indicator (CSI), usually ESC\-[.  If this sequence is
+bound to "\e[", keys producing such sequences will have no effect
+unless explicitly bound to a readline command, instead of inserting
+stray characters into the editing buffer.  This is unbound by default,
+but usually bound to ESC\-[.
+.TP
+.B insert\-comment (M\-#)
+Without a numeric argument, the value of the readline
+.B comment\-begin
+variable is inserted at the beginning of the current line.
+If a numeric argument is supplied, this command acts as a toggle:  if
+the characters at the beginning of the line do not match the value   
+of \fBcomment\-begin\fP, the value is inserted, otherwise             
+the characters in \fBcomment-begin\fP are deleted from the beginning of
+the line.
+In either case, the line is accepted as if a newline had been typed.
+The default value of
+.B comment\-begin
+makes the current line a shell comment.
+If a numeric argument causes the comment character to be removed, the line
+will be executed by the shell.
+.TP
+.B dump\-functions
+Print all of the functions and their key bindings to the
+readline output stream.  If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an \fIinputrc\fP file.
+.TP
+.B dump\-variables
+Print all of the settable variables and their values to the
+readline output stream.  If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an \fIinputrc\fP file.
+.TP
+.B dump\-macros
+Print all of the readline key sequences bound to macros and the
+strings they output.  If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an \fIinputrc\fP file.
+.TP
+.B emacs\-editing\-mode (C\-e)
+When in
+.B vi
+command mode, this causes a switch to
+.B emacs
+editing mode.
+.TP
+.B vi\-editing\-mode (M\-C\-j)
+When in
+.B emacs
+editing mode, this causes a switch to
+.B vi
+editing mode.
+.PD
+.SH DEFAULT KEY BINDINGS
+.LP
+The following is a list of the default emacs and vi bindings.
+Characters with the eighth bit set are written as M\-<character>, and
+are referred to as
+.I metafied
+characters.
+The printable ASCII characters not mentioned in the list of emacs
+standard bindings are bound to the
+.B self\-insert
+function, which just inserts the given character into the input line.
+In vi insertion mode, all characters not specifically mentioned are
+bound to
+.BR self\-insert .
+Characters assigned to signal generation by
+.IR stty (1)
+or the terminal driver, such as C-Z or C-C,
+retain that function.
+Upper and lower case metafied characters are bound to the same function in
+the emacs mode meta keymap.
+The remaining characters are unbound, which causes readline
+to ring the bell (subject to the setting of the
+.B bell\-style
+variable).
+.SS Emacs Mode
+.RS +.6i
+.nf
+.ta 2.5i
+.sp
+Emacs Standard bindings
+.sp
+"C-@"  set-mark
+"C-A"  beginning-of-line
+"C-B"  backward-char
+"C-D"  delete-char
+"C-E"  end-of-line
+"C-F"  forward-char
+"C-G"  abort
+"C-H"  backward-delete-char
+"C-I"  complete
+"C-J"  accept-line
+"C-K"  kill-line
+"C-L"  clear-screen
+"C-M"  accept-line
+"C-N"  next-history
+"C-P"  previous-history
+"C-Q"  quoted-insert
+"C-R"  reverse-search-history
+"C-S"  forward-search-history
+"C-T"  transpose-chars
+"C-U"  unix-line-discard
+"C-V"  quoted-insert
+"C-W"  unix-word-rubout
+"C-Y"  yank
+"C-]"  character-search
+"C-_"  undo
+"\^ " to "/"  self-insert
+"0"  to "9"  self-insert
+":"  to "~"  self-insert
+"C-?"  backward-delete-char
+.PP
+Emacs Meta bindings
+.sp
+"M-C-G"  abort
+"M-C-H"  backward-kill-word
+"M-C-I"  tab-insert
+"M-C-J"  vi-editing-mode
+"M-C-M"  vi-editing-mode
+"M-C-R"  revert-line
+"M-C-Y"  yank-nth-arg
+"M-C-["  complete
+"M-C-]"  character-search-backward
+"M-space"  set-mark
+"M-#"  insert-comment
+"M-&"  tilde-expand
+"M-*"  insert-completions
+"M--"  digit-argument
+"M-."  yank-last-arg
+"M-0"  digit-argument
+"M-1"  digit-argument
+"M-2"  digit-argument
+"M-3"  digit-argument
+"M-4"  digit-argument
+"M-5"  digit-argument
+"M-6"  digit-argument
+"M-7"  digit-argument
+"M-8"  digit-argument
+"M-9"  digit-argument
+"M-<"  beginning-of-history
+"M-="  possible-completions
+"M->"  end-of-history
+"M-?"  possible-completions
+"M-B"  backward-word
+"M-C"  capitalize-word
+"M-D"  kill-word
+"M-F"  forward-word
+"M-L"  downcase-word
+"M-N"  non-incremental-forward-search-history
+"M-P"  non-incremental-reverse-search-history
+"M-R"  revert-line
+"M-T"  transpose-words
+"M-U"  upcase-word
+"M-Y"  yank-pop
+"M-\e"  delete-horizontal-space
+"M-~"  tilde-expand
+"M-C-?"  backward-kill-word
+"M-_"  yank-last-arg
+.PP
+Emacs Control-X bindings
+.sp
+"C-XC-G"  abort
+"C-XC-R"  re-read-init-file
+"C-XC-U"  undo
+"C-XC-X"  exchange-point-and-mark
+"C-X("  start-kbd-macro
+"C-X)"  end-kbd-macro
+"C-XE"  call-last-kbd-macro
+"C-XC-?"  backward-kill-line
+.sp
+.RE
+.SS VI Mode bindings
+.RS +.6i
+.nf
+.ta 2.5i
+.sp
+.PP
+VI Insert Mode functions
+.sp
+"C-D"  vi-eof-maybe
+"C-H"  backward-delete-char
+"C-I"  complete
+"C-J"  accept-line
+"C-M"  accept-line
+"C-R"  reverse-search-history
+"C-S"  forward-search-history
+"C-T"  transpose-chars
+"C-U"  unix-line-discard
+"C-V"  quoted-insert
+"C-W"  unix-word-rubout
+"C-Y"  yank
+"C-["  vi-movement-mode
+"C-_"  undo
+"\^ " to "~"  self-insert
+"C-?"  backward-delete-char
+.PP
+VI Command Mode functions
+.sp
+"C-D"  vi-eof-maybe
+"C-E"  emacs-editing-mode
+"C-G"  abort
+"C-H"  backward-char
+"C-J"  accept-line
+"C-K"  kill-line
+"C-L"  clear-screen
+"C-M"  accept-line
+"C-N"  next-history
+"C-P"  previous-history
+"C-Q"  quoted-insert
+"C-R"  reverse-search-history
+"C-S"  forward-search-history
+"C-T"  transpose-chars
+"C-U"  unix-line-discard
+"C-V"  quoted-insert
+"C-W"  unix-word-rubout
+"C-Y"  yank
+"C-_"  vi-undo
+"\^ "  forward-char
+"#"  insert-comment
+"$"  end-of-line
+"%"  vi-match
+"&"  vi-tilde-expand
+"*"  vi-complete
+"+"  next-history
+","  vi-char-search
+"-"  previous-history
+"."  vi-redo
+"/"  vi-search
+"0"  beginning-of-line
+"1" to "9"  vi-arg-digit
+";"  vi-char-search
+"="  vi-complete
+"?"  vi-search
+"A"  vi-append-eol
+"B"  vi-prev-word
+"C"  vi-change-to
+"D"  vi-delete-to
+"E"  vi-end-word
+"F"  vi-char-search
+"G"  vi-fetch-history
+"I"  vi-insert-beg
+"N"  vi-search-again
+"P"  vi-put
+"R"  vi-replace
+"S"  vi-subst
+"T"  vi-char-search
+"U"  revert-line
+"W"  vi-next-word
+"X"  backward-delete-char
+"Y"  vi-yank-to
+"\e"  vi-complete
+"^"  vi-first-print
+"_"  vi-yank-arg
+"`"  vi-goto-mark
+"a"  vi-append-mode
+"b"  vi-prev-word
+"c"  vi-change-to
+"d"  vi-delete-to
+"e"  vi-end-word
+"f"  vi-char-search
+"h"  backward-char
+"i"  vi-insertion-mode
+"j"  next-history
+"k"  prev-history
+"l"  forward-char
+"m"  vi-set-mark
+"n"  vi-search-again
+"p"  vi-put
+"r"  vi-change-char
+"s"  vi-subst
+"t"  vi-char-search
+"u"  vi-undo
+"w"  vi-next-word
+"x"  vi-delete
+"y"  vi-yank-to
+"|"  vi-column
+"~"  vi-change-case
+.RE
+.SH "SEE ALSO"
+.PD 0
+.TP
+\fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey
+.TP
+\fIThe Gnu History Library\fP, Brian Fox and Chet Ramey
+.TP
+\fIbash\fP(1)
+.PD
+.SH FILES
+.PD 0
+.TP
+.FN ~/.inputrc
+Individual \fBreadline\fP initialization file
+.PD
+.SH AUTHORS
+Brian Fox, Free Software Foundation
+.br
+bfox@gnu.org
+.PP
+Chet Ramey, Case Western Reserve University
+.br
+chet@ins.CWRU.Edu
+.SH BUG REPORTS
+If you find a bug in
+.B readline,
+you should report it.  But first, you should
+make sure that it really is a bug, and that it appears in the latest
+version of the
+.B readline
+library that you have.
+.PP
+Once you have determined that a bug actually exists, mail a
+bug report to \fIbug\-readline\fP@\fIgnu.org\fP.
+If you have a fix, you are welcome to mail that
+as well!  Suggestions and `philosophical' bug reports may be mailed
+to \fPbug-readline\fP@\fIgnu.org\fP or posted to the Usenet
+newsgroup
+.BR gnu.bash.bug .
+.PP
+Comments and bug reports concerning
+this manual page should be directed to
+.IR chet@ins.CWRU.Edu .
+.SH BUGS
+.PP
+It's too big and too slow.
index 905f7696610830ce2a7da752789637328dea6277..6d00d321f3c12f574fec2367945ef6aed811fa33 100644 (file)
@@ -9,7 +9,7 @@ use these features.  There is a document entitled "readline.texinfo"
 which contains both end-user and programmer documentation for the
 GNU Readline Library.
 
-Copyright (C) 1988--2009 Free Software Foundation, Inc.
+Copyright (C) 1988--2010 Free Software Foundation, Inc.
 
 Authored by Brian Fox and Chet Ramey.
 
@@ -570,7 +570,8 @@ The default is @samp{off}.
 @vindex match-hidden-files
 This variable, when set to @samp{on}, causes Readline to match files whose
 names begin with a @samp{.} (hidden files) when performing filename
-completion, unless the leading @samp{.} is
+completion.
+If set to @samp{off}, the leading @samp{.} must be
 supplied by the user in the filename to be completed.
 This variable is @samp{on} by default.
 
@@ -1579,7 +1580,7 @@ editing mode.
 While the Readline library does not have a full set of @code{vi}
 editing functions, it does contain enough to allow simple editing
 of the line.  The Readline @code{vi} mode behaves as specified in
-the @sc{posix} 1003.2 standard.
+the @sc{posix} standard.
 
 @ifset BashFeatures
 In order to switch interactively between @code{emacs} and @code{vi}
index f49a3459ac8f2153b4fccb0a2e5888d35c9ca421..f2fb38638f1997b7afed52343c1d79799127faee 100644 (file)
@@ -9,7 +9,7 @@ use these features.  There is a document entitled "readline.texinfo"
 which contains both end-user and programmer documentation for the
 GNU Readline Library.
 
-Copyright (C) 1988--2009 Free Software Foundation, Inc.
+Copyright (C) 1988--2010 Free Software Foundation, Inc.
 
 Authored by Brian Fox and Chet Ramey.
 
@@ -570,7 +570,8 @@ The default is @samp{off}.
 @vindex match-hidden-files
 This variable, when set to @samp{on}, causes Readline to match files whose
 names begin with a @samp{.} (hidden files) when performing filename
-completion, unless the leading @samp{.} is
+completion.
+If set to @samp{off}, the leading @samp{.} must be
 supplied by the user in the filename to be completed.
 This variable is @samp{on} by default.
 
@@ -1733,7 +1734,7 @@ exit status of 124.  If a shell function returns 124, and changes
 the compspec associated with the command on which completion is being
 attempted (supplied as the first argument when the function is executed),
 programmable completion restarts from the beginning, with an
-attempt to find a compspec for that command.  This allows a set of
+attempt to find a new compspec for that command.  This allows a set of
 completions to be built dynamically as completion is attempted, rather than
 being loaded all at once.
 
index 823b3babbdc6f7d26097ab59474e69624c930bf0..51469e3e4f1de809437d231ab8aba7fd3efbc1b3 100644 (file)
@@ -1,10 +1,10 @@
 @ignore
-Copyright (C) 1988-2009 Free Software Foundation, Inc. 
+Copyright (C) 1988-2010 Free Software Foundation, Inc. 
 @end ignore
 
 @set EDITION 6.1
 @set VERSION 6.1
-@set UPDATED 9 October 2009
-@set UPDATED-MONTH October 2009
+@set UPDATED April 17 2010
+@set UPDATED-MONTH April 2010
 
-@set LASTCHANGE Fri Oct  9 12:57:58 EDT 2009
+@set LASTCHANGE Sat Apr 17 23:45:29 EDT 2010
diff --git a/lib/readline/doc/version.texi~ b/lib/readline/doc/version.texi~
new file mode 100644 (file)
index 0000000..51469e3
--- /dev/null
@@ -0,0 +1,10 @@
+@ignore
+Copyright (C) 1988-2010 Free Software Foundation, Inc. 
+@end ignore
+
+@set EDITION 6.1
+@set VERSION 6.1
+@set UPDATED April 17 2010
+@set UPDATED-MONTH April 2010
+
+@set LASTCHANGE Sat Apr 17 23:45:29 EDT 2010
index b5876da9b40fd153e731f38f4617df8ddbee56c7..544b0590f6684f25150e1bf33e3c7298c831f96d 100644 (file)
@@ -427,17 +427,19 @@ rl_read_key ()
       /* If the user has an event function, then call it periodically. */
       if (rl_event_hook)
        {
-         while (rl_event_hook && rl_get_char (&c) == 0)
+         while (rl_event_hook)
            {
-             (*rl_event_hook) ();
-             RL_CHECK_SIGNALS ();
-             if (rl_done)              /* XXX - experimental */
-               return ('\n');
              if (rl_gather_tyi () < 0) /* XXX - EIO */
                {
                  rl_done = 1;
                  return ('\n');
                }
+             RL_CHECK_SIGNALS ();
+             if (rl_get_char (&c) != 0)
+               break;
+             if (rl_done)              /* XXX - experimental */
+               return ('\n');
+             (*rl_event_hook) ();
            }
        }
       else
diff --git a/parse.y b/parse.y
index dd311875876c32b8146905e975d260544f008b13..857873231ffe482dabecfebede2441fe8e7a446d 100644 (file)
--- a/parse.y
+++ b/parse.y
@@ -250,6 +250,9 @@ int extended_quote = 1;
 /* The number of lines read from input while creating the current command. */
 int current_command_line_count;
 
+/* The number of lines in a command saved while we run parse_and_execute */
+int saved_command_line_count;
+
 /* The token that currently denotes the end of parse. */
 int shell_eof_token;
 
index eea5d1fb90c39e3d3e37f5f999e9a173db49c5b0..dd311875876c32b8146905e975d260544f008b13 100644 (file)
--- a/parse.y~
+++ b/parse.y~
@@ -3234,7 +3234,8 @@ parse_matched_pair (qc, open, close, lenp, flags)
         decide what the op is.  We're really only concerned if it's % or
         #, so we can turn on a flag that says whether or not we should
         treat single quotes as special when inside a double-quoted
-        ${...} */
+        ${...}. This logic must agree with subst.c:extract_dollar_brace_string
+        since they share the same defines. */
       if (flags & P_DOLBRACE)
         {
          if MBTEST(dolbrace_state == DOLBRACE_PARAM && ch == '%' && retind > 0)
index 52d5e1ff2fccf1d2e143063cb35edcdf445b852d..c8a800034c37955c59ecada1550fd4284c65b7d0 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -1,14 +1,15 @@
 # Messages français pour GNU concernant bash.
-# Copyright © 2008 Free Software Foundation, Inc.
+# Copyright © 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bash package.
 # Michel Robitaille <robitail@IRO.UMontreal.CA>, 2004
-# Christophe Combelles <ccomb@free.fr>, 2008
+# Christophe Combelles <ccomb@free.fr>, 2008, 2009, 2010
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bash 3.2\n"
+"Project-Id-Version: bash-4.1\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-12-30 08:25-0500\n"
-"PO-Revision-Date: 2008-03-13 13:10+0100\n"
+"PO-Revision-Date: 2010-04-10 13:44+0100\n"
 "Last-Translator: Christophe Combelles <ccomb@free.fr>\n"
 "Language-Team: French <traduc@traduc.org>\n"
 "MIME-Version: 1.0\n"
@@ -23,12 +24,12 @@ msgstr "mauvais indice de tableau"
 #: arrayfunc.c:313 builtins/declare.def:481
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
-msgstr ""
+msgstr "%s : impossible de convertir un tableau indexé en associatif"
 
 #: arrayfunc.c:480
-#, fuzzy, c-format
+#, c-format
 msgid "%s: invalid associative array key"
-msgstr "%s : nom d'action non valable"
+msgstr "%s : clé non valable pour le tableau associatif"
 
 #: arrayfunc.c:482
 #, c-format
@@ -38,7 +39,7 @@ msgstr "%s : impossible d'assigner à un index non numérique"
 #: arrayfunc.c:518
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
-msgstr ""
+msgstr "%s : %s : l'assignation d'un tableau associatif doit se faire avec un indice"
 
 #: bashhist.c:383
 #, c-format
@@ -47,9 +48,7 @@ msgstr "%s : impossible de créer : %s"
 
 #: bashline.c:3457
 msgid "bash_execute_unix_command: cannot find keymap for command"
-msgstr ""
-"bash_execute_unix_command : impossible de trouver le mappage clavier pour la "
-"commande"
+msgstr "bash_execute_unix_command : impossible de trouver le mappage clavier pour la commande"
 
 #: bashline.c:3543
 #, c-format
@@ -67,13 +66,13 @@ msgid "%s: missing colon separator"
 msgstr "%s : virgule de séparation manquante"
 
 #: builtins/alias.def:132
-#, fuzzy, c-format
+#, c-format
 msgid "`%s': invalid alias name"
-msgstr "« %s » : nom du mappage clavier invalide"
+msgstr "« %s » : nom d'alias non valable"
 
 #: builtins/bind.def:120 builtins/bind.def:123
 msgid "line editing not enabled"
-msgstr ""
+msgstr "édition de ligne non activée"
 
 #: builtins/bind.def:206
 #, c-format
@@ -107,25 +106,29 @@ msgstr "%s peut être appelé via "
 
 #: builtins/break.def:77 builtins/break.def:117
 msgid "loop count"
-msgstr ""
+msgstr "nombre de boucles"
 
 #: builtins/break.def:137
 msgid "only meaningful in a `for', `while', or `until' loop"
 msgstr "ceci n'a un sens que dans une boucle « for », « while » ou « until »"
 
 #: builtins/caller.def:133
-#, fuzzy
 msgid ""
 "Returns the context of the current subroutine call.\n"
 "    \n"
 "    Without EXPR, returns "
-msgstr "Renvoie le contexte de l'appel de sous-routine actuel"
+msgstr ""
+"Renvoie le contexte de l'appel de sous-routine actuel.\n"
+"    \n"
+"    Sans EXPR, renvoie"
 
 #: builtins/caller.def:135
 msgid ""
 ".  With EXPR, returns\n"
 "    "
 msgstr ""
+".  Avec EXPR, renvoie\n"
+"    "
 
 #: builtins/caller.def:136
 msgid ""
@@ -135,6 +138,11 @@ msgid ""
 "    The value of EXPR indicates how many call frames to go back before the\n"
 "    current one; the top frame is frame 0."
 msgstr ""
+"; ces informations supplémentaires peuvent être utilisées pour\n"
+"    fournir une trace d'appels\n"
+"    \n"
+"    La valeur de EXPR indique le nombre de cadres d'appels duquel il faut revenir en arrière\n"
+"    avant le cadre actuel ; le cadre supérieur est le cadre 0."
 
 #: builtins/cd.def:215
 msgid "HOME not set"
@@ -147,17 +155,17 @@ msgstr "« OLDPWD » non défini"
 #: builtins/common.c:101
 #, c-format
 msgid "line %d: "
-msgstr ""
+msgstr "ligne %d : "
 
 #: builtins/common.c:139 error.c:261
-#, fuzzy, c-format
+#, c-format
 msgid "warning: "
-msgstr "%s : avertissement :"
+msgstr "avertissement :"
 
 #: builtins/common.c:153
-#, fuzzy, c-format
+#, c-format
 msgid "%s: usage: "
-msgstr "%s : avertissement :"
+msgstr "%s : utilisation :"
 
 #: builtins/common.c:166 test.c:827
 msgid "too many arguments"
@@ -194,14 +202,12 @@ msgid "`%s': not a valid identifier"
 msgstr "« %s » : identifiant non valable"
 
 #: builtins/common.c:238
-#, fuzzy
 msgid "invalid octal number"
-msgstr "Numéro de signal non valable"
+msgstr "Nombre octal non valable"
 
 #: builtins/common.c:240
-#, fuzzy
 msgid "invalid hex number"
-msgstr "nombre non valable"
+msgstr "nombre hexadécimal non valable"
 
 #: builtins/common.c:242 expr.c:1256
 msgid "invalid number"
@@ -215,9 +221,7 @@ msgstr "%s : indication de signal non valable"
 #: builtins/common.c:257
 #, c-format
 msgid "`%s': not a pid or valid job spec"
-msgstr ""
-"« %s » : ce n'est pas un n° de processus ou une spécification de tâche "
-"valable"
+msgstr "« %s » : ce n'est pas un n° de processus ou une spécification de tâche valable"
 
 #: builtins/common.c:264 error.c:454
 #, c-format
@@ -274,12 +278,12 @@ msgstr "erreur d'écriture : %s"
 #: builtins/common.c:329
 #, c-format
 msgid "error setting terminal attributes: %s"
-msgstr ""
+msgstr "erreur lors de la définition de l'attribut du terminal %s"
 
 #: builtins/common.c:331
 #, c-format
 msgid "error getting terminal attributes: %s"
-msgstr ""
+msgstr "erreur lors de la récupération de l'attribut du terminal : %s"
 
 #: builtins/common.c:563
 #, c-format
@@ -304,19 +308,15 @@ msgstr "%s : pas d'indication de complètement"
 
 #: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
-msgstr ""
-"avertissement : l'option « -F » peut fonctionner différemment de ce à quoi "
-"vous vous attendez"
+msgstr "avertissement : l'option « -F » peut fonctionner différemment de ce à quoi vous vous attendez"
 
 #: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
-msgstr ""
-"avertissement : l'option « -C » peut fonctionner différemment de ce à quoi "
-"vous vous attendez"
+msgstr "avertissement : l'option « -C » peut fonctionner différemment de ce à quoi vous vous attendez"
 
 #: builtins/complete.def:826
 msgid "not currently executing completion function"
-msgstr ""
+msgstr "fonction de completion actuellement non en cours d'exécution"
 
 #: builtins/declare.def:122
 msgid "can only be used in a function"
@@ -339,7 +339,7 @@ msgstr "%s : impossible de détruire des variables tableaux de cette façon"
 #: builtins/declare.def:475
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
-msgstr ""
+msgstr "%s : impossible de convertir un tableau indexé en tableau associatif"
 
 #: builtins/enable.def:137 builtins/enable.def:145
 msgid "dynamic loading not available"
@@ -395,7 +395,7 @@ msgstr "%s : impossible d'exécuter : %s"
 #: builtins/exit.def:65
 #, c-format
 msgid "logout\n"
-msgstr ""
+msgstr "déconnexion\n"
 
 #: builtins/exit.def:88
 msgid "not login shell: use `exit'"
@@ -407,9 +407,9 @@ msgid "There are stopped jobs.\n"
 msgstr "Il y a des tâches stoppées.\n"
 
 #: builtins/exit.def:122
-#, fuzzy, c-format
+#, c-format
 msgid "There are running jobs.\n"
-msgstr "Il y a des tâches stoppées.\n"
+msgstr "Il y a des tâches en cours d'exécution.\n"
 
 #: builtins/fc.def:262
 msgid "no command found"
@@ -426,7 +426,7 @@ msgstr "%s : impossible d'ouvrir le fichier temporaire : %s"
 
 #: builtins/fg_bg.def:149 builtins/jobs.def:282
 msgid "current"
-msgstr ""
+msgstr "courant"
 
 #: builtins/fg_bg.def:158
 #, c-format
@@ -453,24 +453,21 @@ msgid "%s: hash table empty\n"
 msgstr "%s : table de hachage vide\n"
 
 #: builtins/hash.def:244
-#, fuzzy, c-format
+#, c-format
 msgid "hits\tcommand\n"
-msgstr "dernière commande : %s\n"
+msgstr "touche la commande\n"
 
 #: builtins/help.def:130
-#, fuzzy, c-format
+#, c-format
 msgid "Shell commands matching keyword `"
 msgid_plural "Shell commands matching keywords `"
 msgstr[0] "Commandes du shell correspondant au mot-clé « "
-msgstr[1] "Commandes du shell correspondant au mot-clé « "
+msgstr[1] "Commandes du shell correspondant aux mots-clés « "
 
 #: builtins/help.def:168
 #, c-format
-msgid ""
-"no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
-msgstr ""
-"Aucune rubrique d'aide ne correspond à « %s ». Essayez « help help », « man -"
-"k %s » ou « info %s »."
+msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
+msgstr "Aucune rubrique d'aide ne correspond à « %s ». Essayez « help help », « man -k %s » ou « info %s »."
 
 #: builtins/help.def:185
 #, c-format
@@ -488,10 +485,8 @@ msgid ""
 "A star (*) next to a name means that the command is disabled.\n"
 "\n"
 msgstr ""
-"Ces commandes de shell sont définies de manière interne.Tapez « help » pour "
-"voir cette liste.\n"
-"Tapez « help nom » pour en savoir plus sur la fonction qui s'appelle « nom "
-"».\n"
+"Ces commandes de shell sont définies de manière interne.Tapez « help » pour voir cette liste.\n"
+"Tapez « help nom » pour en savoir plus sur la fonction qui s'appelle « nom ».\n"
 "Utilisez « info bash » pour en savoir plus sur le shell en général.\n"
 "Utilisez « man -k » ou « info » pour en savoir plus sur les commandes qui\n"
 "ne font pas partie de cette liste.\n"
@@ -513,9 +508,9 @@ msgid "%s: history expansion failed"
 msgstr "%s : l'expansion de l'historique a échoué"
 
 #: builtins/inlib.def:71
-#, fuzzy, c-format
+#, c-format
 msgid "%s: inlib failed"
-msgstr "%s : l'expansion de l'historique a échoué"
+msgstr "%s : « inlib » a échoué"
 
 #: builtins/jobs.def:109
 msgid "no other options allowed with `-x'"
@@ -524,8 +519,7 @@ msgstr "pas d'autre option permise avec « -x »"
 #: builtins/kill.def:200
 #, c-format
 msgid "%s: arguments must be process or job IDs"
-msgstr ""
-"%s : les arguments doivent être des identifiants de tâche ou de processus"
+msgstr "%s : les arguments doivent être des identifiants de tâche ou de processus"
 
 #: builtins/kill.def:263
 msgid "Unknown error"
@@ -536,9 +530,9 @@ msgid "expression expected"
 msgstr "une expression est attendue"
 
 #: builtins/mapfile.def:165
-#, fuzzy, c-format
+#, c-format
 msgid "%s: not an indexed array"
-msgstr "%s : n'est pas une variable tableau"
+msgstr "%s : n'est pas un tableau indexé"
 
 #: builtins/mapfile.def:249 builtins/read.def:279
 #, c-format
@@ -551,28 +545,27 @@ msgid "%d: invalid file descriptor: %s"
 msgstr "%d : descripteur de fichier non valable : %s"
 
 #: builtins/mapfile.def:266 builtins/mapfile.def:304
-#, fuzzy, c-format
+#, c-format
 msgid "%s: invalid line count"
-msgstr "%s : option non valable"
+msgstr "%s : nombre de lignes non valable"
 
 #: builtins/mapfile.def:277
-#, fuzzy, c-format
+#, c-format
 msgid "%s: invalid array origin"
-msgstr "%s : option non valable"
+msgstr "%s : origine de tableau non valable"
 
 #: builtins/mapfile.def:294
-#, fuzzy, c-format
+#, c-format
 msgid "%s: invalid callback quantum"
-msgstr "%s : nom d'action non valable"
+msgstr "%s : quantum de callback non valable"
 
 #: builtins/mapfile.def:326
-#, fuzzy
 msgid "empty array variable name"
-msgstr "%s : n'est pas une variable tableau"
+msgstr "nom de variable tableau vide"
 
 #: builtins/mapfile.def:347
 msgid "array variable support required"
-msgstr ""
+msgstr "nécessité de prise en charge des variables tableaux"
 
 #: builtins/printf.def:374
 #, c-format
@@ -585,9 +578,9 @@ msgid "`%c': invalid format character"
 msgstr "« %c » : caractère de format non permis"
 
 #: builtins/printf.def:578
-#, fuzzy, c-format
+#, c-format
 msgid "warning: %s: %s"
-msgstr "%s : avertissement :"
+msgstr "avertissement : %s: %s"
 
 #: builtins/printf.def:757
 msgid "missing hex digit for \\x"
@@ -603,15 +596,13 @@ msgstr "<aucun répertoire courant>"
 
 #: builtins/pushd.def:506
 msgid "directory stack empty"
-msgstr ""
+msgstr "pile de répertoire vide"
 
 #: builtins/pushd.def:508
-#, fuzzy
 msgid "directory stack index"
-msgstr "Débordement négatif de la pile de récursivité"
+msgstr "indice de pile de répertoire"
 
 #: builtins/pushd.def:683
-#, fuzzy
 msgid ""
 "Display the list of currently remembered directories.  Directories\n"
 "    find their way onto the list with the `pushd' command; you can get\n"
@@ -626,42 +617,32 @@ msgid ""
 "    \twith its position in the stack\n"
 "    \n"
 "    Arguments:\n"
-"      +N\tDisplays the Nth entry counting from the left of the list shown "
-"by\n"
+"      +N\tDisplays the Nth entry counting from the left of the list shown by\n"
 "    \tdirs when invoked without options, starting with zero.\n"
 "    \n"
-"      -N\tDisplays the Nth entry counting from the right of the list shown "
-"by\n"
+"      -N\tDisplays the Nth entry counting from the right of the list shown by\n"
 "\tdirs when invoked without options, starting with zero."
 msgstr ""
 "Affiche la liste des répertoires actuellement mémorisés. Les répertoires\n"
-"   sont insérés dans la liste avec la commande « pushd ». Vous pouvez "
-"remonter\n"
+"   sont insérés dans la liste avec la commande « pushd ». Vous pouvez remonter\n"
 "   dans la liste en enlevant des éléments avec la commande « popd ».\n"
 "    \n"
-"    L'option « -l » spécifie que « dirs » ne doit pas afficher des versions\n"
-"    raccourcies des répertoires relativement à votre répertoire personnel.\n"
-"    Cela signifie que « ~/bin » devrait être affiché comme « /homes/bfox/bin "
-"».\n"
-"    L'option « -v » permet à « dirs » d'afficher la pile des répertoires "
-"avec\n"
-"    un élément par ligne, en commençant la ligne par la position dans la "
-"pile.\n"
-"    L'option « -p » fait la même chose mais le numéro de position n'est pas\n"
-"    affiché. L'option « -c » efface la pile des répertoires en enlevant "
-"tous\n"
-"    les éléments.\n"
-"    \n"
-"    +N\t affiche le Nième élément en comptant de zéro depuis la gauche de "
-"la\n"
+"     Options :\n"
+"      -c\tefface la pile des répertoires en enlevant tous les éléments.\n"
+"      -l\tne pas afficher les versions raccourcies (avec ~) des répertoires\n"
+"    \trelativement à votre répertoire personnel\n"
+"      -p\tafficher la pile des répertoires avec un élément par ligne\n"
+"      -v\tafficher la pile des répertoires avec un élément par ligne\n"
+"    \tavec la position dans la pile\n"
+"    \n"
+"    Arguments :\n"
+"    +N\t affiche le Nième élément en comptant de zéro depuis la gauche de la\n"
 "    liste affichée par « dirs » lorsque celle-ci est appelée sans option.\n"
 "    \n"
-"    -N\t affiche le Nième élément en comptant de zéro depuis la droite de "
-"la\n"
+"    -N\t affiche le Nième élément en comptant de zéro depuis la droite de la\n"
 "    liste affichée par « dirs » lorsque celle-ci est appelée sans option."
 
 #: builtins/pushd.def:705
-#, fuzzy
 msgid ""
 "Adds a directory to the top of the directory stack, or rotates\n"
 "    the stack, making the new top of the stack the current working\n"
@@ -686,28 +667,27 @@ msgid ""
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
 "Ajoute un répertoire en haut de la pile des répertoires, ou permute\n"
-"    la pile, de façon que le répertoire en haut de la pile devienne\n"
+"    la pile de façon que le répertoire en haut de la pile devienne\n"
 "    le nouveau répertoire de travail. S'il n'y a pas d'argument, les deux\n"
 "    répertoires en haut de la pile sont échangés.\n"
 "    \n"
+"    Options :\n"
+"    -n\tne pas changer de répertoire de travail lorsque des répertoires\n"
+"    \tsont ajoutés à la pile, de façon que seule la pile soit manipulée\n"
+"    \n"
+"    Arguments :\n"
 "    +N\tPermute la pile de façon que le Nième répertoire se place en haut,\n"
-"    \ten comptant de zéro depuis la gauche de la liste fournie par « dirs "
-"».\n"
+"    \ten comptant de zéro depuis la gauche de la liste fournie par « dirs ».\n"
 "    \n"
 "    -N\tPermute la pile de façon que le Nième répertoire se place en haut,\n"
-"    \ten comptant de zéro depuis la droite de la liste fournie par « dirs "
-"».\n"
+"    \ten comptant de zéro depuis la droite de la liste fournie par « dirs ».\n"
 "    \n"
-"    -n\tne change pas de répertoire de travail lorsque des répertoires\n"
-"    \tsont ajoutés à la pile, de façon que seule la pile soit manipulée\n"
-"    \n"
-"    dir\tajoute le répertoire DIR en haut de la pile, et en fait le nouveau\n"
+"      dir\tajoute le répertoire DIR en haut de la pile, et en fait le nouveau\n"
 "    \trépertoire de travail.\n"
 "    \n"
 "    Vous pouvez voir la pile des répertoires avec la commande « dirs »."
 
 #: builtins/pushd.def:730
-#, fuzzy
 msgid ""
 "Removes entries from the directory stack.  With no arguments, removes\n"
 "    the top directory from the stack, and changes to the new top directory.\n"
@@ -731,16 +711,18 @@ msgstr ""
 "    d'argument, le répertoire en haut de la pile est enlevé,\n"
 "    et le nouveau sommet de la pile devient le répertoire de travail.\n"
 "    \n"
+"    Options :\n"
+"    -n\tne pas changer de répertoire de travail lorsque des répertoires\n"
+"    \tsont enlevés de la pile, de façon que seule la pile soit manipulée\n"
+"    \n"
+"    Arguments :\n"
 "    +N\tEnlève le Nième répertoire, en comptant de zéro depuis la gauche\n"
 "    \tde la liste fournie par « dirs ». Par exemple : « popd +0 »\n"
+"    \tenlève le premier répertoire, « popd +1 » le deuxième.    \n"
 "    \n"
-"enlève le premier répertoire, « popd +1 » le deuxième.    \n"
 "    -N\tEnlève le Nième répertoire, en comptant de zéro depuis la droite\n"
 "    \tde la liste fournie par « dirs ». Par exemple : « popd -0 »\n"
-"    \n"
-"enlève le dernier répertoire, « popd -1 » l'avant-dernier.    \n"
-"    -n\tne change pas de répertoire de travail lorsque des répertoires\n"
-"    \tsont enlevés de la pile, de façon que seule la pile soit manipulée\n"
+"    \tenlève le dernier répertoire, « popd -1 » l'avant-dernier.    \n"
 "    \n"
 "    Vous pouvez voir la pile des répertoires avec la commande « dirs »."
 
@@ -756,15 +738,11 @@ msgstr "Erreur de lecture : %d : %s"
 
 #: builtins/return.def:73
 msgid "can only `return' from a function or sourced script"
-msgstr ""
-"« return » n'est possible que depuis une fonction ou depuis un script "
-"exécuté par « source »"
+msgstr "« return » n'est possible que depuis une fonction ou depuis un script exécuté par « source »"
 
 #: builtins/set.def:768
 msgid "cannot simultaneously unset a function and a variable"
-msgstr ""
-"« unset » ne peut pas s'appliquer simultanément à une fonction et à une "
-"variable"
+msgstr "« unset » ne peut pas s'appliquer simultanément à une fonction et à une variable"
 
 #: builtins/set.def:805
 #, c-format
@@ -792,9 +770,7 @@ msgstr "nombre de « shift »"
 
 #: builtins/shopt.def:260
 msgid "cannot set and unset shell options simultaneously"
-msgstr ""
-"les options du shell ne peuvent pas être simultanément activées et "
-"désactivées"
+msgstr "les options du shell ne peuvent pas être simultanément activées et désactivées"
 
 #: builtins/shopt.def:325
 #, c-format
@@ -865,7 +841,7 @@ msgstr "%s : impossible d'obtenir la limite : %s"
 
 #: builtins/ulimit.def:453
 msgid "limit"
-msgstr ""
+msgstr "limite"
 
 #: builtins/ulimit.def:465 builtins/ulimit.def:765
 #, c-format
@@ -888,7 +864,7 @@ msgstr "« %c » : caractère de mode symbolique non valable"
 
 #: error.c:90 error.c:321 error.c:323 error.c:325
 msgid " line "
-msgstr ""
+msgstr " ligne"
 
 #: error.c:165
 #, c-format
@@ -923,8 +899,8 @@ msgstr "%s : variable sans liaison"
 
 #: eval.c:181
 #, c-format
-msgid "\atimed out waiting for input: auto-logout\n"
-msgstr "\aattente de données expirée : déconnexion automatique\n"
+msgid "\atimed out waiting for input: auto-logout\n"
+msgstr "\aattente de données expirée : déconnexion automatique\n"
 
 #: execute_cmd.c:497
 #, c-format
@@ -937,15 +913,13 @@ msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT : « %c » : caractère de format non valable"
 
 #: execute_cmd.c:2075
-#, fuzzy
 msgid "pipe error"
-msgstr "erreur d'écriture : %s"
+msgstr "erreur de tube"
 
 #: execute_cmd.c:4481
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
-msgstr ""
-"%s : restriction : « / » ne peut pas être spécifié dans un nom de commande"
+msgstr "%s : restriction : « / » ne peut pas être spécifié dans un nom de commande"
 
 #: execute_cmd.c:4572
 #, c-format
@@ -1013,7 +987,7 @@ msgstr "erreur de syntaxe : opérateur arithmétique non valable"
 #: expr.c:1202
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
-msgstr ""
+msgstr "%s%s%s : %s (le symbole erroné est \"%s\")"
 
 #: expr.c:1260
 msgid "invalid arithmetic base"
@@ -1024,25 +998,23 @@ msgid "value too great for base"
 msgstr "valeur trop grande pour la base"
 
 #: expr.c:1329
-#, fuzzy, c-format
+#, c-format
 msgid "%s: expression error\n"
-msgstr "%s : nombre entier attendu comme expression"
+msgstr "%s : erreur d'expression\n"
 
 #: general.c:61
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd : ne peut accéder aux répertoires parents"
 
 #: input.c:94 subst.c:4857
-#, fuzzy, c-format
+#, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "Impossible de réinitialiser le mode « nodelay » pour le fd %d"
 
 #: input.c:258
 #, c-format
 msgid "cannot allocate new file descriptor for bash input from fd %d"
-msgstr ""
-"impossible d'allouer un nouveau descripteur de fichier pour l'entrée de bash "
-"depuis le fd %d"
+msgstr "impossible d'allouer un nouveau descripteur de fichier pour l'entrée de bash depuis le fd %d"
 
 #: input.c:266
 #, c-format
@@ -1051,7 +1023,7 @@ msgstr "save_bash_input : le tampon existe déjà pour le nouveau fd %d"
 
 #: jobs.c:466
 msgid "start_pipeline: pgrp pipe"
-msgstr ""
+msgstr "start_pipeline : pgrp pipe"
 
 #: jobs.c:887
 #, c-format
@@ -1066,12 +1038,12 @@ msgstr "suppression de la tâche stoppée %d avec le groupe de processus %ld"
 #: jobs.c:1110
 #, c-format
 msgid "add_process: process %5ld (%s) in the_pipeline"
-msgstr ""
+msgstr "add_process : processus %5ld (%s) dans le_pipeline"
 
 #: jobs.c:1113
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
-msgstr ""
+msgstr "add_process : pid %5ld (%s) signalé toujours en vie"
 
 #: jobs.c:1401
 #, c-format
@@ -1081,53 +1053,53 @@ msgstr "describe_pid : %ld : n° de processus inexistant"
 #: jobs.c:1416
 #, c-format
 msgid "Signal %d"
-msgstr ""
+msgstr "Signal %d"
 
 #: jobs.c:1430 jobs.c:1455
 msgid "Done"
-msgstr ""
+msgstr "Fini"
 
 #: jobs.c:1435 siglist.c:123
 msgid "Stopped"
-msgstr ""
+msgstr "Stoppé"
 
 #: jobs.c:1439
 #, c-format
 msgid "Stopped(%s)"
-msgstr ""
+msgstr "Stoppé(%s)"
 
 #: jobs.c:1443
 msgid "Running"
-msgstr ""
+msgstr "En cours d'exécution"
 
 #: jobs.c:1457
 #, c-format
 msgid "Done(%d)"
-msgstr ""
+msgstr "Fini(%d)"
 
 #: jobs.c:1459
 #, c-format
 msgid "Exit %d"
-msgstr ""
+msgstr "Termine %d"
 
 #: jobs.c:1462
 msgid "Unknown status"
-msgstr ""
+msgstr "État inconnu"
 
 #: jobs.c:1549
 #, c-format
 msgid "(core dumped) "
-msgstr ""
+msgstr "(core dumped)"
 
 #: jobs.c:1568
 #, c-format
 msgid "  (wd: %s)"
-msgstr ""
+msgstr "  (wd : %s)"
 
 #: jobs.c:1776
 #, c-format
 msgid "child setpgid (%ld to %ld)"
-msgstr ""
+msgstr "fils setpgid (%ld à %ld)"
 
 #: jobs.c:2104 nojobs.c:585
 #, c-format
@@ -1156,39 +1128,39 @@ msgstr "%s : la tâche %d est déjà en arrière plan"
 
 #: jobs.c:3059
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
-msgstr ""
+msgstr "waitchld : activation de WNOHANG pour éviter un blocage définitif"
 
 #: jobs.c:3508
-#, fuzzy, c-format
+#, c-format
 msgid "%s: line %d: "
-msgstr "%s : avertissement :"
+msgstr "%s : ligne %d : "
 
 #: jobs.c:3522 nojobs.c:814
 #, c-format
 msgid " (core dumped)"
-msgstr ""
+msgstr " (core dumped)"
 
 #: jobs.c:3534 jobs.c:3547
 #, c-format
 msgid "(wd now: %s)\n"
-msgstr ""
+msgstr "(maintenant, wd : %s)\n"
 
 #: jobs.c:3579
 msgid "initialize_job_control: getpgrp failed"
-msgstr ""
+msgstr "initialize_job_control : getpgrp a échoué"
 
 #: jobs.c:3639
 msgid "initialize_job_control: line discipline"
-msgstr ""
+msgstr "initialize_job_control : discipline de ligne"
 
 #: jobs.c:3649
 msgid "initialize_job_control: setpgid"
-msgstr ""
+msgstr "initialize_job_control : setpgid"
 
 #: jobs.c:3677
 #, c-format
 msgid "cannot set terminal process group (%d)"
-msgstr ""
+msgstr "impossible de régler le groupe de processus du terminlal (%d)"
 
 #: jobs.c:3682
 msgid "no job control in this shell"
@@ -1209,9 +1181,8 @@ msgstr ""
 "malloc : %s:%d : assertion manquée\r\n"
 
 #: lib/malloc/malloc.c:313
-#, fuzzy
 msgid "unknown"
-msgstr "%s : hôte inconnu"
+msgstr "inconnu"
 
 #: lib/malloc/malloc.c:797
 msgid "malloc: block on free list clobbered"
@@ -1243,8 +1214,7 @@ msgstr "realloc : débordement négatif détecté ; « mh_nbytes » est hors pla
 
 #: lib/malloc/malloc.c:1022
 msgid "realloc: start and end chunk sizes differ"
-msgstr ""
-"realloc : les tailles de fragment au début et à la fin sont différentes"
+msgstr "realloc : les tailles de fragment au début et à la fin sont différentes"
 
 #: lib/malloc/table.c:177
 #, c-format
@@ -1287,22 +1257,22 @@ msgstr "opérations sur le réseau non prises en charge"
 #: locale.c:192
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
-msgstr ""
+msgstr "setlocale : LC_ALL : impossible de changer le paramètre de langue (%s)"
 
 #: locale.c:194
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
-msgstr ""
+msgstr "setlocale : LC_ALL :  impossible de changer le paramètre de langue (%s) : %s"
 
 #: locale.c:247
-#, fuzzy, c-format
+#, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
-msgstr "xrealloc : %s:%d : impossible d'allouer %lu octets"
+msgstr "setlocale : %s : impossible de changer le paramètre de langue (%s)"
 
 #: locale.c:249
-#, fuzzy, c-format
+#, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
-msgstr "xrealloc : %s:%d : impossible d'allouer %lu octets"
+msgstr "setlocale : %s : impossible de changer le paramètre de langue (%s) : %s"
 
 #: mailcheck.c:433
 msgid "You have mail in $_"
@@ -1338,7 +1308,7 @@ msgstr "make_here_document : le type d'instruction %d est incorrect"
 #: make_cmd.c:659
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
-msgstr ""
+msgstr "« here-document » à la ligne %d délimité par la fin du fichier (au lieu de « %s »)"
 
 #: make_cmd.c:756
 #, c-format
@@ -1348,21 +1318,16 @@ msgstr "make_redirection : l'instruction de redirection « %d » est hors plage"
 #: parse.y:3133 parse.y:3369
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
-msgstr ""
-"Caractère de fin de fichier (EOF) prématuré lors de la recherche du « %c » "
-"correspondant"
+msgstr "Caractère de fin de fichier (EOF) prématuré lors de la recherche du « %c » correspondant"
 
 #: parse.y:3951
 msgid "unexpected EOF while looking for `]]'"
-msgstr ""
-"Caractère de fin de fichier (EOF) prématuré lors de la recherche de « ]] »"
+msgstr "Caractère de fin de fichier (EOF) prématuré lors de la recherche de « ]] »"
 
 #: parse.y:3956
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
-msgstr ""
-"Erreur de syntaxe dans une expression conditionnelle : symbole « %s » "
-"inattendu"
+msgstr "Erreur de syntaxe dans une expression conditionnelle : symbole « %s » inattendu"
 
 #: parse.y:3960
 msgid "syntax error in conditional expression"
@@ -1444,9 +1409,7 @@ msgstr "Utilisez « %s » pour quitter le shell.\n"
 
 #: parse.y:5711
 msgid "unexpected EOF while looking for matching `)'"
-msgstr ""
-"Caractère de fin de fichier (EOF) prématuré lors de la recherche d'un « ) » "
-"correspondant"
+msgstr "Caractère de fin de fichier (EOF) prématuré lors de la recherche d'un « ) » correspondant"
 
 #: pcomplete.c:1030
 #, c-format
@@ -1464,18 +1427,18 @@ msgid "print_command: bad connector `%d'"
 msgstr "print_command : mauvais connecteur « %d »"
 
 #: print_cmd.c:363
-#, fuzzy, c-format
+#, c-format
 msgid "xtrace_set: %d: invalid file descriptor"
-msgstr "%d : descripteur de fichier non valable : %s"
+msgstr "xtrace_set : %d : descripteur de fichier non valable"
 
 #: print_cmd.c:368
 msgid "xtrace_set: NULL file pointer"
-msgstr ""
+msgstr "xtrace_set : pointeur de fichier NULL"
 
 #: print_cmd.c:372
 #, c-format
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
-msgstr ""
+msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
 #: print_cmd.c:1461
 #, c-format
@@ -1502,15 +1465,14 @@ msgid "%s: restricted: cannot redirect output"
 msgstr "%s : restreint : impossible de rediriger la sortie"
 
 #: redir.c:180
-#, fuzzy, c-format
+#, c-format
 msgid "cannot create temp file for here-document: %s"
-msgstr ""
-"impossible de créer un fichier temporaire pour le « here-document » : %s"
+msgstr "impossible de créer un fichier temporaire pour le « here-document » : %s"
 
 #: redir.c:184
-#, fuzzy, c-format
+#, c-format
 msgid "%s: cannot assign fd to variable"
-msgstr "%s : impossible d'affecter une liste à un élément de tableau"
+msgstr "%s : impossible d'affecter le descripteur de fichier à la variable"
 
 #: redir.c:544
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
@@ -1518,8 +1480,7 @@ msgstr "/dev/(tcp|udp)/host/port non pris en charge sans réseau"
 
 #: redir.c:1101
 msgid "redirection error: cannot duplicate fd"
-msgstr ""
-"Erreur de redirection : impossible de dupliquer le descripteur de fichier"
+msgstr "Erreur de redirection : impossible de dupliquer le descripteur de fichier"
 
 #: shell.c:332
 msgid "could not find /tmp, please create!"
@@ -1541,7 +1502,7 @@ msgstr "Je n'ai pas de nom !"
 #: shell.c:1793
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
-msgstr ""
+msgstr "GNU bash, version %s-(%s)\n"
 
 #: shell.c:1794
 #, c-format
@@ -1572,14 +1533,12 @@ msgstr "\t-%s ou -o option\n"
 #: shell.c:1822
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
-msgstr ""
-"Pour en savoir plus sur les options du shell, tapez « %s -c \"help set\" ».\n"
+msgstr "Pour en savoir plus sur les options du shell, tapez « %s -c \"help set\" ».\n"
 
 #: shell.c:1823
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
-msgstr ""
-"Pour en savoir plus sur les primitives du shell, tapez « %s -c help ».\n"
+msgstr "Pour en savoir plus sur les primitives du shell, tapez « %s -c help ».\n"
 
 #: shell.c:1824
 #, c-format
@@ -1593,174 +1552,172 @@ msgstr "sigprocmask : %d : operation non valable"
 
 #: siglist.c:48
 msgid "Bogus signal"
-msgstr ""
+msgstr "Signal falsifié"
 
 #: siglist.c:51
 msgid "Hangup"
-msgstr ""
+msgstr "Raccroche"
 
 #: siglist.c:55
 msgid "Interrupt"
-msgstr ""
+msgstr "Interrompt"
 
 #: siglist.c:59
 msgid "Quit"
-msgstr ""
+msgstr "Quitte"
 
 #: siglist.c:63
 msgid "Illegal instruction"
-msgstr ""
+msgstr "Instruction incorrecte"
 
 #: siglist.c:67
 msgid "BPT trace/trap"
-msgstr ""
+msgstr "trace/trap BPT"
 
 #: siglist.c:75
 msgid "ABORT instruction"
-msgstr ""
+msgstr "Instruction ABORT"
 
 #: siglist.c:79
 msgid "EMT instruction"
-msgstr ""
+msgstr "Instruction EMT"
 
 #: siglist.c:83
 msgid "Floating point exception"
-msgstr ""
+msgstr "Exception en virgule flottante"
 
 #: siglist.c:87
 msgid "Killed"
-msgstr ""
+msgstr "Tué"
 
 #: siglist.c:91
-#, fuzzy
 msgid "Bus error"
-msgstr "Erreur de syntaxe"
+msgstr "Erreur de bus"
 
 #: siglist.c:95
 msgid "Segmentation fault"
-msgstr ""
+msgstr "Erreur de segmentation"
 
 #: siglist.c:99
 msgid "Bad system call"
-msgstr ""
+msgstr "Mauvais appel système"
 
 #: siglist.c:103
 msgid "Broken pipe"
-msgstr ""
+msgstr "Tube brisé"
 
 #: siglist.c:107
 msgid "Alarm clock"
-msgstr ""
+msgstr "Horloge d'alarme"
 
 #: siglist.c:111
-#, fuzzy
 msgid "Terminated"
-msgstr "restreint"
+msgstr "Terminé"
 
 #: siglist.c:115
 msgid "Urgent IO condition"
-msgstr ""
+msgstr "Condition d'E/S urgente"
 
 #: siglist.c:119
 msgid "Stopped (signal)"
-msgstr ""
+msgstr "Stoppé (signal)"
 
 #: siglist.c:127
 msgid "Continue"
-msgstr ""
+msgstr "Continue"
 
 #: siglist.c:135
 msgid "Child death or stop"
-msgstr ""
+msgstr "Mort ou arrêt du fils"
 
 #: siglist.c:139
 msgid "Stopped (tty input)"
-msgstr ""
+msgstr "Stoppé (entrée tty)"
 
 #: siglist.c:143
 msgid "Stopped (tty output)"
-msgstr ""
+msgstr "Stoppé (sortie tty)"
 
 #: siglist.c:147
 msgid "I/O ready"
-msgstr ""
+msgstr "E/S prête"
 
 #: siglist.c:151
 msgid "CPU limit"
-msgstr ""
+msgstr "Limite CPU"
 
 #: siglist.c:155
 msgid "File limit"
-msgstr ""
+msgstr "Limite fichier"
 
 #: siglist.c:159
 msgid "Alarm (virtual)"
-msgstr ""
+msgstr "Alarme (virtual)"
 
 #: siglist.c:163
 msgid "Alarm (profile)"
-msgstr ""
+msgstr "Alarme (profile)"
 
 #: siglist.c:167
 msgid "Window changed"
-msgstr ""
+msgstr "Fenêtre changée"
 
 #: siglist.c:171
 msgid "Record lock"
-msgstr ""
+msgstr "Verrou d'enregistrement"
 
 #: siglist.c:175
 msgid "User signal 1"
-msgstr ""
+msgstr "Signal utilisateur 1"
 
 #: siglist.c:179
 msgid "User signal 2"
-msgstr ""
+msgstr "Signal utilisateur 2"
 
 #: siglist.c:183
 msgid "HFT input data pending"
-msgstr ""
+msgstr "Données d'entrée HFT en attente"
 
 #: siglist.c:187
 msgid "power failure imminent"
-msgstr ""
+msgstr "Coupure d'alimentation imminente"
 
 #: siglist.c:191
 msgid "system crash imminent"
-msgstr ""
+msgstr "Panne système imminente"
 
 #: siglist.c:195
 msgid "migrate process to another CPU"
-msgstr ""
+msgstr "Migration processus vers un autre CPU"
 
 #: siglist.c:199
 msgid "programming error"
-msgstr ""
+msgstr "Erreur de programmation"
 
 #: siglist.c:203
 msgid "HFT monitor mode granted"
-msgstr ""
+msgstr "Mode de surveillance HFT accordé"
 
 #: siglist.c:207
 msgid "HFT monitor mode retracted"
-msgstr ""
+msgstr "Mode de surveillance HFT rétracté"
 
 #: siglist.c:211
 msgid "HFT sound sequence has completed"
-msgstr ""
+msgstr "Séquence de son HFT terminée"
 
 #: siglist.c:215
 msgid "Information request"
-msgstr ""
+msgstr "Demande d'information"
 
 #: siglist.c:223
 msgid "Unknown Signal #"
-msgstr ""
+msgstr "N° de signal inconnu"
 
 #: siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
-msgstr ""
+msgstr "Signal n°%d inconnu"
 
 #: subst.c:1333 subst.c:1454
 #, c-format
@@ -1801,8 +1758,7 @@ msgstr "Impossible de fabriquer un tube pour une substitution de commande"
 
 #: subst.c:5097
 msgid "cannot make child for command substitution"
-msgstr ""
-"Impossible de fabriquer un processus fils pour une substitution de commande"
+msgstr "Impossible de fabriquer un processus fils pour une substitution de commande"
 
 #: subst.c:5114
 msgid "command_substitute: cannot duplicate pipe as fd 1"
@@ -1829,15 +1785,13 @@ msgid "$%s: cannot assign in this way"
 msgstr "$%s : affectation impossible de cette façon"
 
 #: subst.c:7374
-msgid ""
-"future versions of the shell will force evaluation as an arithmetic "
-"substitution"
-msgstr ""
+msgid "future versions of the shell will force evaluation as an arithmetic substitution"
+msgstr "Les versions futures du shell forceront l'évaluation comme une substitution arithmétique"
 
 #: subst.c:7839
-#, fuzzy, c-format
+#, c-format
 msgid "bad substitution: no closing \"`\" in %s"
-msgstr "Mauvaise substitution : pas de « %s » de fermeture dans %s"
+msgstr "Mauvais remplacement : pas de « ` » de fermeture dans %s"
 
 #: subst.c:8720
 #, c-format
@@ -1887,11 +1841,8 @@ msgstr "run_pending_traps : mauvaise valeur dans trap_list[%d] : %p"
 
 #: trap.c:331
 #, c-format
-msgid ""
-"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
-msgstr ""
-"run_pending_traps : le gestionnaire de signal est SIG_DFL, %d (%s) renvoyé à "
-"moi-même"
+msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
+msgstr "run_pending_traps : le gestionnaire de signal est SIG_DFL, %d (%s) renvoyé à moi-même"
 
 #: trap.c:380
 #, c-format
@@ -1910,20 +1861,16 @@ msgstr "niveau de shell trop élevé (%d), initialisation à 1"
 
 #: variables.c:1915
 msgid "make_local_variable: no function context at current scope"
-msgstr ""
-"make_local_variable : aucun contexte de fonction dans le champ d'application "
-"actuel"
+msgstr "make_local_variable : aucun contexte de fonction dans le champ d'application actuel"
 
 #: variables.c:3159
 msgid "all_local_variables: no function context at current scope"
-msgstr ""
-"all_local_variables : aucun contexte de fonction dans le champ d'application "
-"actuel"
+msgstr "all_local_variables : aucun contexte de fonction dans le champ d'application actuel"
 
 #: variables.c:3376
-#, fuzzy, c-format
+#, c-format
 msgid "%s has null exportstr"
-msgstr "%s : paramètre vide ou non défini"
+msgstr "%s a un « exportstr » vide"
 
 #: variables.c:3381 variables.c:3390
 #, c-format
@@ -1937,9 +1884,7 @@ msgstr "Pas de « = » dans « exportstr » pour %s"
 
 #: variables.c:3835
 msgid "pop_var_context: head of shell_variables not a function context"
-msgstr ""
-"pop_var_context : le début de « shell_variables » n'est pas un contexte de "
-"fonction"
+msgstr "pop_var_context : le début de « shell_variables » n'est pas un contexte de fonction"
 
 #: variables.c:3848
 msgid "pop_var_context: no global_variables context"
@@ -1947,416 +1892,384 @@ msgstr "pop_var_context : aucun contexte à « global_variables »"
 
 #: variables.c:3922
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
-msgstr ""
-"pop_scope : le début de « shell_variables » n'est pas un champ d'application "
-"temporaire d'environnement"
+msgstr "pop_scope : le début de « shell_variables » n'est pas un champ d'application temporaire d'environnement"
 
 #: variables.c:4678
-#, fuzzy, c-format
+#, c-format
 msgid "%s: %s: cannot open as FILE"
-msgstr "%s : impossible d'ouvrir : %s"
+msgstr "%s : %s : impossible d'ouvrir comme FILE"
 
 #: variables.c:4683
-#, fuzzy, c-format
+#, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
-msgstr "%d : descripteur de fichier non valable : %s"
+msgstr "%s : %s : valeur non valable pour un descripteur de fichier de trace"
 
 #: version.c:46
-#, fuzzy
 msgid "Copyright (C) 2009 Free Software Foundation, Inc."
-msgstr "Copyright (C) 2006 Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) 2009 Free Software Foundation, Inc."
 
 #: version.c:47
-msgid ""
-"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-"html>\n"
-msgstr ""
+msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
+msgstr "Licence GPLv3+ : GNU GPL version 3 ou ultérieure <http://gnu.org/licenses/gpl.html>\n"
 
 #: version.c:86 version2.c:83
 #, c-format
 msgid "GNU bash, version %s (%s)\n"
-msgstr ""
+msgstr "GNU bash, version %s (%s)\n"
 
 #: version.c:91 version2.c:88
 #, c-format
 msgid "This is free software; you are free to change and redistribute it.\n"
-msgstr ""
+msgstr "Ceci est un logiciel libre ; vous être libre de le modifier et de le redistribuer.\n"
 
 #: version.c:92 version2.c:89
 #, c-format
 msgid "There is NO WARRANTY, to the extent permitted by law.\n"
-msgstr ""
+msgstr "Aucune garantie n'est fournie, dans la mesure de ce que la loi autorise.\n"
 
 #: version2.c:86
-#, fuzzy, c-format
+#, c-format
 msgid "Copyright (C) 2009 Free Software Foundation, Inc.\n"
-msgstr "Copyright (C) 2006 Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) 2009 Free Software Foundation, Inc.\n"
 
 #: version2.c:87
 #, c-format
-msgid ""
-"License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl."
-"html>\n"
-msgstr ""
+msgid "License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>\n"
+msgstr "Licence GPLv2+ : GNU GPL version 2 ou ultérieure <http://gnu.org/licenses/gpl.html>\n"
 
 #: xmalloc.c:91
-#, fuzzy, c-format
+#, c-format
 msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)"
-msgstr "xmalloc : impossible d'allouer %lu octets (%lu octets alloués)"
+msgstr "%s : impossible d'allouer %lu octets (%lu octets alloués)"
 
 #: xmalloc.c:93
-#, fuzzy, c-format
+#, c-format
 msgid "%s: cannot allocate %lu bytes"
-msgstr "xmalloc : impossible d'allouer %lu octets"
+msgstr "%s : impossible d'allouer %lu octets"
 
 #: xmalloc.c:163
-#, fuzzy, c-format
+#, c-format
 msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)"
-msgstr "xmalloc : %s:%d : impossible d'allouer %lu octets (%lu octets alloués)"
+msgstr "%s : %s:%d : impossible d'allouer %lu octets (%lu octets alloués)"
 
 #: xmalloc.c:165
-#, fuzzy, c-format
+#, c-format
 msgid "%s: %s:%d: cannot allocate %lu bytes"
-msgstr "xmalloc : %s:%d : impossible d'allouer %lu octets"
+msgstr "%s : %s:%d : impossible d'allouer %lu octets"
 
 #: builtins.c:43
 msgid "alias [-p] [name[=value] ... ]"
-msgstr ""
+msgstr "alias [-p] [nom[=valeur] ... ]"
 
 #: builtins.c:47
 msgid "unalias [-a] name [name ...]"
-msgstr ""
+msgstr "unalias [-a] nom [nom ...]"
 
 #: builtins.c:51
-msgid ""
-"bind [-lpvsPVS] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-"
-"x keyseq:shell-command] [keyseq:readline-function or readline-command]"
-msgstr ""
+msgid "bind [-lpvsPVS] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]"
+msgstr "bind [-lpvsPVS] [-m keymap] [-f nomfichier] [-q nom] [-u nom] [-r seqtouche] [-x seqtouche:commande-shell] [seqtouche:fonction-readline ou commande-readline]"
 
 #: builtins.c:54
 msgid "break [n]"
-msgstr ""
+msgstr "break [n]"
 
 #: builtins.c:56
 msgid "continue [n]"
-msgstr ""
+msgstr "continue [n]"
 
 #: builtins.c:58
 msgid "builtin [shell-builtin [arg ...]]"
-msgstr ""
+msgstr "builtin [shell-builtin [arg ...]]"
 
 #: builtins.c:61
 msgid "caller [expr]"
-msgstr ""
+msgstr "caller [expr]"
 
 #: builtins.c:64
 msgid "cd [-L|-P] [dir]"
-msgstr ""
+msgstr "cd [-L|-P] [rép]"
 
 #: builtins.c:66
 msgid "pwd [-LP]"
-msgstr ""
+msgstr "pwd [-LP]"
 
 #: builtins.c:68
 msgid ":"
-msgstr ""
+msgstr ":"
 
 #: builtins.c:70
 msgid "true"
-msgstr ""
+msgstr "true"
 
 #: builtins.c:72
 msgid "false"
-msgstr ""
+msgstr "false"
 
 #: builtins.c:74
 msgid "command [-pVv] command [arg ...]"
-msgstr ""
+msgstr "command [-pVv] commande [arg ...]"
 
 #: builtins.c:76
 msgid "declare [-aAfFilrtux] [-p] [name[=value] ...]"
-msgstr ""
+msgstr "declare [-aAfFilrtux] [-p] [nom[=valeur] ...]"
 
 #: builtins.c:78
 msgid "typeset [-aAfFilrtux] [-p] name[=value] ..."
-msgstr ""
+msgstr "typeset [-aAfFilrtux] [-p] nom[=valeur] ..."
 
 #: builtins.c:80
 msgid "local [option] name[=value] ..."
-msgstr ""
+msgstr "local [option] nom[=valeur] ..."
 
 #: builtins.c:83
 msgid "echo [-neE] [arg ...]"
-msgstr ""
+msgstr "echo [-neE] [arg ...]"
 
 #: builtins.c:87
 msgid "echo [-n] [arg ...]"
-msgstr ""
+msgstr "echo [-n] [arg ...]"
 
 #: builtins.c:90
 msgid "enable [-a] [-dnps] [-f filename] [name ...]"
-msgstr ""
+msgstr "enable [-a] [-dnps] [-f nomfichier] [nom ...]"
 
 #: builtins.c:92
 msgid "eval [arg ...]"
-msgstr ""
+msgstr "eval [arg ...]"
 
 #: builtins.c:94
 msgid "getopts optstring name [arg]"
-msgstr ""
+msgstr "getopts chaineopts nom [arg]"
 
 #: builtins.c:96
 msgid "exec [-cl] [-a name] [command [arguments ...]] [redirection ...]"
-msgstr ""
+msgstr "exec [-cl] [-a nom] [commande [arguments ...]] [redirection ...]"
 
 #: builtins.c:98
 msgid "exit [n]"
-msgstr ""
+msgstr "exit [n]"
 
 #: builtins.c:100
 msgid "logout [n]"
-msgstr ""
+msgstr "logout [n]"
 
 #: builtins.c:103
 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]"
-msgstr ""
+msgstr "fc [-e ename] [-lnr] [premier] [dernier] ou fc -s [ancien=nouveau] [commande]"
 
 #: builtins.c:107
 msgid "fg [job_spec]"
-msgstr ""
+msgstr "fg [job_spec]"
 
 #: builtins.c:111
 msgid "bg [job_spec ...]"
-msgstr ""
+msgstr "bg [job_spec ...]"
 
 #: builtins.c:114
 msgid "hash [-lr] [-p pathname] [-dt] [name ...]"
-msgstr ""
+msgstr "hash [-lr] [-p nomchemin] [-dt] [nom ...]"
 
 #: builtins.c:117
 msgid "help [-dms] [pattern ...]"
-msgstr ""
+msgstr "help [-dms] [motif ...]"
 
 #: builtins.c:121
-msgid ""
-"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg "
-"[arg...]"
-msgstr ""
+msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]"
+msgstr "history [-c] [-d décalage] [n] ou history -anrw [nomfichier] ou history -ps arg [arg...]"
 
 #: builtins.c:125
 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]"
-msgstr ""
+msgstr "jobs [-lnprs] [jobspec ...] ou jobs -x commande [args]"
 
 #: builtins.c:129
 msgid "disown [-h] [-ar] [jobspec ...]"
-msgstr ""
+msgstr "disown [-h] [-ar] [jobspec ...]"
 
 #: builtins.c:132
-msgid ""
-"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l "
-"[sigspec]"
-msgstr ""
+msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]"
+msgstr "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... ou kill -l [sigspec]"
 
 #: builtins.c:134
 msgid "let arg [arg ...]"
-msgstr ""
+msgstr "let arg [arg ...]"
 
 #: builtins.c:136
-msgid ""
-"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p "
-"prompt] [-t timeout] [-u fd] [name ...]"
-msgstr ""
+msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]"
+msgstr "read [-ers] [-a tableau] [-d delim] [-i texte] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [nom ...]"
 
 #: builtins.c:138
 msgid "return [n]"
-msgstr ""
+msgstr "return [n]"
 
 #: builtins.c:140
 msgid "set [--abefhkmnptuvxBCHP] [-o option-name] [arg ...]"
-msgstr ""
+msgstr "set [--abefhkmnptuvxBCHP] [-o nom-option] [arg ...]"
 
 #: builtins.c:142
 msgid "unset [-f] [-v] [name ...]"
-msgstr ""
+msgstr "unset [-f] [-v] [nom ...]"
 
 #: builtins.c:144
 msgid "export [-fn] [name[=value] ...] or export -p"
-msgstr ""
+msgstr "export [-fn] [nom[=valeur] ...] ou export -p"
 
 #: builtins.c:146
 msgid "readonly [-af] [name[=value] ...] or readonly -p"
-msgstr ""
+msgstr "readonly [-af] [nom[=valeur] ...] ou readonly -p"
 
 #: builtins.c:148
-#, fuzzy
 msgid "shift [n]"
-msgstr "nombre de « shift »"
+msgstr "shift [n]"
 
 #: builtins.c:150
-#, fuzzy
 msgid "source filename [arguments]"
-msgstr "nom de fichier nécessaire en argument"
+msgstr "source nom_fichier [arguments]"
 
 #: builtins.c:152
-#, fuzzy
 msgid ". filename [arguments]"
-msgstr "nom de fichier nécessaire en argument"
+msgstr ". nom_fichier [arguments]"
 
 #: builtins.c:155
 msgid "suspend [-f]"
-msgstr ""
+msgstr "suspend [-f]"
 
 #: builtins.c:158
 msgid "test [expr]"
-msgstr ""
+msgstr "test [expr]"
 
 #: builtins.c:160
 msgid "[ arg... ]"
-msgstr ""
+msgstr "[ arg... ]"
 
 #: builtins.c:162
 msgid "times"
-msgstr ""
+msgstr "times"
 
 #: builtins.c:164
 msgid "trap [-lp] [[arg] signal_spec ...]"
-msgstr ""
+msgstr "trap [-lp] [[arg] signal_spec ...]"
 
 #: builtins.c:166
 msgid "type [-afptP] name [name ...]"
-msgstr ""
+msgstr "type [-afptP] nom [nom ...]"
 
 #: builtins.c:169
 msgid "ulimit [-SHacdefilmnpqrstuvx] [limit]"
-msgstr ""
+msgstr "ulimit [-SHacdefilmnpqrstuvx] [limite]"
 
 #: builtins.c:172
 msgid "umask [-p] [-S] [mode]"
-msgstr ""
+msgstr "umask [-p] [-S] [mode]"
 
 #: builtins.c:175
 msgid "wait [id]"
-msgstr ""
+msgstr "wait [id]"
 
 #: builtins.c:179
 msgid "wait [pid]"
-msgstr ""
+msgstr "wait [pid]"
 
 #: builtins.c:182
 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done"
-msgstr ""
+msgstr "for NOM [in MOTS ... ] ; do COMMANDES; done"
 
 #: builtins.c:184
 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done"
-msgstr ""
+msgstr "for (( exp1; exp2; exp3 )); do COMMANDES; done"
 
 #: builtins.c:186
 msgid "select NAME [in WORDS ... ;] do COMMANDS; done"
-msgstr ""
+msgstr "select NOM [in MOTS ... ;] do COMMANDES; done"
 
 #: builtins.c:188
 msgid "time [-p] pipeline"
-msgstr ""
+msgstr "time [-p] pipeline"
 
 #: builtins.c:190
 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac"
-msgstr ""
+msgstr "case MOT in [MOTIF [| MOTIF]...) COMMANDES ;;]... esac"
 
 #: builtins.c:192
-msgid ""
-"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else "
-"COMMANDS; ] fi"
-msgstr ""
+msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi"
+msgstr "if COMMANDES; then COMMANDES; [ elif COMMANDES; then COMMANDES; ]... [ else COMMANDES; ] fi"
 
 #: builtins.c:194
 msgid "while COMMANDS; do COMMANDS; done"
-msgstr ""
+msgstr "while COMMANDES; do COMMANDES; done"
 
 #: builtins.c:196
 msgid "until COMMANDS; do COMMANDS; done"
-msgstr ""
+msgstr "until COMMANDES; do COMMANDES; done"
 
 #: builtins.c:198
 msgid "coproc [NAME] command [redirections]"
-msgstr ""
+msgstr "coproc [NOM] commande [redirections]"
 
 #: builtins.c:200
 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }"
-msgstr ""
+msgstr "function nom { COMMANDES ; } ou nom () { COMMANDES ; }"
 
 #: builtins.c:202
 msgid "{ COMMANDS ; }"
-msgstr ""
+msgstr "{ COMMANDES ; }"
 
 #: builtins.c:204
 msgid "job_spec [&]"
-msgstr ""
+msgstr "job_spec [&]"
 
 #: builtins.c:206
-#, fuzzy
 msgid "(( expression ))"
-msgstr "une expression est attendue"
+msgstr "(( expression ))"
 
 #: builtins.c:208
-#, fuzzy
 msgid "[[ expression ]]"
-msgstr "une expression est attendue"
+msgstr "[[ expression ]]"
 
 #: builtins.c:210
 msgid "variables - Names and meanings of some shell variables"
-msgstr ""
+msgstr "variables - Nom et signification de certaines variables du shell"
 
 #: builtins.c:213
 msgid "pushd [-n] [+N | -N | dir]"
-msgstr ""
+msgstr "pushd [-n] [+N | -N | rép]"
 
 #: builtins.c:217
 msgid "popd [-n] [+N | -N]"
-msgstr ""
+msgstr "popd [-n] [+N | -N]"
 
 #: builtins.c:221
 msgid "dirs [-clpv] [+N] [-N]"
-msgstr ""
+msgstr "dirs [-clpv] [+N] [-N]"
 
 #: builtins.c:224
 msgid "shopt [-pqsu] [-o] [optname ...]"
-msgstr ""
+msgstr "shopt [-pqsu] [-o] [nom_opt ...]"
 
 #: builtins.c:226
 msgid "printf [-v var] format [arguments]"
-msgstr ""
+msgstr "printf [-v var] format [arguments]"
 
 #: builtins.c:229
-msgid ""
-"complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat] [-"
-"W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S "
-"suffix] [name ...]"
-msgstr ""
+msgid "complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat] [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]"
+msgstr "complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G motif_glob] [-W liste_mots]  [-F fonction] [-C commande] [-X motif_filtre] [-P prefixe] [-S suffixe] [nom ...]"
 
 #: builtins.c:233
-msgid ""
-"compgen [-abcdefgjksuv] [-o option]  [-A action] [-G globpat] [-W wordlist]  "
-"[-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
-msgstr ""
+msgid "compgen [-abcdefgjksuv] [-o option]  [-A action] [-G globpat] [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
+msgstr "compgen [-abcdefgjksuv] [-o option]  [-A action] [-G motif_glob] [-W liste_mots]  [-F fonction] [-C commande] [-X motif_filtre] [-P prefixe] [-S suffixe] [mot]"
 
 #: builtins.c:237
 msgid "compopt [-o|+o option] [-DE] [name ...]"
-msgstr ""
+msgstr "compopt [-o|+o option] [-DE] [nom ...]"
 
 #: builtins.c:240
-msgid ""
-"mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c "
-"quantum] [array]"
-msgstr ""
+msgid "mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
+msgstr "mapfile [-n nombre] [-O origine] [-s nombre] [-t] [-u fd] [-C callback] [-c quantum] [tableau]"
 
 #: builtins.c:242
-msgid ""
-"readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c "
-"quantum] [array]"
-msgstr ""
+msgid "readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
+msgstr "readarray [-n nombre] [-O origine] [-s nombre] [-t] [-u fd] [-C callback] [-c quantum] [tableau]"
 
 #: builtins.c:254
-#, fuzzy
 msgid ""
 "Define or display aliases.\n"
 "    \n"
@@ -2371,21 +2284,26 @@ msgid ""
 "      -p\tPrint all defined aliases in a reusable format\n"
 "    \n"
 "    Exit Status:\n"
-"    alias returns true unless a NAME is supplied for which no alias has "
-"been\n"
+"    alias returns true unless a NAME is supplied for which no alias has been\n"
 "    defined."
 msgstr ""
-"« alias » sans argument ou avec l'option « -p » affiche sur la sortie "
-"standard\n"
-"    la liste des alias sous la forme NAME=VALUE. Sinon, un alias est défini\n"
-"    pour chaque NAME dont la VALUE est fournie. Une espace après la VALUE\n"
-"    entraîne la vérification de la substitution d'alias pour le mot suivant\n"
-"    lorsque l'alias est étendu. « alias » renvoie « true » à moins qu'un "
-"NAME\n"
-"    ne soit fourni pour lequel aucun alias n'a été défini."
+"Définit ou affiche des alias.\n"
+"    \n"
+"    Sans argument, « alias » affiche la liste des alias avec le format réutilisable\n"
+"    « alias NOM=VALEUR » sur la sortie standard.\n"
+"    \n"
+"    Sinon, un alias est définit pour chaque NOM dont la VALEUR est donnée.\n"
+"    Une espace à la fin de la VALEUR entraine le remplacement d'alias dans le mot\n"
+"    suivant, lorsque l'alias est développé.\n"
+"    \n"
+"    Options :\n"
+"      -p\tAfficher tous les alias actuels dans un format réutilisable\n"
+"    \n"
+"    Code de sortie :\n"
+"    « alias » renvoie la valeur vraie à moins que NOM ne soit fourni et que celui-ci n'aie\n"
+"    pas d'alias."
 
 #: builtins.c:276
-#, fuzzy
 msgid ""
 "Remove each NAME from the list of defined aliases.\n"
 "    \n"
@@ -2394,12 +2312,14 @@ msgid ""
 "    \n"
 "    Return success unless a NAME is not an existing alias."
 msgstr ""
-"Enlève les NAME de la liste des alias définis. Si l'option « -a » est "
-"fournie,\n"
-"alors toutes les définitions d'alias sont enlevées."
+"Enlève chaque NOM de la liste des alias actuels.\n"
+"    \n"
+"    Options :\n"
+"      -a\tretire toutes les définitions d'alias.\n"
+"    \n"
+"    Renvoie le code de succès à moins que NOM ne soit pas un alias existant."
 
 #: builtins.c:289
-#, fuzzy
 msgid ""
 "Set Readline key bindings and variables.\n"
 "    \n"
@@ -2411,24 +2331,20 @@ msgid ""
 "    Options:\n"
 "      -m  keymap         Use KEYMAP as the keymap for the duration of this\n"
 "                         command.  Acceptable keymap names are emacs,\n"
-"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
-"move,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n"
 "                         vi-command, and vi-insert.\n"
 "      -l                 List names of functions.\n"
 "      -P                 List function names and bindings.\n"
 "      -p                 List functions and bindings in a form that can be\n"
 "                         reused as input.\n"
-"      -S                 List key sequences that invoke macros and their "
-"values\n"
-"      -s                 List key sequences that invoke macros and their "
-"values\n"
+"      -S                 List key sequences that invoke macros and their values\n"
+"      -s                 List key sequences that invoke macros and their values\n"
 "                         in a form that can be reused as input.\n"
 "      -V                 List variable names and values\n"
 "      -v                 List variable names and values in a form that can\n"
 "                         be reused as input.\n"
 "      -q  function-name  Query about which keys invoke the named function.\n"
-"      -u  function-name  Unbind all keys which are bound to the named "
-"function.\n"
+"      -u  function-name  Unbind all keys which are bound to the named function.\n"
 "      -r  keyseq         Remove the binding for KEYSEQ.\n"
 "      -f  filename       Read key bindings from FILENAME.\n"
 "      -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
@@ -2437,48 +2353,39 @@ msgid ""
 "    Exit Status:\n"
 "    bind returns 0 unless an unrecognized option is given or an error occurs."
 msgstr ""
-"Associe une suite de touches à une fonction « Readline » ou définit une\n"
-"variable « Readline ». Les arguments non-options suivent une syntaxe "
-"équivalente à celle\n"
-"du fichier ~/.inputrc, mais doivent être transmis comme arguments uniques :\n"
-"    bind '\"\\C-x\\C-r\" : re-read-init-file'.\n"
-"    bind accepte les options suivantes :\n"
-"      -m  keymap         Utilise « keymap » comme mappage clavier pendant "
-"la\n"
-"                         durée de cette commande. Des noms de mappage "
-"valables                         sont « emacs », « emacs-standard », « emacs-"
-"meta », \n"
-"                         « emacs-ctlx », « vi », « vi-move », « vi-command » "
-"et\n"
+"Définit les associations de touches et les variables de « Readline ».\n"
+"    \n"
+"    Associe une séquence de touches à une fonction « Readline » ou définit une\n"
+"    variable « Readline ». Les arguments non-options suivent une syntaxe équivalente à celle\n"
+"    du fichier ~/.inputrc, mais doivent être transmis comme arguments uniques :\n"
+"    ex : bind '\"\\C-x\\C-r\" : re-read-init-file'.\n"
+"    Options :\n"
+"      -m  keymap         Utilise KEYMAP comme mappage clavier pendant la\n"
+"                         durée de cette commande. Des noms de mappage valables                         sont « emacs », « emacs-standard », « emacs-meta », \n"
+"                         « emacs-ctlx », « vi », « vi-move », « vi-command » et\n"
 "                         « vi-insert ».\n"
 "      -l                 Affiche les noms de fonctions.\n"
 "      -P                 Affiche les noms et associations des fonctions.\n"
-"      -p                 Affiche les fonctions et associations dans une "
-"forme qui\n"
+"      -p                 Affiche les fonctions et associations dans une forme qui\n"
 "                         peut être réutilisée comme entrée.\n"
-"      -r  seqtouche         Enlève l'association pour « seqtouche ».\n"
-"      -x  seqtouche:commande-shell\tEntraîne l'exécution de la « commande-"
-"shell »\n"
-"                         \t\t\t\tlorsque « seqtouche » est entrée.\n"
-"      -f  nomfichier       Lit l'association de touches depuis le fichier.\n"
-"      -q  nom-fonction   Permet de savoir quelles touches appellent la "
-"fonction.\n"
-"      -u  nom-fonction   Enlève toutes les associations de touches liée à la "
-"fonction.\n"
+"      -S                 Affiche les séquences de touches qui invoquent des macros,\n"
+"                         et leurs valeurs.\n"
+"      -s                 Affiche les séquences de touches qui invoquent des macros,\n"
+"                         et leurs valeurs sous une forme qui peut être utilisée comme entrée.      -r  seqtouche         Enlève l'association pour « seqtouche ».\n"
 "      -V                 Affiche les noms et valeurs des variables\n"
-"      -v                 Affiche les noms et valeurs des variables dans une "
-"forme qui peut\n"
+"      -v                 Affiche les noms et valeurs des variables dans une forme qui peut\n"
 "                         être réutilisée comme entrée.\n"
-"      -S                 Affiche les séquences de touches qui invoquent des "
-"macros,\n"
-"                         et leurs valeurs.\n"
-"      -s                 Affiche les séquences de touches qui invoquent des "
-"macros,\n"
-"                         et leurs valeurs sous une forme qui peut être "
-"utilisée comme entrée."
+"      -q  nom-fonction   Permet de savoir quelles touches appellent la fonction.\n"
+"      -u  nom-fonction   Enlève toutes les associations de touches liée à la fonction.\n"
+"      -r  seqtouches         Supprime l'association pour SEQTOUCHES.\n"
+"      -f  nomfichier       Lit l'association de touches depuis NOMFICHIER.\n"
+"      -x  seqtouche:commande-shell\tEntraîne l'exécution de la commande-shell\n"
+"                         \t\t\t\tlorsque « seqtouche » est entrée.\n"
+"      \n"
+"      Code de sortie :\n"
+"      « bind » renvoie 0 à moins qu'une option non reconnue ne soit donnée ou qu'une erreur ne survienne."
 
 #: builtins.c:326
-#, fuzzy
 msgid ""
 "Exit for, while, or until loops.\n"
 "    \n"
@@ -2488,12 +2395,15 @@ msgid ""
 "    Exit Status:\n"
 "    The exit status is 0 unless N is not greater than or equal to 1."
 msgstr ""
-"Reprend l'exécution à la prochaine boucle FOR, WHILE ou UNTIL de niveau "
-"supérieur.\n"
-"    Si N est précisé, reprend à N-ième boucle supérieure."
+"Sort des boucles for, while, ou until.\n"
+"    \n"
+"    Sort d'une boucle FOR, WHILE ou UNTIL.  Si N est spécifié, sort de N boucles\n"
+"    imbriquées.\n"
+"    \n"
+"    Code de retour :\n"
+"    Le code de retour est 0 à moins que N ne soit pas supérieur ou égal à 1."
 
 #: builtins.c:338
-#, fuzzy
 msgid ""
 "Resume for, while, or until loops.\n"
 "    \n"
@@ -2503,9 +2413,13 @@ msgid ""
 "    Exit Status:\n"
 "    The exit status is 0 unless N is not greater than or equal to 1."
 msgstr ""
-"Reprend l'exécution à la prochaine boucle FOR, WHILE ou UNTIL de niveau "
-"supérieur.\n"
-"    Si N est précisé, reprend à N-ième boucle supérieure."
+"Reprend l'exécution des boucles for, while ou until.\n"
+"    \n"
+"    Reprend l'itération suivante de la boucle FOR, WHILE ou UNTIL de niveau supérieur.\n"
+"    Si N est précisé, reprend à N-ième boucle supérieure.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Le code de sortie est 0 à moins que N ne soit pas supérieur ou égale à 1."
 
 #: builtins.c:350
 msgid ""
@@ -2513,16 +2427,24 @@ msgid ""
 "    \n"
 "    Execute SHELL-BUILTIN with arguments ARGs without performing command\n"
 "    lookup.  This is useful when you wish to reimplement a shell builtin\n"
-"    as a shell function, but need to execute the builtin within the "
-"function.\n"
+"    as a shell function, but need to execute the builtin within the function.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n"
 "    not a shell builtin.."
 msgstr ""
+"Exécute des commandes shell intégrées.\n"
+"    \n"
+"    Exécute SHELL-BUILTIN avec les arguments ARGs sans effectuer de recherche\n"
+"    de commande.  Ceci est utile lorsque vous souhaitez remplacer une commande\n"
+"    intégrée par une fonction shell, mais nécessite d'exécuter la commande intégrée\n"
+"    dans la fonction.\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le code de retour de SHELL-BUILTIN, ou false si SHELL-BUILTIN n'est\n"
+"    pas une commande intégrée.."
 
 #: builtins.c:365
-#, fuzzy
 msgid ""
 "Return the context of the current subroutine call.\n"
 "    \n"
@@ -2540,35 +2462,30 @@ msgstr ""
 "Renvoie le contexte de l'appel de sous-routine actuel.\n"
 "    \n"
 "    Sans EXPR, renvoie « $ligne $nomfichier ».  Avec EXPR,\n"
-"    renvoie « $ligne $sousroutine $nomfichier »; ces informations "
-"supplémentaires\n"
+"    renvoie « $ligne $sousroutine $nomfichier »; ces informations supplémentaires\n"
 "    peuvent être utilisées pour fournir une trace de la pile.\n"
 "    \n"
-"    La valeur de EXPR indique le nombre de cadres d'appels duquel il faut "
-"revenir en arrière\n"
-"    avant le cadre actuel ; le cadre supérieur est le cadre 0."
+"    La valeur de EXPR indique le nombre de cadres d'appels duquel il faut revenir en arrière\n"
+"    avant le cadre actuel ; le cadre supérieur est le cadre 0.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie 0 à moins que le shell ne soit pas en train d'exécuter une fonction ou que EXPR\n"
+"    ne soit pas valable."
 
 #: builtins.c:383
-#, fuzzy
 msgid ""
 "Change the shell working directory.\n"
 "    \n"
-"    Change the current directory to DIR.  The default DIR is the value of "
-"the\n"
+"    Change the current directory to DIR.  The default DIR is the value of the\n"
 "    HOME shell variable.\n"
 "    \n"
-"    The variable CDPATH defines the search path for the directory "
-"containing\n"
-"    DIR.  Alternative directory names in CDPATH are separated by a colon "
-"(:).\n"
-"    A null directory name is the same as the current directory.  If DIR "
-"begins\n"
+"    The variable CDPATH defines the search path for the directory containing\n"
+"    DIR.  Alternative directory names in CDPATH are separated by a colon (:).\n"
+"    A null directory name is the same as the current directory.  If DIR begins\n"
 "    with a slash (/), then CDPATH is not used.\n"
 "    \n"
-"    If the directory is not found, and the shell option `cdable_vars' is "
-"set,\n"
-"    the word is assumed to be  a variable name.  If that variable has a "
-"value,\n"
+"    If the directory is not found, and the shell option `cdable_vars' is set,\n"
+"    the word is assumed to be  a variable name.  If that variable has a value,\n"
 "    its value is used for DIR.\n"
 "    \n"
 "    Options:\n"
@@ -2581,25 +2498,28 @@ msgid ""
 "    Exit Status:\n"
 "    Returns 0 if the directory is changed; non-zero otherwise."
 msgstr ""
-"Change le répertoire actuel vers DIR.  La variable « $HOME » est le "
-"répertoire\n"
-"    DIR par défaut.  La variable CDPATH définit le chemin de recherche\n"
-"    du répertoire contenant DIR. Les noms de répertoires alternatifs dans "
-"CDPATH\n"
-"    sont séparés par un deux-point « : ».  Un nom de répertoire vide est "
-"identique\n"
-"    au répertoire actuel, càd « . ».  Si DIR commence avec une barre oblique "
-"« / »,\n"
-"    alors CDPATH n'est pas utilisé.  Si le répertoire n'est pas trouvé et "
-"que\n"
-"    l'option « cdable_vars » du shell est définie, alors le mot est essayé "
-"comme nom\n"
-"    de variable. Si la variable possède une valeur, alors on fait « cd » "
-"vers cette valeur.\n"
-"    L'option « -P » indique d'utiliser la structure physique des répertoires "
-"plutôt que\n"
-"    les liens symboliques ; l'option « -L » force le suivi des liens "
-"symboliques."
+"Change le répertoire de travail du shell.\n"
+"    \n"
+"    Change le répertoire actuel vers DIR.  La variable « $HOME » est le répertoire\n"
+"    DIR par défaut.\n"
+"    \n"
+"    La variable CDPATH définit le chemin de recherche du répertoire contenant\n"
+"    DIR. Les noms de répertoires alternatifs dans CDPATH sont séparés par un deux-point « : ».\n"
+"    Un nom de répertoire vide est identique au répertoire actuel.  Si DIR commence\n"
+"    avec une barre oblique « / », alors CDPATH n'est pas utilisé.\n"
+"    \n"
+"    Si le répertoire n'est pas trouvé et que l'option « cdable_vars » du shell est définie,\n"
+"    alors le mot est essayé comme nom de variable. Si la variable possède une valeur,\n"
+"    alors cette valeur est utilisée pour DIR.\n"
+"    \n"
+"    Options :\n"
+"        -L\tforcer le suivi des liens symboliques.        -P\tutiliser la structure physique des répertoires sans suivre\n"
+"    les liens symboliques\n"
+"    \n"
+"    Le comportement par défaut est de suivre les liens symboliques, comme si « -f » était précisé.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie 0 si le répertoire est changé, sinon autre chose que 0."
 
 #: builtins.c:411
 msgid ""
@@ -2616,9 +2536,20 @@ msgid ""
 "    Returns 0 unless an invalid option is given or the current directory\n"
 "    cannot be read."
 msgstr ""
+"Affiche le nom du répertoire de travail courant.\n"
+"    \n"
+"    Options :\n"
+"      -L\taffiche la valeur de $PWD s'il nomme le répertoire de travail courant\n"
+"    \t\n"
+"      -P\taffiche le répertoire physique, sans aucun lien symbolique\n"
+"    \n"
+"    Par défaut, « pwd » se comporte comme si « -L » était spécifié.\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie 0 à moins qu'une option non valable ne soit donnée ou que le répertoire\n"
+"    courant ne peut pas être lu."
 
 #: builtins.c:428
-#, fuzzy
 msgid ""
 "Null command.\n"
 "    \n"
@@ -2627,7 +2558,12 @@ msgid ""
 "    Exit Status:\n"
 "    Always succeeds."
 msgstr ""
-"Sans effet : la commande ne fait rien. Le code de sortie zéro est renvoyé."
+"Commande vide.\n"
+"    \n"
+"    Sans effet : la commande ne fait rien.\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie toujours le code de succès."
 
 #: builtins.c:439
 msgid ""
@@ -2636,23 +2572,29 @@ msgid ""
 "    Exit Status:\n"
 "    Always succeeds."
 msgstr ""
+"Renvoie un résultat de succès.\n"
+"    \n"
+"    Code de retour :\n"
+"    Succès."
 
 #: builtins.c:448
-#, fuzzy
 msgid ""
 "Return an unsuccessful result.\n"
 "    \n"
 "    Exit Status:\n"
 "    Always fails."
-msgstr "Renvoie un résultat d'échec"
+msgstr ""
+"Renvoie un résultat d'échec.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Toujours l'échec."
 
 #: builtins.c:457
 msgid ""
 "Execute a simple command or display information about commands.\n"
 "    \n"
 "    Runs COMMAND with ARGS suppressing  shell function lookup, or display\n"
-"    information about the specified COMMANDs.  Can be used to invoke "
-"commands\n"
+"    information about the specified COMMANDs.  Can be used to invoke commands\n"
 "    on disk when a function with the same name exists.\n"
 "    \n"
 "    Options:\n"
@@ -2664,9 +2606,22 @@ msgid ""
 "    Exit Status:\n"
 "    Returns exit status of COMMAND, or failure if COMMAND is not found."
 msgstr ""
+"Exécute une simple commande ou affiche des informations sur les commandes.\n"
+"    \n"
+"    Lance la COMMANDE avec des ARGS en court-circuitant la recherche de commande, ou affiche\n"
+"    des informations sur les COMMANDEs spécifiées.  Ceci peut être utilisé pour invoquer des commandes\n"
+"    sur le disque lorsqu'il y a conflit avec une fonction portant le même nom.\n"
+"    \n"
+"    Options :\n"
+"      -p\tutilise une valeur par défaut pour CHEMIN qui garantit de trouver\n"
+"    \ttous les utilitaires standards\n"
+"      -v\taffiche une description de la COMMANDE similaire à la commande intégrée « type »\n"
+"      -V\taffiche une description plus détaillées de chaque COMMANDE\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le code de sortie de la COMMANDE, ou le code d'échec si la COMMANDE est introuvable."
 
 #: builtins.c:476
-#, fuzzy
 msgid ""
 "Set variable values and attributes.\n"
 "    \n"
@@ -2694,41 +2649,43 @@ msgid ""
 "    Variables with the integer attribute have arithmetic evaluation (see\n"
 "    the `let' command) performed when the variable is assigned a value.\n"
 "    \n"
-"    When used in a function, `declare' makes NAMEs local, as with the "
-"`local'\n"
+"    When used in a function, `declare' makes NAMEs local, as with the `local'\n"
 "    command.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
-"Déclare des variables ou ajoute des attributs aux variables.  Si aucun nom\n"
-"    n'est donné, affiche plutôt les valeurs des variables.  L'option « -p »\n"
-"    permet d'afficher les attributs et les valeurs de chaque NAME.\n"
-"    \n"
-"    Les options sont :\n"
-"    \n"
-"      -a\tpour faire des tableaux de NAME (si pris en charge)\n"
-"      -f\tpour choisir uniquement parmi les noms de fonctions\n"
-"      -F\tpour afficher les noms de fonctions (et les numéros de ligne et "
-"le\n"
-"       \tfichier source si le mode de débogage est activé\n"
-"      -i\tpour que les NAME aient l'attribut « integer »\n"
-"      -r\tpour que les NAME soient en lecture seule\n"
-"      -t\tpour que les NAME aient l'attribut « trace »\n"
-"      -x\tpour faire un export des NAME\n"
-"    \n"
-"    L'évaluation arithmétique des variables ayant l'attribut « integer » "
-"est\n"
-"    effectuée au moment de l'affectation (voir « let »).\n"
-"    \n"
-"    Lors de l'affichage des valeurs de variables, -f affiche le nom de la "
-"fonction\n"
-"    et sa définition.  L'option -F permet de n'afficher que le nom.\n"
-"    \n"
-"    Un attribut peut être désactivé en utilisant « + » au lieu de « - ».  "
-"Dans une\n"
-"    fonction, ceci a pour effet de rendre les NAME locaux, comme avec la "
-"commande «local »."
+"Définit les valeurs et les attributs des variables.\n"
+"    \n"
+"    Permet de déclarer des variables et de leur donner des attributs.  Si aucun NOM n'est donné,\n"
+"    affiche les attributs et les valeurs de toutes les variables.\n"
+"    \n"
+"    Options :\n"
+"      -f\trestreint l'action ou l'affichage aux noms et définitions de fonctions\n"
+"      -F\trestreint l'affichage aux noms des fonctions uniquement (avec le numéro de ligne\n"
+"    \tet le fichier source lors du débogage)\n"
+"      -p\taffiche les attributs et la valeur de chaque NOM\n"
+"    \n"
+"    Options qui définissent des attributs :\n"
+"      -a\tpour faire de NOMs des tableaux indexés (si pris en charge)\n"
+"      -A\tpour faire de NOMs des tableaux associatifs (si pris en charge)\n"
+"      -i\tpour permettre aux NOMs d'avoir l'attribut « integer »\n"
+"      -l\tpour convertir les NOMs an minuscule lors de l'affectation\n"
+"      -r\tpour mettre les NOMs en lecture seule\n"
+"      -t\tpour permettre aux NOMs d'avoir l'attribut « trace »\n"
+"      -u\tpour convertir les NOMs en majuscule lors de l'affectation\n"
+"      -x\tpour permettre aux NOMs de s'exporter\n"
+"    \n"
+"    Utiliser « + » au lieu de « - » permet de désactiver l'attribut donné.\n"
+"    \n"
+"    Les variables avec l'attribut « integer » ont une évaluation arithmétique (voir\n"
+"    la commande « let ») effectuée lorsqu'un valeur est affectée à la variable.\n"
+"    \n"
+"    Lorsqu'utilisée dans une fonction, « declare » permet aux NOMs d'être locaux,\n"
+"    comme avec la commande « local ».\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le code de succès à moins qu'un option non valable soit fournie ou qu'une erreur ne survienne."
 
 #: builtins.c:512
 msgid ""
@@ -2736,6 +2693,9 @@ msgid ""
 "    \n"
 "    Obsolete.  See `help declare'."
 msgstr ""
+"Définit des valeurs ou des attributs de variables.\n"
+"    \n"
+"    Obsolète.  Essayez « help declare »."
 
 #: builtins.c:520
 msgid ""
@@ -2751,9 +2711,19 @@ msgid ""
 "    Returns success unless an invalid option is supplied, an error occurs,\n"
 "    or the shell is not executing a function."
 msgstr ""
+"Définit des variables locales.\n"
+"    \n"
+"    Crée une variable locale nommée NOM, avec une valeur VALEUR.  OPTION peut\n"
+"    être n'importe quelle option acceptée par « declare ».\n"
+"    \n"
+"    Les variables locales peut seulement être utilisée à l'intérieur d'une fonction; elles ne sont visibles\n"
+"    que des fonctions où elles ont été définies et dans ses fonctions filles.\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le code de succès à moins qu'une option non valable ne soit fournie, qu'une erreur ne survienne,\n"
+"    ou que l'inteprète ne soit pas dans une fonction."
 
 #: builtins.c:537
-#, fuzzy
 msgid ""
 "Write arguments to the standard output.\n"
 "    \n"
@@ -2783,28 +2753,33 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless a write error occurs."
 msgstr ""
-"Affiche les ARGs.  Si « -n » est spécifié, le retour à la ligne final et "
-"supprimé.\n"
-"    L'option « -e » permet d'activer l'interprétation des caractères à "
-"contre-oblique\n"
-"    parmi la liste ci-dessous :\n"
-"    \t\\a\talerte (cloche)\n"
-"    \t\\b\tretour arrière\n"
-"    \t\\c\tsuppr. dernier retour à la ligne\n"
-"    \t\\E\tcaractère Échap.\n"
-"    \t\\f\tsaut de page\n"
-"    \t\\n\tsaut de ligne\n"
-"    \t\\r\tretour chariot\n"
-"    \t\\t\ttabulation horizontale\n"
-"    \t\\v\ttabulation verticale\n"
-"    \t\\\\\tbarre contre-oblique\n"
-"    \t\\0nnn\tle caractère dont le code ASCII est NNN (en octal).  NNN peut "
-"être\n"
-"    \t\tlong de 0 à 3 chiffres octaux\n"
-"    \n"
-"    Vous pouvez désactiver de manière explicite l'interprétation des "
-"caractères ci-dessus\n"
-"    avec l'option « -E »."
+"Écrit les arguments sur la sortie standard.\n"
+"    \n"
+"    Affiche les ARGs sur la sortie standard, suivis d'un retour à la ligne.\n"
+"    \n"
+"    Options :\n"
+"      -n\tne pas ajouter de saut de ligne\n"
+"      -e\tactive l'interpretation des barres contre-obliques d'échappement ci-dessous\n"
+"      -E\tsupprime explicitement l'interpretation des barres contre-obliques d'échappement\n"
+"    \n"
+"    « echo » interprète les caractères suivants comme des séquences d'échappement :\n"
+"      \\a\talerte (cloche)\n"
+"      \\b\tretour arrière\n"
+"      \\c\tsupprime caractère suivant\n"
+"      \\e\tcaractère Échap.\n"
+"      \\f\tsaut de page\n"
+"      \\n\tsaut de ligne\n"
+"      \\r\tretour chariot\n"
+"      \\t\ttabulation horizontale\n"
+"      \\v\ttabulation verticale\n"
+"      \\\\\tbarre contre-oblique\n"
+"      \\0nnn\tle caractère dont le code ASCII est NNN (en octal).  NNN peut être\n"
+"    \tlong de 0 à 3 chiffres octaux\n"
+"      \\xHH\tle caractère à 8 bits dont la valeur est HH (hexadecimal).  HH\n"
+"    \tpeut être long de 1 ou 2 chiffres hexadécimaux\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins qu'une erreur ne survienne."
 
 #: builtins.c:571
 msgid ""
@@ -2818,6 +2793,15 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless a write error occurs."
 msgstr ""
+"Écrit des arguments sur la sortie standard.\n"
+"    \n"
+"    Affiche les ARGs sur la sortie standard, suivis d'un retour à la ligne.\n"
+"    \n"
+"    Options :\n"
+"      -n\tpas de retour à la ligne\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins qu'une erreur ne survienne."
 
 #: builtins.c:586
 msgid ""
@@ -2845,21 +2829,49 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless NAME is not a shell builtin or an error occurs."
 msgstr ""
+"Active et désactive les commandes intégrées.\n"
+"    \n"
+"    Active et désactive les commandes intégrées du shell.  Les désactiver vous permet\n"
+"    d'exécuter une commande du disque ayant le même nom qu'une commande du shell\n"
+"    sans utiliser le chemin compler vers le fichier.\n"
+"    \n"
+"    Options :\n"
+"      -a\taffiche la liste des commandes intégrées et leur état d'activation\n"
+"      -n\tdésactive chaque NOM ou affiche la liste des commandes désactivées\n"
+"      -p\taffiche la liste des commandes dans un format réutilisable\n"
+"      -s\taffiche seulement les noms des commandes Posix de type « special »\n"
+"    \n"
+"    Options contrôlant le chargement dynamique :\n"
+"      -f\tCharge la commande intégrée NOM depuis la bibliothèque partagée FILENAME\n"
+"      -d\tDécharge une commande chargée avec « -f »\n"
+"    \n"
+"    S'il n'y a pas d'option, chaque commande NOM est activée.\n"
+"    \n"
+"    Pour utiliser le « test » trouvé dans $PATH au lieu de celui intégré au shell,\n"
+"    tapez « enable -n test ».\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins que NOM ne soit pas une commande intégrée ou qu'une erreur ne survienne."
 
 #: builtins.c:614
 msgid ""
 "Execute arguments as a shell command.\n"
 "    \n"
-"    Combine ARGs into a single string, use the result as input to the "
-"shell,\n"
+"    Combine ARGs into a single string, use the result as input to the shell,\n"
 "    and execute the resulting commands.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns exit status of command or success if command is null."
 msgstr ""
+"Exécute des arguments comme s'ils étaient une commande du shell.\n"
+"    \n"
+"    Combine des ARGs en une chaîne unique, utilise le résultat comme entrée du shell,\n"
+"    puis exécute la commande résultante.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le même code de sortie que la commande, ou le code de succès si la commande est vide."
 
 #: builtins.c:626
-#, fuzzy
 msgid ""
 "Parse option arguments.\n"
 "    \n"
@@ -2899,7 +2911,9 @@ msgid ""
 "    Returns success if an option is found; fails if the end of options is\n"
 "    encountered or an error occurs."
 msgstr ""
-"« getopts » est utilisé par les procédures du shell pour analyser les \n"
+"Analyse les options en arguments.\n"
+"    \n"
+"    « getopts » est utilisé par les procédures du shell pour analyser les \n"
 "    paramètres de position.\n"
 "    \n"
 "    OPTSTRING contient les lettres d'options qui devront être reconnues ;\n"
@@ -2907,53 +2921,40 @@ msgstr ""
 "    argument séparé d'elle par une espace.\n"
 "    \n"
 "    À chaque fois qu'elle est appelée, « getopts » place l'option suivante\n"
-"    dans la variable de shell « $nom », en initialisant « nom » si elle "
-"n'existe pas,\n"
-"    et place l'index de l'argument suivant dans la variable de shell "
-"OPTIND.\n"
-"    OPTIND est initialisé à 1 à chaque fois que le shell ou qu'un script "
-"shell\n"
-"    est appelé.  Lorsqu'une option nécessite un argument, « getopts » place "
-"cet\n"
+"    dans la variable de shell « $nom », en l'initialisant si elle n'existe pas,\n"
+"    et place l'index de l'argument suivant dans la variable de shell OPTIND.\n"
+"    OPTIND est initialisé à 1 à chaque fois que le shell ou qu'un script shell\n"
+"    est appelé.  Lorsqu'une option nécessite un argument, « getopts » place cet\n"
 "    argument dans la variable de shell OPTARG.\n"
 "    \n"
-"    « getopts » signale les erreurs d'une façon parmi deux.  Si le premier "
-"caractère\n"
-"    d'OPTSTRING est un deux-points, « getopts » utilise un signalement "
-"d'erreur\n"
-"    silencieux. Dans ce mode aucun message d'erreur n'est affiché. Si une "
-"option\n"
-"    incorrecte est rencontrée, « getopts » place dans OPTARG le caractère "
-"d'option\n"
-"    trouvé. Si un argument nécessaire n'est pas trouvé, « getopts » place un "
-"« : »\n"
-"    dans NAME et place dans OPTARG le caractère d'option trouvé.  Si « "
-"getopts »\n"
-"    n'est pas en mode silencieux et qu'une option incorrecte est rencontrée, "
-"il\n"
-"    place « ? » dans NAME et efface OPTARG.  Si un argument nécessaire n'est "
-"pas\n"
-"    trouvé, un « ? » est placé dans NAME, OPTARG est effacé et un message de "
-"diagnostic\n"
+"    « getopts » signale les erreurs d'une façon parmi deux.  Si le premier caractère\n"
+"    d'OPTSTRING est un deux-points, « getopts » utilise un signalement d'erreur\n"
+"    silencieux. Dans ce mode aucun message d'erreur n'est affiché. Si une option\n"
+"    incorrecte est rencontrée, « getopts » place dans OPTARG le caractère d'option\n"
+"    trouvé. Si un argument nécessaire n'est pas trouvé, « getopts » place un « : »\n"
+"    dans NOM et place dans OPTARG le caractère d'option trouvé.  Si « getopts »\n"
+"    n'est pas en mode silencieux et qu'une option incorrecte est rencontrée, il\n"
+"    place « ? » dans NAME et efface OPTARG.  Si un argument nécessaire n'est pas\n"
+"    trouvé, un « ? » est placé dans NAME, OPTARG est effacé et un message de diagnostic\n"
 "    est affiché.\n"
 "    \n"
-"    Si la variable de shell OPTERR possède la valeur 0, « getopts » "
-"désactive\n"
-"    l'affichage des messages d'erreur, même si le premier caractère "
-"d'OPTSTRING\n"
+"    Si la variable de shell OPTERR possède la valeur 0, « getopts » désactive\n"
+"    l'affichage des messages d'erreur, même si le premier caractère d'OPTSTRING\n"
 "    n'est pas un deux-points. OPTERR possède la valeur 1 par défaut.\n"
 "    \n"
-"    « getopts » analyse habituellement les paramètres de position ($0 - $9), "
-"mais\n"
-"    si plus d'argument sont données, ils sont analysés à la place."
+"    « getopts » analyse habituellement les paramètres de position ($0 - $9), mais\n"
+"    si plus d'argument sont données, ils sont analysés à la place.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès si une option est trouvée, le code d'échec si la fin des options\n"
+"    est rencontrée ou si une erreur survient."
 
 #: builtins.c:668
 msgid ""
 "Replace the shell with the given command.\n"
 "    \n"
 "    Execute COMMAND, replacing this shell with the specified program.\n"
-"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not "
-"specified,\n"
+"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,\n"
 "    any redirections take effect in the current shell.\n"
 "    \n"
 "    Options:\n"
@@ -2961,49 +2962,64 @@ msgid ""
 "      -c\t\texecute COMMAND with an empty environment\n"
 "      -l\t\tplace a dash in the zeroth argument to COMMAND\n"
 "    \n"
-"    If the command cannot be executed, a non-interactive shell exits, "
-"unless\n"
+"    If the command cannot be executed, a non-interactive shell exits, unless\n"
 "    the shell option `execfail' is set.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless COMMAND is not found or a redirection error "
-"occurs."
+"    Returns success unless COMMAND is not found or a redirection error occurs."
 msgstr ""
+"Remplace le shell par la commande fournie.\n"
+"    \n"
+"    Exécute la COMMANDE, en remplaçant ce shell par le programme spécifiée.\n"
+"    Les ARGUMENTS deviennent ceux de la COMMANDE. Si la COMMANDE n'est pas fournie,\n"
+"    les redirections prennent effet dans le shell courant.\n"
+"    \n"
+"    Options :\n"
+"      -a nom\tpasse NOM comme argument numéro 0 à la COMMANDE\n"
+"      -c\t\texécute la COMMANDE avec un environnement vide\n"
+"      -l\t\tplace un tiret comme argument numéro 0 de la COMMANDE\n"
+"    \n"
+"    Si la commande ne peut pas être exécutée, un shell non-interactif se termine, à moins\n"
+"    que l'option « execfail » ne soit définie.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins que la COMMANDE ne soit pas trouvée ou qu'une erreur de redirection ne survienne."
 
 #: builtins.c:689
-#, fuzzy
 msgid ""
 "Exit the shell.\n"
 "    \n"
 "    Exits the shell with a status of N.  If N is omitted, the exit status\n"
 "    is that of the last command executed."
 msgstr ""
-"Terminer le shell avec le code de retour « N ».  Si N est omis, le code\n"
+"Termine le shell.\n"
+"    \n"
+"    Termine le shell avec le code de retour « N ».  Si N est omis, le code\n"
 " de retour est celui de la dernière commande exécutée."
 
 #: builtins.c:698
 msgid ""
 "Exit a login shell.\n"
 "    \n"
-"    Exits a login shell with exit status N.  Returns an error if not "
-"executed\n"
+"    Exits a login shell with exit status N.  Returns an error if not executed\n"
 "    in a login shell."
 msgstr ""
+"Termine un shell de connexion.\n"
+"    \n"
+"    Termine un shell de connexion avec le code de sortie N.  Renvoie une erreur s'il n'est pas exécuté\n"
+"    dans un shell de connexion."
 
 #: builtins.c:708
-#, fuzzy
 msgid ""
 "Display or execute commands from the history list.\n"
 "    \n"
-"    fc is used to list or edit and re-execute commands from the history "
-"list.\n"
+"    fc is used to list or edit and re-execute commands from the history list.\n"
 "    FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
 "    string, which means the most recent command beginning with that\n"
 "    string.\n"
 "    \n"
 "    Options:\n"
-"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then "
-"EDITOR,\n"
+"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then EDITOR,\n"
 "    \t\tthen vi\n"
 "      -l \tlist lines instead of editing\n"
 "      -n\tomit line numbers when listing\n"
@@ -3017,33 +3033,34 @@ msgid ""
 "    the last command.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success or status of executed command; non-zero if an error "
-"occurs."
+"    Returns success or status of executed command; non-zero if an error occurs."
 msgstr ""
-"« fc » est utilisé pour afficher ou modifier puis ré-exécuter les commandes\n"
-"  de l'historique des commandes. FIRST et LAST peuvent être des nombres\n"
-"  indiquant la plage ou FIRST peut être une chaîne donnant le début de la\n"
+"Affiche ou exécute des commandes issues de l'historique.\n"
+"    \n"
+"  « fc » est utilisé pour afficher ou modifier puis ré-exécuter les commandes\n"
+"  de l'historique des commandes. PREMIER et DERNIER peuvent être des nombres\n"
+"  indiquant la plage ou PREMIER peut être une chaîne donnant le début de la\n"
 "  commande la plus récente recherchée.\n"
 "    \n"
-"       -e ENAME définit quel éditeur utiliser. Par défaut il s'agit de « "
-"FCEDIT »\n"
+"    Options :\n"
+"       -e ENAME définit quel éditeur utiliser. Par défaut il s'agit de « FCEDIT »\n"
 "          puis « EDITOR », puis « vi ».\n"
 "    \n"
 "       -l affiche les les lignes au lieu de les éditer.\n"
 "       -n n'affiche pas les numéros de ligne.\n"
 "       -r inverse l'ordre des lignes (les plus récentes en premier).\n"
 "    \n"
-"    En tapant « fc -s [ancien=nouveau ...] [commande] », la commande est ré-"
-"exécutée\n"
-"    après avoir effectué la substitution OLD=NEW.\n"
+"    En tapant « fc -s [ancien=nouveau ...] [commande] », la commande est ré-exécutée\n"
+"    après avoir effectué le remplacement ANCIEN=NOUVEAU.\n"
 "    \n"
 "    Un alias utile est « r='fc -s' » de sorte qu'en tapant « r cc »,\n"
-"    la dernière commande commençant par « cc » est ré-exécutée et avec « r "
-"», la\n"
-"    dernière commande est ré-exécutée."
+"    la dernière commande commençant par « cc » est ré-exécutée et avec « r », la\n"
+"    dernière commande est ré-exécutée.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès ou le code de sortie de la commande exécutée ; autre chose que 0 si une erreur survient."
 
 #: builtins.c:738
-#, fuzzy
 msgid ""
 "Move job to the foreground.\n"
 "    \n"
@@ -3054,36 +3071,41 @@ msgid ""
 "    Exit Status:\n"
 "    Status of command placed in foreground, or failure if an error occurs."
 msgstr ""
-"Place JOB_SPEC au premier plan et en fait la tâche actuelle. Si\n"
+"Déplace une tâche au premier plan.\n"
+"    \n"
+"    Place JOB_SPEC au premier plan et en fait la tâche actuelle. Si\n"
 "    JOB_SPEC n'est pas fourni, le shell utilise sa propre notion\n"
-"    de tâche actuelle."
+"    de tâche actuelle.\n"
+"    \n"
+"    Code de sortie :\n"
+"    celui de la commande placée au premier plan ou le code d'échec si une erreur survient."
 
 #: builtins.c:753
-#, fuzzy
 msgid ""
 "Move jobs to the background.\n"
 "    \n"
-"    Place the jobs identified by each JOB_SPEC in the background, as if "
-"they\n"
-"    had been started with `&'.  If JOB_SPEC is not present, the shell's "
-"notion\n"
+"    Place the jobs identified by each JOB_SPEC in the background, as if they\n"
+"    had been started with `&'.  If JOB_SPEC is not present, the shell's notion\n"
 "    of the current job is used.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
-"Place chaque JOB_SPEC en arrière plan comme s'il avait été démarré avec « & "
-"».\n"
+"Déplace des tâches vers l'arrière plan.\n"
+"    \n"
+"    Place chaque JOB_SPEC en arrière plan comme s'il avait été démarré avec « & ».\n"
 "    Si JOB_SPEC n'est pas fourni, le shell utilise sa propre notion\n"
-"    de tâche actuelle."
+"    de tâche actuelle.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins que le contrôle de tâche ne soit pas activé ou qu'une erreur ne survienne."
 
 #: builtins.c:767
 msgid ""
 "Remember or display program locations.\n"
 "    \n"
 "    Determine and remember the full pathname of each command NAME.  If\n"
-"    no arguments are given, information about remembered commands is "
-"displayed.\n"
+"    no arguments are given, information about remembered commands is displayed.\n"
 "    \n"
 "    Options:\n"
 "      -d\t\tforget the remembered location of each NAME\n"
@@ -3100,6 +3122,25 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless NAME is not found or an invalid option is given."
 msgstr ""
+"Mémorise ou affiche l'emplacement des programmes.\n"
+"    \n"
+"    Détermine et mémorise le chemin complet de chaque commande NOM.  Si\n"
+"    aucun argument n'est donné, une information sur les commandes mémorisées est affichée.\n"
+"    \n"
+"    Options :\n"
+"      -d\t\toublier l'emplacement mémorisé de chaque NOM\n"
+"      -l\t\tafficher dans un format qui peut être réutilisé comme entrée\n"
+"      -p nomchemin\tutiliser NOMCHEMIN comme le chemin complet de NOM\n"
+"      -r\t\toublier tous les emplacements mémorisés\n"
+"      -t\t\tafficher l'emplacement mémorisé de chaque NOM, en précédant\n"
+"    \t\tchaque emplacement du NOM correspondant si plusieurs NOMS\n"
+"    \t\tsont donnés\n"
+"    Arguments :\n"
+"      NOM\t\tChaque NOM est recherché dans $PATH et ajouté à la liste\n"
+"    \t\tdes commandes mémorisée.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins que le NOM ne soit pas trouvé ou qu'une option non valable ne soit donnée."
 
 #: builtins.c:792
 msgid ""
@@ -3119,12 +3160,27 @@ msgid ""
 "      PATTERN\tPattern specifiying a help topic\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless PATTERN is not found or an invalid option is "
-"given."
+"    Returns success unless PATTERN is not found or an invalid option is given."
 msgstr ""
+"Affiche des informations sur les commandes intégrées.\n"
+"    \n"
+"    Affiche de courts résumés des commandes intégrées.  Si MOTIF est\n"
+"    spécifié, une aide détaillée de toutes les commandes correspondantes au MOTIF sont affichées,\n"
+"    sinon la liste des sujets d'aide est affichée.\n"
+"    \n"
+"    Options :\n"
+"      -d\tafficher une courte description pour chaque sujet\n"
+"      -m\tafficher l'aide dans un format proche des pages de man(uel)\n"
+"      -s\tn'afficher qu'une courte aide pour chaque sujet correspondant au\n"
+"    \tMOTIF\n"
+"    \n"
+"    Arguments :\n"
+"      MOTIF\tMotif spécifiant un sujet d'aide\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le code de succès à moins que le MOTIF ne soit pas trouvé ou qu'une option non valable ne soit donnée."
 
 #: builtins.c:816
-#, fuzzy
 msgid ""
 "Display or manipulate the history list.\n"
 "    \n"
@@ -3151,48 +3207,41 @@ msgid ""
 "    \n"
 "    If the $HISTTIMEFORMAT variable is set and not null, its value is used\n"
 "    as a format string for strftime(3) to print the time stamp associated\n"
-"    with each displayed history entry.  No time stamps are printed "
-"otherwise.\n"
+"    with each displayed history entry.  No time stamps are printed otherwise.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or an error occurs."
 msgstr ""
-"Affiche l'historique avec des numéros de lignes. Les lignes possédant\n"
-"    un « * » ont été modifiées. L'argument N permet de n'afficher que\n"
-"    les N dernières lignes. L'option « -c » efface complètement "
-"l'historique.\n"
-"    L'option « -d » efface l'élément d'historique placé à la position "
-"OFFSET.\n"
-"    L'option « -w » écrit l'historique actuel dans le fichier d'historique.\n"
-"    « -r » permet de lire le fichier et d'ajouter son contenu à la fin de\n"
-"    l'historique. « -a » permet d'ajouter les lignes d'historiques de cette\n"
-"    session à la fin du fichier d'historique. L'argument « -n » permet de "
-"lire\n"
-"    toutes les lignes d'historique non déjà lues depuis le fichier "
-"d'historique\n"
-"    puis de les ajouter à l'historique.\n"
-"    \n"
-"    Si FILENAME est fourni, il est utilisé comme fichier d'historique, "
-"sinon\n"
-"    la valeur de « $HISTFILE » est utilisée, sinon le fichier « ~/."
-"bash_history ».\n"
-"    Si l'option « -s » est fournie, les arguments qui ne sont pas des "
-"options sont\n"
-"    ajoutés à la fin de l'historique comme un seul élément. L'option « -p » "
-"permet\n"
-"    d'effectuer une expansion d'historique sur chaque ARG et d'afficher le "
-"résultat,\n"
-"    sans rien enregistrer dans le fichier d'historique.\n"
-"    \n"
-"    Si la variable « $HISTTIMEFORMAT » est définie et non vide, sa valeur "
-"est\n"
-"    utilisée comme chaîne de format pour « strftime(3) » afin d'afficher "
-"les\n"
-"    valeurs de temps associées à chaque élément de l'historique. Sinon,\n"
-"    aucun valeur de temps n'est affichée."
+"Affiche ou manipule l''historique.\n"
+"    \n"
+"    Affiche l'historique avec les numéros de lignes en préfixant chaque élément\n"
+"    modifié d'un « * ».  Un argument égal à N limite la liste aux N derniers éléments.\n"
+"    \n"
+"    Options :\n"
+"      -c\tefface la liste d'historique en effaçant tous les éléments\n"
+"      -d offset\tefface l'élément d'historique à l'emplacement OFFSET.\n"
+"    \n"
+"      -a\tajouter les lignes d'historique de cette session au fichier d'historique\n"
+"      -n\tlire toutes les lignes d'historique non déjà lues depuis le fichier d'historique\n"
+"      -r\tlire le fichier d'historique et ajouter le contenu à la liste d'historique\n"
+"      -w\técrire l'historique actuel dans le fichier d'historique\n"
+"    \tet l'ajoute à la liste d'historique\n"
+"    \n"
+"      -p\teffectuer un développement de l'historique sur chaque ARG et afficher le résultat\n"
+"    \tsans le stocker dans la liste d'historique\n"
+"      -s\tajoute les ARGs à la liste d'historique comme entrée unique\n"
+"    \n"
+"    Si NOMFICHIER est donné, il est utilisé comme fichier d'historique. Sinon,\n"
+"    si $HISTFILE contient une valeur, celle-ci est utilisée, sinon ~/.bash_history.\n"
+"    \n"
+"    Si la variable $HISTTIMEFORMAT est définie et n'est pas vide, sa valeur est utillisée\n"
+"    comme chaîne de format pour que strftime(3) affiche l'horodatage associé\n"
+"    à chaque entrée d'historique.  Sinin, aucun horodatage n'est affiché.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins qu'une option non valable soit donnée ou qu'une erreur ne survienne."
 
 #: builtins.c:852
-#, fuzzy
 msgid ""
 "Display status of jobs.\n"
 "    \n"
@@ -3215,21 +3264,26 @@ msgid ""
 "    Returns success unless an invalid option is given or an error occurs.\n"
 "    If -x is used, returns the exit status of COMMAND."
 msgstr ""
-"Affiche les tâches actives. L'option « -l » ajoute les numéros de processus\n"
-"    en plus des informations habituelles. L'option « -p » n'affiche que les\n"
-"    numéros de processus. Si « -n » est fourni, seuls les processus dont\n"
-"    l'état a changé depuis la dernière notification sont affichés. JOBSPEC\n"
-"    restreint l'affichage à ce numéro de tâche. Les options « -r » et « -s "
-"»\n"
-"    restreignent l'affichage respectivement aux tâches en cours d'exécution\n"
-"    et aux tâches stoppées. Sans option, l'état de toutes les tâches "
-"actives\n"
-"    est affiché. Si « -x » est fourni, la commande COMMAND est lancée après "
-"que toutes\n"
-"    les spécifications de tâches qui apparaissent dans les ARGS ont été "
-"remplacées\n"
-"    par le numéro de processus du leader du groupe de processus pour cette "
-"tâche."
+"Affiche l'état des tâches.\n"
+"    \n"
+"    Affiche la liste des tâches actives.  JOBSPEC restreint l'affichage à cette tâche.\n"
+"    S'il n'y a pas d'option, l'état de toutes les tâches actives est affiché.\n"
+"    \n"
+"    Options :\n"
+"      -l\tafficher les IDs de processus en plus des informations normales\n"
+"      -n\tafficher seulement les processus dont l'état a changé depuis la dernière\n"
+"    \tnotification\n"
+"      -p\tafficher seulement les IDs de processus\n"
+"      -r\trestreindre l'affichage aux tâches en cours d'exécution\n"
+"      -s\trestreindre l'affichage aux tâches stoppées\n"
+"    \n"
+"    Si « -x » est fournie, la COMMANDE est lancée après que toutes les spécifications\n"
+"    qui apparaissent dans ARGs ont été remplacées par l'ID de processus du leader de groupe\n"
+"    de processus de cette tâche.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins qu'une option non valable ne soit donnée ou qu'une erreur ne survienne.\n"
+"    Si « -x » est utilisée, le code de sortie de la COMMANDE est renvoyé."
 
 #: builtins.c:879
 msgid ""
@@ -3247,9 +3301,21 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option or JOBSPEC is given."
 msgstr ""
+"Retire des tâches du shell courant.\n"
+"    \n"
+"    Retire chaque argument JOBSPEC de la table des tâches actives.  Sans\n"
+"    JOBSPEC, le shell utilise sa propre notion de tâche courante.\n"
+"    \n"
+"    Options :\n"
+"      -a\tretirer toutes lestâches si JOBSPEC n'est pas fourni\n"
+"      -h\tmarque chaque JOBSPEC de façon que SIGHUP ne soit pas envoyé à la tâche\n"
+"    \tsi le shell reçoit un SIGHUP\n"
+"      -r\tretire seulement les tâches en cours de fonctionnement\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins qu'une option ou un JOBSPEC non valable ne soit donné."
 
 #: builtins.c:898
-#, fuzzy
 msgid ""
 "Send a signal to a job.\n"
 "    \n"
@@ -3270,27 +3336,32 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or an error occurs."
 msgstr ""
-"Envoie le signal SIGSPEC aux processus désignés par PID (ou JOBSPEC). Si\n"
-"    SIGSPEC n'est pas fourni, alors SIGTERM est utilisé. L'argument « -l »\n"
-"    permet de lister les noms de signaux. Si des arguments sont donnés à « -"
-"l »,\n"
-"    ils sont supposés être des numéros de signaux pour lesquels les noms \n"
-"    doivent être affichés. « kill » est une commande intégrée au shell pour\n"
-"    deux raisons : il permet d'utiliser des numéros de tâche plutôt que des\n"
-"    numéros de processus et, si vous avez atteint la limite du nombre de\n"
-"    processus que vous pouvez créer, vous n'avez pas besoin de générer un\n"
-"    nouveau processus pour en tuer un autre."
+"Envoie un signal à une tâche.\n"
+"    \n"
+"    Envoie le signal nommé par SIGSPEC ou SIGNUM au processus identifié par PID ou JOBSPEC.\n"
+"    Si SIGSPEC et SIGNUM ne sont pas donnés, alors SIGTERM est envoyé.\n"
+"    \n"
+"    Options :\n"
+"      -s sig\tSIG est un nom de signal\n"
+"      -n sig\tSIG est un numéro de signal\n"
+"      -l\tafficher la liste des noms de signaux ; si des arguments suivent « -l », ils sont supposés être\n"
+"    \tdes numéro de signaux pour lesquels les noms doivent être affichés\n"
+"    \n"
+"    « kill » est une commande intégrée pour deux raisons : elle permet aux IDs de tâches d'être utilisées\n"
+"    à la place des IDs de processus et elle permet aux processus d'être tués si la limite du nombre de processus\n"
+"    que vous pouvez créer est atteinte.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins qu'une option non valable soit donnée ou qu'une erreur ne survienne."
 
 #: builtins.c:921
-#, fuzzy
 msgid ""
 "Evaluate arithmetic expressions.\n"
 "    \n"
 "    Evaluate each ARG as an arithmetic expression.  Evaluation is done in\n"
 "    fixed-width integers with no check for overflow, though division by 0\n"
 "    is trapped and flagged as an error.  The following list of operators is\n"
-"    grouped into levels of equal-precedence operators.  The levels are "
-"listed\n"
+"    grouped into levels of equal-precedence operators.  The levels are listed\n"
 "    in order of decreasing precedence.\n"
 "    \n"
 "    \tid++, id--\tvariable post-increment, post-decrement\n"
@@ -3326,7 +3397,9 @@ msgid ""
 "    Exit Status:\n"
 "    If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise.."
 msgstr ""
-"chaque ARG est une expression arithmétique à évaluer. L'évaluation\n"
+"Évalue des expressions arithmétiques.\n"
+"    \n"
+"    Chaque ARG est une expression arithmétique à évaluer. L'évaluation\n"
 "    est faite avec des entiers de largeur fixe sans vérification de\n"
 "    dépassement, mais la division par zéro est interceptée et\n"
 "    signalée comme une erreur. La liste suivante d'opérateurs\n"
@@ -3335,7 +3408,8 @@ msgstr ""
 "    \n"
 "    \tid++, id--\tpost-incrément ou post-décrément de variable\n"
 "    \t++id, --id\tpré-incrément ou pré-décrément de variable\n"
-"    \t-, +\t\tmoins, plus    \t!, ~\t\tnégations logique et binaire\n"
+"    \t-, +\t\tmoins, plus\n"
+"    \t!, ~\t\tnégations logique et binaire\n"
 "    \t**\t\tmise en exposant\n"
 "    \t*, /, %\t\tmultiplication, division, reste de la division\n"
 "    \t+, -\t\taddition, soustraction\n"
@@ -3354,36 +3428,29 @@ msgstr ""
 "    \t&=, ^=, |=\taffectation\n"
 "    \n"
 "    Les variables de shell sont autorisées comme opérandes. Le nom de la\n"
-"    variable est remplacé par sa valeur (contrainte à un entier de largeur "
-"fixe)\n"
-"    à l'intérieur d'une expression. La variable n'a pas besoin d'avoir son "
-"attribut\n"
+"    variable est remplacé par sa valeur (contrainte à un entier de largeur fixe)\n"
+"    à l'intérieur d'une expression. La variable n'a pas besoin d'avoir son attribut\n"
 "    d'entier activé pour être utilisée dans une expression.\n"
 "    \n"
-"    Les opérateurs sont évalués dans leur ordre de priorité. Les sous-"
-"expressions entre\n"
-"    parenthèses sont évaluées en premier et peuvent être prioritaires sur "
-"les règles\n"
+"    Les opérateurs sont évalués dans leur ordre de priorité. Les sous-expressions entre\n"
+"    parenthèses sont évaluées en premier et peuvent être prioritaires sur les règles\n"
 "    ci-dessus.\n"
 "    \n"
+"    Code de sortie :\n"
 "    Si le dernier ARG est évalué à 0, « let » renvoie 1, sinon 0 est renvoyé."
 
 #: builtins.c:966
-#, fuzzy
 msgid ""
 "Read a line from the standard input and split it into fields.\n"
 "    \n"
 "    Reads a single line from the standard input, or from file descriptor FD\n"
-"    if the -u option is supplied.  The line is split into fields as with "
-"word\n"
+"    if the -u option is supplied.  The line is split into fields as with word\n"
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
-"    the last NAME.  Only the characters found in $IFS are recognized as "
-"word\n"
+"    the last NAME.  Only the characters found in $IFS are recognized as word\n"
 "    delimiters.\n"
 "    \n"
-"    If no NAMEs are supplied, the line read is stored in the REPLY "
-"variable.\n"
+"    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
 "    Options:\n"
 "      -a array\tassign the words read to sequential indices of the array\n"
@@ -3395,15 +3462,13 @@ msgid ""
 "      -n nchars\treturn after reading NCHARS characters rather than waiting\n"
 "    \t\tfor a newline, but honor a delimiter if fewer than NCHARS\n"
 "    \t\tcharacters are read before the delimiter\n"
-"      -N nchars\treturn only after reading exactly NCHARS characters, "
-"unless\n"
+"      -N nchars\treturn only after reading exactly NCHARS characters, unless\n"
 "    \t\tEOF is encountered or read times out, ignoring any delimiter\n"
 "      -p prompt\toutput the string PROMPT without a trailing newline before\n"
 "    \t\tattempting to read\n"
 "      -r\t\tdo not allow backslashes to escape any characters\n"
 "      -s\t\tdo not echo input coming from a terminal\n"
-"      -t timeout\ttime out and return failure if a complete line of input "
-"is\n"
+"      -t timeout\ttime out and return failure if a complete line of input is\n"
 "    \t\tnot read withint TIMEOUT seconds.  The value of the TMOUT\n"
 "    \t\tvariable is the default timeout.  TIMEOUT may be a\n"
 "    \t\tfractional number.  If TIMEOUT is 0, read returns success only\n"
@@ -3412,50 +3477,47 @@ msgid ""
 "      -u fd\t\tread from file descriptor FD instead of the standard input\n"
 "    \n"
 "    Exit Status:\n"
-"    The return code is zero, unless end-of-file is encountered, read times "
-"out,\n"
+"    The return code is zero, unless end-of-file is encountered, read times out,\n"
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
-"Une ligne est lue depuis l'entrée standard ou depuis le descripteur de "
-"fichier\n"
-"    FD si l'option « -u » est fournie. Le premier mot est affecté au premier "
-"NAME,\n"
-"    le second mot au second NAME, et ainsi de suite, les mots restants étant "
-"affectés\n"
-"    au dernier NAME. Seuls les caractères situés dans « $IFS » sont reconnus "
-"comme\n"
-"    étant des délimiteurs de mots. Si aucun NAME n'est fourni, la ligne est "
-"conservée\n"
-"    dans la variable REPLY. L'option « -r » signifie « entrée brute » et la "
-"neutralisation \n"
-"    par barre oblique inverse est désactivée. L'option « -d » indique de "
-"continuer\"    la lecture jusqu'à ce que le premier caractère de DELIM soit "
-"lu plutôt que\n"
-"    le retour à la ligne. Si « -p » est fourni, la chaîne PROMPT est "
-"affichée\n"
-"    sans retour à la ligne final avant la tentative de lecture. Si « -a » "
-"est fourni,\n"
-"    les mots lus sont affectés en séquence aux indices du TABLEAU, en "
-"commençant\n"
-"    à zéro. Si « -e » est fourni et que le shell est interactif, « readline "
-"» est\n"
-"    utilisé pour obtenir la ligne. Si « -n » est fourni avec un argument "
-"NCHARS non nul,\n"
-"    « read » se termine après que NCHARS caractères ont été lus. L'option « -"
-"s »\n"
-"    permet aux données venant d'un terminal de ne pas être répétées.\n"
-"    \n"
-"    L'option « -t » permet à « read » de se terminer avec une erreur si une "
-"ligne\n"
-"    entière de données ne lui a pas été fournie avant le DÉLAI d'expiration. "
-"Si la\n"
-"    variable TMOUT est définie, sa valeur est le délai d'expiration par "
-"défaut. Le code\n"
-"    de retour est zéro à moins qu'une fin de fichier ne soit rencontrée, que "
-"« read »\n"
-"    atteigne le délai d'expiration ou qu'un descripteur de fichier incorrect "
-"ne soit\n"
-"    fourni pour l'argument « -u »."
+"Lit une ligne depuis l'entrée standard et la découper en morceaux.\n"
+"    \n"
+"    Lit une simple ligne depuis l'entrée standard ou depuis le descripteur de fichier FD\n"
+"    si l'option « -u » est fournie.  La ligne est découpée en morceaux comme des mots,\n"
+"    et le premier mot est assigné au premier NOM, le deuxième mot au deuxième NOM,\n"
+"    et ainsi de suite, le dernier NOM récupérant la liste des mots restants.\n"
+"    Seul les caractères trouvés dans $IFS sont reconnus comme délimiteurs\n"
+"    de mots\n"
+"    \n"
+"    Si aucun NOM n'est fourni, la ligne lue est stockée dans la variable REPLY.\n"
+"    \n"
+"    Options :\n"
+"      -a tableau\taffecter les indices de la variable tableau séquentiellement aux mots lus,\n"
+"    \t\ten commançant à 0\n"
+"      -d délim\tcontinuer jusqu'à ce que le premier caractère de DELIM soit lu,\n"
+"    \t\tau lieu du retour à la ligne\n"
+"      -e\t\tutiliser « Readline » pour obtenir la ligne dans un shell interactif\n"
+"      -i texte\tUtiliser TEXTE comme texte initial pour « Readline »\n"
+"      -n n\tterminer après avoir lu N caractères plutôt que d'attendre\n"
+"    \t\tun retour à la ligne, mais obéir à un délimiteur si moins de N caractères\n"
+"    \t\tsont lus avant le délimiteur\n"
+"      -N n\ttermine seulement après avoir lu exactement N caractères, à moins\n"
+"    \t\tque le caractère EOF soit recontré ou que le délai de lecture n'expire, en ignorant tout délimiteur\n"
+"      -p prompt\taffiche la chaîne PROMPT sans retour à la ligne final, avant de tenter une\n"
+"    \t\tlecture\n"
+"      -r\t\tne pas permettre aux barres obliques inverses de se comporter comme des caractères d'échappement\n"
+"      -s\t\tne pas répéter l'entrée provenant d'un terminal\n"
+"      -t timeout\texpire et renvoie un code d'échec si une ligne d'entrée complète n'est pas\n"
+"    \t\tlue en moins de TIMEOUT secondes.  La valeur de la variable TIMEOUT\n"
+"    \t\test le délai d'expiration par défaut.  TIMEOUT peut être un nombre à virgule\n"
+"    \t\tSi TIMEOUT est à, la lecture renvoie un code de succès seulement\n"
+"    \t\tsi l'entrée est disponible sur le descripteut de fichier.  Le code\n"
+"    \t\tde sortie est supérieur à 128 si le délai a expiré\n"
+"      -u fd\t\tlire depuis le descripteur de fichier FD plutôt que l'entrée standard\n"
+"    \n"
+"    Code de sortie :\n"
+"    Le code de retour est 0, à moins qu'une fin de fichier ne survienne, que le délai expire,\n"
+"    ou qu'un descripteur de fichier non valable ne soit fourni comme argument à « -u »."
 
 #: builtins.c:1009
 msgid ""
@@ -3468,9 +3530,16 @@ msgid ""
 "    Exit Status:\n"
 "    Returns N, or failure if the shell is not executing a function or script."
 msgstr ""
+"Termine depuis une fonction du shell.\n"
+"    \n"
+"    Entraine l'arrêt d'une fonction ou d'un script sourcé, avec le code de retour spécifié par N.\n"
+"    Si N est omis, le code de retour est celui de la dernière commande exécutée\n"
+"    à l'intérieur de la fonction ou du script\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie N ou le code d'échec si le shell n'est pas en train d'exécuter une fonction ou un script."
 
 #: builtins.c:1022
-#, fuzzy
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -3513,8 +3582,7 @@ msgid ""
 "              physical     same as -P\n"
 "              pipefail     the return value of a pipeline is the status of\n"
 "                           the last command to exit with a non-zero status,\n"
-"                           or zero if no command exited with a non-zero "
-"status\n"
+"                           or zero if no command exited with a non-zero status\n"
 "              posix        change the behavior of bash where the default\n"
 "                           operation differs from the Posix standard to\n"
 "                           match the standard\n"
@@ -3551,15 +3619,17 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given."
 msgstr ""
-"    -a  Marquer pour l'export toutes les variables qui sont modifiées ou "
-"créées.\n"
-"        -b  Avertir immédiatement à la fin d'une tâche.\n"
-"        -e  Terminer immédiatement si une commande s'arrête avec un code de "
-"retour non nul.\n"
+"Définit ou invalide des valeurs d'options et des paramètres de position du shell    \n"
+"    Change la valeur des attributs du shell et des paramètres de position, ou\n"
+"    affiche les noms et valeurs des variables du shell.\n"
+"    \n"
+"    Options :\n"
+"        -a  Marquer pour l'export toutes les variables qui sont modifiées ou créées.\n"
+"        -b  Avertir immédiatement de la fin d'une tâche.\n"
+"        -e  Terminer immédiatement si une commande s'arrête avec un code de retour non nul.\n"
 "        -f  Désactiver la génération de nom de fichier (globbing).\n"
 "        -h  Mémoriser l'emplacement des commandes après leur recherche.\n"
-"        -k  Placer dans l'environnement tous les arguments d'affectation "
-"pour une commande,\n"
+"        -k  Placer dans l'environnement tous les arguments d'affectation pour une commande,\n"
 "            pas seulement ceux qui précèdent le nom de la commande.\n"
 "        -m  Activer le contrôle de tâche.\n"
 "        -n  Lire les commandes, mais ne pas les exécuter.\n"
@@ -3574,11 +3644,9 @@ msgstr ""
 "                hashall      identique à -h\n"
 "                histexpand   identique à -H\n"
 "                history      activer l'historique des commandes\n"
-"                ignoreeof    ne pas terminer le shell à la lecture d'un « "
-"EOF »\n"
+"                ignoreeof    ne pas terminer le shell à la lecture d'un « EOF »\n"
 "                interactive-comments\n"
-"                             permet aux commentaires d'apparaître dans les "
-"commandes interactives\n"
+"                             permet aux commentaires d'apparaître dans les commandes interactives\n"
 "                keyword      identique à -k\n"
 "                monitor      identique à -m\n"
 "                noclobber    identique à -C\n"
@@ -3589,58 +3657,42 @@ msgstr ""
 "                nounset      identique à -u\n"
 "                onecmd       identique à -t\n"
 "                physical     identique à -P\n"
-"                pipefail     le code de retour d'un tube est celui de la "
-"dernière commande\n"
+"                pipefail     le code de retour d'un tube est celui de la dernière commande\n"
 "                             qui s'est terminée avec un code non nul,\n"
-"                             ou zéro si aucune commande ne s'est arrêtée "
-"avec un code non nul.\n"
-"                posix        modifie le comportement de « bash » pour qu'il "
-"se comporte comme\n"
-"                             le standard 1003.2 aux endroits où il diffère "
-"par défaut.\n"
+"                             ou zéro si aucune commande ne s'est arrêtée avec un code non nul.\n"
+"                posix        modifie le comportement de « bash » pour qu'il se comporte comme\n"
+"                             le standard 1003.2 aux endroits où il diffère par défaut.\n"
 "                privileged   identique à -p\n"
 "                verbose      identique à -v\n"
 "                vi           utiliser une édition de ligne façon « vi »\n"
 "                xtrace       identique à -x\n"
-"        -p  Option activée lorsque les n° d'identifiants utilisateurs réels "
-"et effectifs ne\n"
-"            sont pas les mêmes. Désactive le traitement du fichier $ENV et "
-"l'import des\n"
-"            fonctions du shell. Désactiver cette option permet de définir "
-"les uid et gid\n"
-"            effectifs à la valeur des uid et gid réels.        -t  Terminer "
-"après la lecture et l'exécution d'une commande.\n"
-"        -u  Traiter les variables non définies comme des erreurs lors de la "
-"substitution.\n"
+"        -p  Option activée lorsque les n° d'identifiants utilisateurs réels et effectifs ne\n"
+"            sont pas les mêmes. Désactive le traitement du fichier $ENV et l'import des\n"
+"            fonctions du shell. Désactiver cette option permet de définir les uid et gid\n"
+"            effectifs à la valeur des uid et gid réels.\n"
+"        -t  Terminer après la lecture et l'exécution d'une commande.\n"
+"        -u  Traiter les variables non définies comme des erreurs lors de la substitution.\n"
 "        -v  Afficher les lignes d'entrée du shell à leur lecture.\n"
-"        -x  Afficher les commandes et leurs arguments au moment de leur "
-"exécution.\n"
-"        -B  Effectuer l'expansion des accolades        -C  Si définit, "
-"empêche les fichiers réguliers existants d'être écrasés par une\n"
+"        -x  Afficher les commandes et leurs arguments au moment de leur exécution.\n"
+"        -B  Effectuer l'expansion des accolades\n"
+"        -C  Si définit, empêche les fichiers réguliers existants d'être écrasés par une\n"
 "            redirection de la sortie.\n"
-"        -E  Si définit, l'interception ERR est héritée par les fonctions du "
-"shell.\n"
-"        -H  Activer la substitution d'historique façon « ! ». Ceci est actif "
-"par défaut\n"
+"        -E  Si définit, l'interception ERR est héritée par les fonctions du shell.\n"
+"        -H  Activer la substitution d'historique façon « ! ». Ceci est actif par défaut\n"
 "            lorsque le shell est interactif.\n"
-"        -P  Si définit, les liens symboliques ne sont pas suivis lors de "
-"l'exécution des\n"
+"        -P  Si définit, les liens symboliques ne sont pas suivis lors de l'exécution des\n"
 "            commandes telles que « cd » qui changent le répertoire courant.\n"
-"        -T  Si définit, l'interception DEBUG est héritée par les fonctions "
-"du shell.\n"
-"        -   Affecter tous les arguments restants aux paramètres de "
-"position.\n"
+"        -T  Si définit, l'interception DEBUG est héritée par les fonctions du shell.\n"
+"        -   Affecter tous les arguments restants aux paramètres de position.\n"
 "            Les options « -x » et « -v » sont désactivées.\n"
 "    \n"
-"    Ces indicateurs peuvent être désactivés en utilisant « + » plutôt que « "
-"- ». Ils peuvent\n"
-"    être utilisés lors de l'appel au shell. Le jeu d'indicateurs actuel peut "
-"être trouvé\n"
-"    dans « $- ».  Les n ARGs restants sont des paramètres de position et "
-"sont affectés,\n"
-"    dans l'ordre, à $1, $2, .. $n.  Si aucun ARG n'est donné, toutes les "
-"variables du shell\n"
-"    sont affichées."
+"    Ces indicateurs peuvent être désactivés en utilisant « + » plutôt que « - ». Ils peuvent\n"
+"    être utilisés lors de l'appel au shell. Le jeu d'indicateurs actuel peut être trouvé\n"
+"    dans « $- ».  Les n ARGs restants sont des paramètres de position et sont affectés,\n"
+"    dans l'ordre, à $1, $2, .. $n.  Si aucun ARG n'est donné, toutes les variables du shell\n"
+"    sont affichées.    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins qu'une option non valable ne soit donnée."
 
 #: builtins.c:1104
 msgid ""
@@ -3652,8 +3704,7 @@ msgid ""
 "      -f\ttreat each NAME as a shell function\n"
 "      -v\ttreat each NAME as a shell variable\n"
 "    \n"
-"    Without options, unset first tries to unset a variable, and if that "
-"fails,\n"
+"    Without options, unset first tries to unset a variable, and if that fails,\n"
 "    tries to unset a function.\n"
 "    \n"
 "    Some variables cannot be unset; also see `readonly'.\n"
@@ -3661,14 +3712,28 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or a NAME is read-only."
 msgstr ""
+"Annule des valeurs ou des attributs de variables et de fonctions du shell.\n"
+"    \n"
+"    Pour chaque NOM, annule la variable ou fonction correspondante.\n"
+"    \n"
+"    Options :\n"
+"      -f\ttraite chaque NOM comme une fonction du shell\n"
+"      -v\ttraite chaque NOM comme une variable du shell\n"
+"    \n"
+"    Sans option, « unset » essaye d'abord d'annuler une variable et, \n"
+"    en cas d'échec, essaye d'annuler la fonction.\n"
+"    \n"
+"    Certaines variables ne peuvent pas être annulées ; consultez aussi « readonly ».\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le code de succès à moins qu'une option non valable ne soit donnée ou que NOM soit en lecture seule."
 
 #: builtins.c:1124
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
 "    Marks each NAME for automatic export to the environment of subsequently\n"
-"    executed commands.  If VALUE is supplied, assign VALUE before "
-"exporting.\n"
+"    executed commands.  If VALUE is supplied, assign VALUE before exporting.\n"
 "    \n"
 "    Options:\n"
 "      -f\trefer to shell functions\n"
@@ -3680,6 +3745,20 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
+"Définit l'attribut « export » pour des variables du shell.\n"
+"    \n"
+"    Marque chaque NOM pour export automatique vers l'environnement des commandes\n"
+"    exécutées ultérieurement.  Si VALEUR est fournie, affecte la VALEUR avant l'export.\n"
+"    \n"
+"    Options :\n"
+"      -f\tse référer aux fonctions du shell\n"
+"      -n\tenlève la propriété d'export de chaque NOM\n"
+"      -p\taffiche une liste de toutes les variables et fonctions exportées\n"
+"    \n"
+"    L'argument « -- » désactive tout traitement postérieur d'options.\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le code de succès à moins qu'une option non valable ne soit données ou que NOM ne soit pas valable."
 
 #: builtins.c:1143
 msgid ""
@@ -3700,6 +3779,22 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
+"Marque des variables du shell comme non modifiables.\n"
+"    \n"
+"    Marque chaque NOM comme étant en lecture seule ; les valeurs de ces NOMs ne peuvent plus\n"
+"    être modifiées par des affectations ultérieures.  Si VALEUR est founie, lui affecter la VALEUR avant le\n"
+"    passage en lecture seule.\n"
+"    \n"
+"    Options :\n"
+"      -a\tse référer à des variables étant des tableaux indexés\n"
+"      -A\tse référer à des variables étant des tableaux associatifs\n"
+"      -f\tse référer à des fonctions du shell\n"
+"      -p\tafficher une liste des toutes les fonctions et variables en lecture seule\n"
+"    \n"
+"    Un argument « -- » désactive tout traitement postérieur d'options.\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le code de succès à moins qu'une options non valable ne soit données ou que NOM ne soit pas valable."
 
 #: builtins.c:1164
 msgid ""
@@ -3711,9 +3806,15 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless N is negative or greater than $#."
 msgstr ""
+"Décale des paramètres de position.\n"
+"    \n"
+"    Renomme les paramètres de position $N+1,$N+2 ... à $1,$2 ...  Si N n'est pas\n"
+"    donné, il est supposé égal à 1.\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le code de succès à moins que N soit négatif ou supérieur à $#."
 
 #: builtins.c:1176 builtins.c:1191
-#, fuzzy
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -3726,12 +3827,16 @@ msgid ""
 "    Returns the status of the last command executed in FILENAME; fails if\n"
 "    FILENAME cannot be read."
 msgstr ""
-"Lit et exécute les commandes depuis le fichier FILENAME puis se termine. Les "
-"chemins\n"
-"    dans $PATH sont utilisés pour trouver le répertoire contenant FILENAME.\n"
-"    Si des ARGUMENTS sont fournis, ils deviennent les paramètres de "
-"position\n"
-"    lorsque FILENAME est exécuté."
+"Execute des commandes depuis un fichier dans le shell actuel.\n"
+"    \n"
+"    Lit et exécute des commandes depuis NOMFICHIER dans le shell actuel.  Les\n"
+"    éléments dans $PATH sont utilisés pour trouver le répertoire contenant NOMFICHIER.\n"
+"    Si des ARGUMENTS sont fournis, ils deviennent les paramètres de position\n"
+"    lorsque NOMFICHIER est exécuté.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de la dernière commande exécutée dans NOMFICHIER, ou le code\n"
+"    d'échec si NOMFICHIER ne peut pas être lu."
 
 #: builtins.c:1207
 msgid ""
@@ -3746,9 +3851,18 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
+"Suspend l'exécution du shell.\n"
+"    \n"
+"    Suspend l'exécution de ce shell jusqu'à qu'il reçoive un signal SIGCONT.\n"
+"    À moins que ce soit forcé, les shell de connexion ne peuvent pas être suspendus.\n"
+"    \n"
+"    Options :\n"
+"      -f\tforce la suspension, même si le shell est un shell de connexion\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le code de succès à moins que le contrôle de tâche ne soit pas activé ou qu'une erreur survienne."
 
 #: builtins.c:1223
-#, fuzzy
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -3779,8 +3893,7 @@ msgid ""
 "      -x FILE        True if the file is executable by you.\n"
 "      -O FILE        True if the file is effectively owned by you.\n"
 "      -G FILE        True if the file is effectively owned by your group.\n"
-"      -N FILE        True if the file has been modified since it was last "
-"read.\n"
+"      -N FILE        True if the file has been modified since it was last read.\n"
 "    \n"
 "      FILE1 -nt FILE2  True if file1 is newer than file2 (according to\n"
 "                       modification date).\n"
@@ -3801,8 +3914,7 @@ msgid ""
 "      STRING1 != STRING2\n"
 "                     True if the strings are not equal.\n"
 "      STRING1 < STRING2\n"
-"                     True if STRING1 sorts before STRING2 "
-"lexicographically.\n"
+"                     True if STRING1 sorts before STRING2 lexicographically.\n"
 "      STRING1 > STRING2\n"
 "                     True if STRING1 sorts after STRING2 lexicographically.\n"
 "    \n"
@@ -3824,7 +3936,9 @@ msgid ""
 "    Returns success if EXPR evaluates to true; fails if EXPR evaluates to\n"
 "    false or an invalid argument is given."
 msgstr ""
-"Se termine avec le code de retour 0 (vrai) ou 1 (faux) selon\n"
+"Évalue une expression conditionnelle.\n"
+"    \n"
+"    Se termine avec le code de retour 0 (vrai) ou 1 (faux) selon\n"
 "    le résultat de l'évaluation de EXPR. Les expressions peuvent être\n"
 "    unaires ou binaires. Les expressions unaires sont souvent utilisées\n"
 "    pour examiner l'état d'un fichier. Il existe aussi des opérateurs de\n"
@@ -3834,8 +3948,7 @@ msgstr ""
 "    \n"
 "        -a FICHIER     Vrai si le fichier existe.\n"
 "        -b FICHIER     Vrai si le fichier est un fichier spécial de bloc\n"
-"        -c FICHIER     Vrai si le fichier est un fichier spécial de "
-"caractères\n"
+"        -c FICHIER     Vrai si le fichier est un fichier spécial de caractères\n"
 "        -d FICHIER     Vrai si le fichier est un répertoire.\n"
 "        -e FICHIER     Vrai si le fichier existe\n"
 "        -f FICHIER     Vrai si le fichier existe et est un fichier régulier\n"
@@ -3851,17 +3964,12 @@ msgstr ""
 "        -u FICHIER     Vrai si le fichier est « set-user-id »\n"
 "        -w FICHIER     Vrai si le fichier peut être écrit par vous\n"
 "        -x FICHIER     Vrai si le fichier est exécutable par vous\n"
-"        -O FICHIER     Vrai si le fichier est effectivement possédé par "
-"vous\n"
-"        -G FICHIER     Vrai si le fichier est effectivement possédé par "
-"votre groupe\n"
-"        -N FICHIER     Vrai si le fichier a été modifié depuis la dernière "
-"fois qu'il a été lu\n"
-" FICHIER1 -nt FICHIER2 Vrai si le fichier1 est plus récent que le fichier2 "
-"(selon la date de modification)\n"
+"        -O FICHIER     Vrai si le fichier est effectivement possédé par vous\n"
+"        -G FICHIER     Vrai si le fichier est effectivement possédé par votre groupe\n"
+"        -N FICHIER     Vrai si le fichier a été modifié depuis la dernière fois qu'il a été lu\n"
+" FICHIER1 -nt FICHIER2 Vrai si le fichier1 est plus récent que le fichier2 (selon la date de modification)\n"
 " FICHIER1 -ot FICHIER2 Vrai si le fichier1 est plus vieux que le fichier2\n"
-" FICHIER1 -ef FICHIER2 Vrai si le fichier1 est un lien physique vers le "
-"fichier2\n"
+" FICHIER1 -ef FICHIER2 Vrai si le fichier1 est un lien physique vers le fichier2\n"
 "    \n"
 "    Opérateurs sur des chaînes :\n"
 "    \n"
@@ -3874,11 +3982,9 @@ msgstr ""
 "        CHAÎNE1 != CHAÎNE2\n"
 "                      Vrai si les chaînes ne sont pas égales\n"
 "        CHAÎNE1 < CHAÎNE2\n"
-"                      Vrai si le tri lexicographique place la chaîne1 en "
-"premier\n"
+"                      Vrai si le tri lexicographique place la chaîne1 en premier\n"
 "        CHAÎNE1 > CHAÎNE2\n"
-"                      Vrai si le tri lexicographique place la chaîne1 en "
-"deuxième\n"
+"                      Vrai si le tri lexicographique place la chaîne1 en deuxième\n"
 "    \n"
 "    Autres opérateurs :\n"
 "    \n"
@@ -3890,41 +3996,47 @@ msgstr ""
 "        arg1 OP arg2   Tests arithmétiques. OP peut être -eq, -ne,\n"
 "                       -lt, -le, -gt ou -ge.\n"
 "    \n"
-"    Les opérateurs arithmétiques binaires renvoient « vrai » si ARG1 est "
-"égal,\n"
-"    non-égal, inférieur, inférieur ou égal, supérieur, supérieur ou égal à "
-"ARG2."
+"    Les opérateurs arithmétiques binaires renvoient « vrai » si ARG1 est égal,\n"
+"    non-égal, inférieur, inférieur ou égal, supérieur, supérieur ou égal à ARG2.    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès si EXPR est vraie, le code d'échec si EXPR est fausse ou si\n"
+"    un argument non valable est donné."
 
 #: builtins.c:1299
-#, fuzzy
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
 "    This is a synonym for the \"test\" builtin, but the last argument must\n"
 "    be a literal `]', to match the opening `['."
 msgstr ""
-"Ceci est un synonyme de la primitive « test », mais le dernier argument\n"
+"Évalue une expression conditionnelle.\n"
+"    \n"
+"    Ceci est un synonyme de la primitive « test », mais le dernier argument\n"
 "    doit être le caractère « ] », pour fermer le « [ » correspondant."
 
 #: builtins.c:1308
 msgid ""
 "Display process times.\n"
 "    \n"
-"    Prints the accumulated user and system times for the shell and all of "
-"its\n"
+"    Prints the accumulated user and system times for the shell and all of its\n"
 "    child processes.\n"
 "    \n"
 "    Exit Status:\n"
 "    Always succeeds."
 msgstr ""
+"Affiche les temps des processus.\n"
+"    \n"
+"    Affiche le cumul des temps utilisateur et système pour le shell et\n"
+"    tous ses processus fils.\n"
+"    \n"
+"    Code de retour :\n"
+"    Toujours le code de succès."
 
 #: builtins.c:1320
-#, fuzzy
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
-"    Defines and activates handlers to be run when the shell receives "
-"signals\n"
+"    Defines and activates handlers to be run when the shell receives signals\n"
 "    or other conditions.\n"
 "    \n"
 "    ARG is a command to be read and executed when the shell receives the\n"
@@ -3933,51 +4045,51 @@ msgid ""
 "    value.  If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
 "    shell and by the commands it invokes.\n"
 "    \n"
-"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  "
-"If\n"
+"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  If\n"
 "    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.\n"
 "    \n"
-"    If no arguments are supplied, trap prints the list of commands "
-"associated\n"
+"    If no arguments are supplied, trap prints the list of commands associated\n"
 "    with each signal.\n"
 "    \n"
 "    Options:\n"
 "      -l\tprint a list of signal names and their corresponding numbers\n"
 "      -p\tdisplay the trap commands associated with each SIGNAL_SPEC\n"
 "    \n"
-"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal "
-"number.\n"
+"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal number.\n"
 "    Signal names are case insensitive and the SIG prefix is optional.  A\n"
 "    signal may be sent to the shell with \"kill -signal $$\".\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless a SIGSPEC is invalid or an invalid option is "
-"given."
+"    Returns success unless a SIGSPEC is invalid or an invalid option is given."
 msgstr ""
-"La commande ARG doit être lue et exécutée lorsque le shell reçoit le\n"
+"Intercepter des signaux et d'autres événements.\n"
+"    \n"
+"    Définit et active des gestionnaires à lancer lorsque le shell reçoit des signaux\n"
+"    ou sous d'autres conditions.\n"
+"    \n"
+"    La commande ARG doit être lue et exécutée lorsque le shell reçoit le\n"
 "    signal SIGNAL_SPEC. Si ARG est absent (et qu'un unique SIGNAL_SPEC)\n"
 "    est fourni) ou égal à « - », tous les signaux spécifié sont remis\n"
-"    à leur valeur d'origine. Si ARG est une chaîne vide, tous les "
-"SIGNAL_SPEC\n"
-"    sont ignorés par le shell et les commandes qu'il appelle. Si "
-"SIGNAL_SPEC\n"
-"    est EXIT (0), la commande ARG est exécutée à la sortie du shell. Si un\n"
-"    SIGNAL_SPEC est DEBUG, ARG est exécuté après chaque commande simple. \n"
-"    Si l'option « -p » est fournie, les commandes d'interception associées "
-"à\n"
-"    chaque SIGNAL_SPEC sont affichées. Si aucun argument n'est fourni ou "
-"si \n"
-"    « -p » est fourni seul, « trap » affiche la liste des commandes "
-"associées\n"
-"    à chaque signal. Chaque SIGNAL_SPEC est soit un nom de signal dans "
-"<signal.h>\n"
-"    ou un numéro de signal. Les noms de signaux sont insensibles à la casse "
-"et\n"
-"    le préfixe « SIG » est facultatif. « trap -l » affiche la liste des "
-"signaux\n"
-"    et leur numéros correspondants. Remarquez qu'un signal peut être envoyé "
-"au\n"
-"    shell avec « kill -signal $$ »."
+"    à leur valeur d'origine. Si ARG est une chaîne vide, tous les SIGNAL_SPEC\n"
+"    sont ignorés par le shell et les commandes qu'il appelle.\n"
+"    \n"
+"    Si SIGNAL_SPEC est EXIT (0), la commande ARG est exécutée à la sortie du shell. Si un\n"
+"    SIGNAL_SPEC est DEBUG, ARG est exécuté après chaque commande simple.\n"
+"    \n"
+"    Si aucun argument n'est fourni, « trap » affiche la liste des commandes associées\n"
+"    à chaque signal.\n"
+"    \n"
+"    Options :\n"
+"      -l\taffiche la liste des noms de signaux et leur numéro correspondant\n"
+"      -p\taffiche les commandes de « trap » associées à chaque SIGNAL_SPEC\n"
+"    \n"
+"    Chaque SIGNAL_SPEC est soit un nom de signal dans <signal.h>\n"
+"    ou un numéro de signal. Les noms de signaux sont insensibles à la casse et\n"
+"    le préfixe « SIG » est facultatif. Un signal peut être envoyé au\n"
+"    shell avec « kill -signal $$ ».\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins que SIGSPEC ne soit pas valable ou qu'une option non valable ne soit donnée."
 
 #: builtins.c:1352
 msgid ""
@@ -4005,17 +4117,39 @@ msgid ""
 "      NAME\tCommand name to be interpreted.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success if all of the NAMEs are found; fails if any are not "
-"found."
-msgstr ""
+"    Returns success if all of the NAMEs are found; fails if any are not found."
+msgstr ""
+"Affiche des informations sur le type de commande.\n"
+"    \n"
+"    Pour chaque NOM, indique comment il serait interprêté s'il était\n"
+"    utilisé comme un nom de commande.\n"
+"    \n"
+"    Options :\n"
+"      -a\taffiche tous les emplacements contenant un exécutable nommé NOM;\n"
+"    \tinclut les alias, les commandes intégrées et les fonctions si et seulement si\n"
+"    \tl'option n'est pas « -p » n'est pas utilisée\n"
+"      -f\tdésactive la recherche de fonctions du shell\n"
+"      -P\tforce une recherche de CHEMIN pour chaque NOM, même si c'est un alias,\n"
+"    \tune commande intégrée ou une fonction et renvoie le nom du fichier du disque\n"
+"    \tqui serait exécuté\n"
+"      -p\trenvoie soir le nom du fichier du disque qui serait exécuté,\n"
+"    \tsoit rien si « type -t NOM » ne renvoyait pas « file ».\n"
+"      -t\taffiche un mot unique parmi « alias », « keyword »,\n"
+"    \t« function », « builtin », « file » or « », si NOM est respectivement un alias,\n"
+"    \tun mot réservé du shell, une fonction du shell, une commande intégrée,\n"
+"    \tun fichier du disque ou un nom inconnu\n"
+"    \n"
+"    Arguments :\n"
+"      NOM\tNom de commande à interpréter.\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le code de succès si tous les NOMs sont trouvés, le code d'échec si l'un d'entre eux n'est pas trouvé."
 
 #: builtins.c:1383
-#, fuzzy
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
-"    Provides control over the resources available to the shell and "
-"processes\n"
+"    Provides control over the resources available to the shell and processes\n"
 "    it creates, on systems that allow such control.\n"
 "    \n"
 "    Options:\n"
@@ -4053,14 +4187,16 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
-"« ulimit » fournit un contrôle sur les ressources disponibles aux\n"
-"    processus lancés depuis le shell, sur les systèmes qui permettent\n"
-"    ce genre de contrôles. Si une option est donnée, elle est interprétée\n"
-"    de la sorte :\n"
+"Modifie les limites de ressources du shell.\n"
+"    \n"
+"    Fournit un contrôle sur les ressources disponibles au shell et aux processus\n"
+"    qu'il crée, sur les systèmes qui permettent un tel contrôle. \n"
 "    \n"
+"    Options :\n"
 "        -S\tutiliser la limite de ressources « soft »\n"
 "        -H\tutiliser la limite de ressources « hard »\n"
 "        -a\ttoutes les limites actuelles sont présentées\n"
+"        -b\tla taille du tampon de socket\n"
 "        -c\ttaille maximale des fichiers « core » créés\n"
 "        -d\ttaille maximale du segment de données d'un processus\n"
 "        -e\tla priorité maximale d'ordonnancement (« nice »)\n"
@@ -4078,19 +4214,18 @@ msgstr ""
 "        -v\tla taille de la mémoire virtuelle\n"
 "        -x\tle nombre maximal de verrous de fichiers\n"
 "        \n"
-"    Si LIMIT est fournie, elle est utilisée comme nouvelle valeur de "
-"ressource\n"
-"    Les valeurs spéciales de LIMIT « soft », « hard » et « unlimited » "
-"correspondent\n"
-"    respectivement aux valeurs actuelles de la limite souple, de la limite "
-"dure,\n"
-"    ou à une absence de limite. Sinon la valeur actuelle de la limite est "
-"affichée\n"
-"    Si aucune option n'est donnée, « -f » est supposée. Les valeurs sont\n"
-"    des multiples de 1024 octets, sauf pour « -t » qui prend des secondes,\n"
-"    « -p » qui prend un multiple de 512 octets et « -u » qui prend un "
-"nombre\n"
-"    sans unité."
+"    Si LIMIT est fournie, elle est utilisée comme nouvelle valeur de ressource\n"
+"    Les valeurs spéciales de LIMIT « soft », « hard » et « unlimited » correspondent\n"
+"    respectivement aux valeurs actuelles de la limite souple, de la limite dure,\n"
+"    ou à une absence de limite. Sinon la valeur actuelle de la limite est affichée\n"
+"    Si aucune option n'est donnée, « -f » est supposée.\n"
+"    \n"
+"    Les valeurs sont des multiples de 1024 octets, sauf pour « -t » qui prend des secondes,\n"
+"    « -p » qui prend un multiple de 512 octets et « -u » qui prend un nombre\n"
+"    de processus sans unité.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins qu'une option non valable ne soit fournie ou qu'une erreur ne survienne."
 
 #: builtins.c:1428
 msgid ""
@@ -4109,6 +4244,20 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless MODE is invalid or an invalid option is given."
 msgstr ""
+"Affiche ou définit le masque de mode de fichier.\n"
+"    \n"
+"    Définit le masque de création de fichier comme étant MODE.  Si MODE est omis, affiche\n"
+"    la valeur courante du MASQUE.\n"
+"    \n"
+"    Si MODE commence par un chiffre, il est interprété comme un nombre octal ;\n"
+"    sinon comme une chaîne de symboles de mode comme ceux acceptés par chmod(1).\n"
+"    \n"
+"    Options :\n"
+"      -p\tsi MODE est omis, afficher sous une forme réutilisable comme une entrée\n"
+"      -S\tafficher sous forme symbolique, sinon la sortie octale est utilisée\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le code de succès à moins que MODE ne soit pas valable ou qu'une option non valable ne soit donnée."
 
 #: builtins.c:1448
 msgid ""
@@ -4117,18 +4266,25 @@ msgid ""
 "    Waits for the process identified by ID, which may be a process ID or a\n"
 "    job specification, and reports its termination status.  If ID is not\n"
 "    given, waits for all currently active child processes, and the return\n"
-"    status is zero.  If ID is a a job specification, waits for all "
-"processes\n"
+"    status is zero.  If ID is a a job specification, waits for all processes\n"
 "    in the job's pipeline.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns the status of ID; fails if ID is invalid or an invalid option "
-"is\n"
+"    Returns the status of ID; fails if ID is invalid or an invalid option is\n"
 "    given."
 msgstr ""
+"Attend la fin d'une tâche et renvoie le code de retour.\n"
+"    \n"
+"    Attend que le processus identifié par ID, qui peut être un ID de processus ou\n"
+"    une spécification de tâche et renvoie son code de retour.  Si ID n'est pas\n"
+"    donné, la commande attend tous les processus actifs en cours et le code de retour\n"
+"    est zéro.  Si ID est une spécification de tâche, la commande attend tous les processus\n"
+"    dans le pipeline de la tâche.\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le même code que celui d'ID, ou le code d'échec si ID n'est pas valable ou en cas d'option non valable."
 
 #: builtins.c:1466
-#, fuzzy
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4137,18 +4293,20 @@ msgid ""
 "    and the return code is zero.  PID must be a process ID.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns the status of ID; fails if ID is invalid or an invalid option "
-"is\n"
+"    Returns the status of ID; fails if ID is invalid or an invalid option is\n"
 "    given."
 msgstr ""
-"Attend le processus spécifié et donne son code de retour. Si N n'est\n"
+"Attend la fin d'un processus et renvoie le code de sortie.\n"
+"    \n"
+"    Attend le processus spécifié et donne son code de retour. Si PID n'est\n"
 "    pas donné, tous les processus fils actuellement actifs sont attendus\n"
-"    et le code de retour est zéro. N peut être un n° de processus ou un\n"
-"    spécificateur de tâche. Si c'est un spécificateur de tâche, tous les\n"
-"    processus présents dans le tube de la tâche sont attendus."
+"    et le code de retour est zéro. PID doit être un ID de processus.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de ID, l'échec si ID n'est pas valable ou si une option non valable\n"
+"    est donnée."
 
 #: builtins.c:1481
-#, fuzzy
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4160,14 +4318,17 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
-"La boucle « for » exécute une suite de commandes pour chaque membre d'une\n"
-"   liste d'éléments. Si « in WORDS ...; » n'est pas fourni, « in \"$@\" » "
-"est\n"
-"    utilisé. Pour chaque élément dans WORDS, NAME est défini à cet élément,\n"
-"    et les COMMANDS sont exécutées."
+"Exécute des commandes pour chaque membre d'une liste.\n"
+"    \n"
+"    La boucle « for » exécute une suite de commandes pour chaque membre d'une\n"
+"    liste d'éléments. Si « in MOTS ...; » n'est pas fourni, « in \"$@\" » est\n"
+"    utilisé. Pour chaque élément dans MOTS, NOM est défini à cet élément,\n"
+"    et les COMMANDES sont exécutées.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de la dernière commande exécutée."
 
 #: builtins.c:1495
-#, fuzzy
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4183,18 +4344,21 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
-"Équivalent à\n"
+"Boucle « for » arithmétique.\n"
+"    \n"
+"    Équivalent à\n"
 "    \t(( EXP1 ))\n"
 "    \twhile (( EXP2 )); do\n"
 "    \t\tCOMMANDS\n"
 "    \t\t(( EXP3 ))\n"
 "    \tdone\n"
-"    EXP1, EXP2, and EXP3 sont des expressions arithmétiques.  Si une "
-"expression\n"
-"    omise, elle se comporte comme si elle s'évaluait à 1."
+"    EXP1, EXP2, and EXP3 sont des expressions arithmétiques.  Si une expression\n"
+"    omise, elle se comporte comme si elle s'évaluait à 1.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de la dernière commande exécutée."
 
 #: builtins.c:1513
-#, fuzzy
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4213,7 +4377,9 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
-"Les mots WORDS subissent une expansion et génèrent une liste de mots.\n"
+"Sélectionne des mots d'une liste et exécute des commandes.\n"
+"    \n"
+"    Les mots WORDS subissent une expansion et génèrent une liste de mots.\n"
 "    L'ensemble de ces mots est affiché dans la sortie d'erreur, chacun\n"
 "    étant précédé d'un nombre. Si « in WORDS » n'est pas fourni, \n"
 "    « in \"$@\" » est utilisé. L'invite PS3 est ensuite affichée et une\n"
@@ -4223,10 +4389,12 @@ msgstr ""
 "    est lu, la commande se termine. Toute autre valeur lue a pour effet\n"
 "    de vider NAME. La ligne lue est conservée dans la variable REPLY.\n"
 "    Les COMMANDS sont exécutées après chaque sélection jusqu'à ce qu'une\n"
-"    commande « break » soit exécutée."
+"    commande « break » soit exécutée.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de la dernière commande exécutée."
 
 #: builtins.c:1534
-#, fuzzy
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4241,14 +4409,21 @@ msgid ""
 "    Exit Status:\n"
 "    The return status is the return status of PIPELINE."
 msgstr ""
-"Exécute PIPELINE et affiche un résumé du temps réel, du temps processeur\n"
+"Signale le temps passé pendant l'exécution d'un tube de commandes.\n"
+"    \n"
+"    Exécute PIPELINE et affiche un résumé du temps réel, du temps processeur\n"
 "    utilisateur, et du temps processeur système passés à exécuter PIPELINE\n"
-"    lorsque celui-ci se termine. Le code de retour est celui de PIPELINE.\n"
-"    L'option « -p » affiche le résumé dans un format légèrement différent.\n"
-"    Elle utilise la valeur de la variable TIMEFORMAT comme format de sortie."
+"    lorsque celui-ci se termine.\n"
+"    \n"
+"    Options :\n"
+"      -p\taffiche le résumé dans le format portable Posix.\n"
+"    \n"
+"    La valeur de la variable TIMEFORMAT est utilisée comme format de sortie.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Le code de retour est celui du PIPELINE."
 
 #: builtins.c:1551
-#, fuzzy
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4258,46 +4433,43 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
-"Exécute de manière sélective les commandes COMMANDS basées sur le\n"
-"    motif PATTERN de correspondance des mots WORDS. Le caractère\n"
-"    « | » est utilisé pour séparer les différents motifs."
+"Exécute des commandes selon une correspondance de motif.\n"
+"    \n"
+"    Exécute de manière sélective les COMMANDES selon la correspondance du MOT\n"
+"    au MOTIF. Le caractère « | » est utilisé pour séparer les différents motifs.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de la dernière commande exécutée."
 
 #: builtins.c:1563
-#, fuzzy
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
-"    The `if COMMANDS' list is executed.  If its exit status is zero, then "
-"the\n"
-"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list "
-"is\n"
+"    The `if COMMANDS' list is executed.  If its exit status is zero, then the\n"
+"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list is\n"
 "    executed in turn, and if its exit status is zero, the corresponding\n"
-"    `then COMMANDS' list is executed and the if command completes.  "
-"Otherwise,\n"
-"    the `else COMMANDS' list is executed, if present.  The exit status of "
-"the\n"
-"    entire construct is the exit status of the last command executed, or "
-"zero\n"
+"    `then COMMANDS' list is executed and the if command completes.  Otherwise,\n"
+"    the `else COMMANDS' list is executed, if present.  The exit status of the\n"
+"    entire construct is the exit status of the last command executed, or zero\n"
 "    if no condition tested true.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
-"La liste « if COMMANDS » est exécutée. Si elle se termine avec un code de "
-"zéro,\n"
-"    alors la liste « then COMMANDS » est exécutée. Sinon, chaque liste\n"
-"    « elif COMMANDS » est exécutée à son tour et si son code de retour est "
-"zéro,\n"
-"    la liste « then COMMANDS » correspondante est exécutée et la commande « "
-"if »\n"
-"    se termine. Sinon, la list « else COMMANDS » est exécutée si elle "
-"existe.\n"
-"    Le code de retour de l'ensemble est celui de la dernière commande "
-"exécutée\n"
-"    ou zéro si aucune condition n'était vraie.    "
+"Exécute des commandes selon une condition.\n"
+"    \n"
+"    La liste « if COMMANDES » est exécutée. Si elle se termine avec un code de zéro,\n"
+"    alors la liste « then COMMANDES » est exécutée. Sinon, chaque liste\n"
+"    « elif COMMANDES » est exécutée à son tour et si son code de retour est zéro,\n"
+"    la liste « then COMMANDES » correspondante est exécutée et la commande « if »\n"
+"    se termine. Sinon, la list « else COMMANDES » est exécutée si elle existe.\n"
+"    Le code de retour de l'ensemble est celui de la dernière commande exécutée\n"
+"    ou zéro si aucune condition n'était vraie.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de la dernière commande exécutée."
 
 #: builtins.c:1580
-#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
@@ -4307,13 +4479,16 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
-"Effectue une expansion et exécute les commandes « COMMANDS » aussi "
-"longtemps\n"
-"    que la commande finale parmi celles de « while » se termine avec un\n"
-"    code de retour de zéro."
+"Exécute des commandes aussi longtemps qu'elle réussissent.\n"
+"    \n"
+"    Effectue une expansion et exécute les COMMANDES aussi longtemps\n"
+"    que la commande finale parmi celles situées dans « while » se termine avec un\n"
+"    code de retour de zéro.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de la dernière commande exécutée."
 
 #: builtins.c:1592
-#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
@@ -4323,10 +4498,14 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
-"Effectue une expansion et exécute les commandes « COMMANDS » aussi "
-"longtemps\n"
+"Exécute des commandes aussi longtemps qu'un test échoue.\n"
+"    \n"
+"    Effectue une expansion et exécute les commandes « COMMANDES » aussi longtemps\n"
 "    que les commandes de « until » se terminent avec un code de retour\n"
-"    différent de zéro."
+"    différent de zéro.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de la dernière commande exécutée."
 
 #: builtins.c:1604
 msgid ""
@@ -4340,23 +4519,39 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the exit status of COMMAND."
 msgstr ""
+"Crée un coprocessus nommé NOM.\n"
+"    \n"
+"    Exécute la COMMANDE de manière asynchrone, en connectant la sortie et l'entrée standard\n"
+"    de la commande par un tube aux decripteurs de fichier affectés aux indices 0 et 1\n"
+"    d'une variable tableau NOM dans le shell en cours d'exécution.\n"
+"    Le NOM par défaut est « COPROC ».\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le même code de retour que la COMMANDE."
 
 #: builtins.c:1618
 msgid ""
 "Define shell function.\n"
 "    \n"
 "    Create a shell function named NAME.  When invoked as a simple command,\n"
-"    NAME runs COMMANDs in the calling shell's context.  When NAME is "
-"invoked,\n"
+"    NAME runs COMMANDs in the calling shell's context.  When NAME is invoked,\n"
 "    the arguments are passed to the function as $1...$n, and the function's\n"
 "    name is in $FUNCNAME.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless NAME is readonly."
 msgstr ""
+"Définit une fonction du shell.\n"
+"    \n"
+"    Crée une fonction du shell nommée NOM.  Lorsqu'appelée comme une simple commande,\n"
+"    NOM lance la COMMANDE dans le contexte du shell qui l'appelle.  Lorsque NOM est appelé,\n"
+"    les arguments sont transmis à la fonction comme $1...$n, et le nom de la fonction\n"
+"    est $FUNCNAME.\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le code de succès à moins que NOM ne soit en lecture seule."
 
 #: builtins.c:1632
-#, fuzzy
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4366,11 +4561,15 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
-"Lance un ensemble de commandes d'un groupe. Ceci est une façon de\n"
-"    rediriger tout un ensemble de commandes."
+"Groupe plusieurs commandes en une seule.\n"
+"    \n"
+"    Lance un ensemble de commandes d'un groupe. Ceci est une façon de\n"
+"    rediriger tout un ensemble de commandes.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de la dernière commande exécutée."
 
 #: builtins.c:1644
-#, fuzzy
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -4383,16 +4582,18 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the resumed job."
 msgstr ""
-"Équivalent à l'argument JOB_SPEC de la commande « fg ». Reprend l'exécution\n"
+"Reprend une tâche en arrière plan.\n"
+"    \n"
+"    Équivalent à l'argument JOB_SPEC de la commande « fg ». Reprend l'exécution\n"
 "    d'une tâche stoppée ou en tâche de fond. JOB_SPEC peut spécifier soit\n"
-"    un nom soit un numéro de tâche. Faire suivre JOB_SPEC de « & » permet "
-"de\n"
-"    placer la tâche en arrière plan, comme si la spécification de tâche "
-"avait\n"
-"    été fournie comme argument de « bg »."
+"    un nom soit un numéro de tâche. Faire suivre JOB_SPEC de « & » permet de\n"
+"    placer la tâche en arrière plan, comme si la spécification de tâche avait\n"
+"    été fournie comme argument de « bg ».\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de la commande reprise."
 
 #: builtins.c:1659
-#, fuzzy
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -4402,20 +4603,21 @@ msgid ""
 "    Exit Status:\n"
 "    Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise."
 msgstr ""
-"L'EXPRESSION est évaluée selon les règles de l'évaluation arithmétique.\n"
-"    C'est équivalent à « let EXPRESSION »."
+"Évalue une expression arithmétique.\n"
+"    \n"
+"    L'EXPRESSION est évaluée selon les règles de l'évaluation arithmétique.\n"
+"    C'est équivalent à « let EXPRESSION ».\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie 1 si EXPRESSION est évaluée à 0, sinon renvoie 0."
 
 #: builtins.c:1671
-#, fuzzy
 msgid ""
 "Execute conditional command.\n"
 "    \n"
-"    Returns a status of 0 or 1 depending on the evaluation of the "
-"conditional\n"
-"    expression EXPRESSION.  Expressions are composed of the same primaries "
-"used\n"
-"    by the `test' builtin, and may be combined using the following "
-"operators:\n"
+"    Returns a status of 0 or 1 depending on the evaluation of the conditional\n"
+"    expression EXPRESSION.  Expressions are composed of the same primaries used\n"
+"    by the `test' builtin, and may be combined using the following operators:\n"
 "    \n"
 "      ( EXPRESSION )\tReturns the value of EXPRESSION\n"
 "      ! EXPRESSION\t\tTrue if EXPRESSION is false; else false\n"
@@ -4433,26 +4635,29 @@ msgid ""
 "    Exit Status:\n"
 "    0 or 1 depending on value of EXPRESSION."
 msgstr ""
-"Renvoie un code de retour de 0 ou 1 dépendant de l'évaluation de "
-"l'EXPRESSION\n"
-"    conditionnelle. Les expressions sont formées de la même façon que pour "
-"la\n"
-"    primitive « test », et peuvent être combinées avec les opérateurs "
-"suivants :\n"
+"Exécute une commande conditionnelle.\n"
+"    \n"
+"    Renvoie un code de retour de 0 ou 1 dépendant de l'évaluation de l'EXPRESSION\n"
+"    conditionnelle. Les expressions sont formées de la même façon que pour la\n"
+"    primitive « test », et peuvent être combinées avec les opérateurs suivants :\n"
 "    \n"
 "    \t( EXPRESSION )\tRenvoie la valeur de l'EXPRESSION\n"
 "    \t! EXPRESSION\tVrai si l'EXPRESSION est fausse, sinon vrai\n"
 "    \tEXPR1 && EXPR2\tVrai si EXPR1 et EXPR2 sont vraies, faux sinon\n"
 "    \tEXPR1 || EXPR2\tVrai si EXPR1 ou EXPR2 est vraie, faux sinon\n"
 "    \n"
-"    Lorsque les opérateurs « == » et « != » sont utilisés, la chaîne à\n"
-"    droite de l'opérateur est utilisée comme motif, et une mise en "
-"correspondance\n"
-"    est effectuée. Les opérateurs « && » et « || » n'évaluent pas EXPR2 si\n"
-"    EXPR1 est suffisant pour déterminer la valeur de l'expression."
+"    Lorsque les opérateurs « == » et « != » sont utilisés, la chaîne à droite de l'opérateur\n"
+"    est utilisée comme motif, et une mise en correspondance est effectuée.\n"
+"    Lorsque l'opérateur « =~ » est utilisé, la chaîne à droite de l'opérateur\n"
+"    est mise en correspondance comme une expression rationnelle.\n"
+"    \n"
+"    Les opérateurs « && » et « || » n'évaluent pas EXPR2 si\n"
+"    EXPR1 est suffisant pour déterminer la valeur de l'expression.\n"
+"    \n"
+"    Code de sortie :\n"
+"    0 ou 1 selon la valeur de l'EXPRESSION."
 
 #: builtins.c:1697
-#, fuzzy
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -4505,37 +4710,30 @@ msgid ""
 "    HISTIGNORE\tA colon-separated list of patterns used to decide which\n"
 "    \t\tcommands should be saved on the history list.\n"
 msgstr ""
-"BASH_VERSION\tNuméro de version de ce Bash.\n"
+"Nom et usage de variable shell courantes.\n"
+"    \n"
+"    BASH_VERSION\tNuméro de version de ce Bash.\n"
 "    CDPATH\tUne liste de répertoires, séparés par un deux-points, utilisés\n"
 "    \t\tpar « cd » pour la recherche de répertoires.\n"
-"    GLOBIGNORE\tUne liste de motifs séparés par un deux-points, décrivant "
-"les\n"
+"    GLOBIGNORE\tUne liste de motifs séparés par un deux-points, décrivant les\n"
 "    \t\tnoms de fichier à ignorer lors de l'expansion des chemins.\n"
-"    HISTFILE\tLe nom du fichier où votre historique des commandes est "
-"stocké.\n"
+"    HISTFILE\tLe nom du fichier où votre historique des commandes est stocké.\n"
 "    HISTFILESIZE\tLe nombre maximal de lignes que ce fichier peut contenir.\n"
 "    HISTSIZE\tLe nombre maximal de lignes d'historique auquel un shell en\n"
 "    \t\tfonctionnement peut accéder.\n"
 "    HOME\tLe chemin complet vers votre répertoire de connexion.\n"
 "    HOSTNAME\tLe nom de la machine actuelle.\n"
-"    HOSTTYPE\tLe type de processeur sur laquelle cette version de Bash "
-"fonctionne.\n"
-"    IGNOREEOF\tContrôle l'action du shell à la réception d'un caractère « "
-"EOF »\n"
-"    \t\tcomme seule entrée. Si défini, sa valeur est le nombre de "
-"caractères\n"
+"    HOSTTYPE\tLe type de processeur sur laquelle cette version de Bash fonctionne.\n"
+"    IGNOREEOF\tContrôle l'action du shell à la réception d'un caractère « EOF »\n"
+"    \t\tcomme seule entrée. Si défini, sa valeur est le nombre de caractères\n"
 "    \t\t« EOF » qui peuvent être rencontrés à la suite sur une ligne vide\n"
 "    \t\tavant que le shell ne se termine (10 par défaut).\n"
 "    \t\tS'il n'est pas défini, « EOF » signifie la fin de l'entrée.\n"
-"    MACHTYPE\tUne chaîne décrivant le système actuel sur lequel fonctionne "
-"Bash.\n"
-"    MAILCHECK\tLe nombre de secondes séparant deux vérifications du courrier "
-"par Bash.\n"
-"    MAILPATH\tUne liste de fichiers séparés par un deux-points, que Bash "
-"utilise\n"
+"    MACHTYPE\tUne chaîne décrivant le système actuel sur lequel fonctionne Bash.\n"
+"    MAILCHECK\tLe nombre de secondes séparant deux vérifications du courrier par Bash.\n"
+"    MAILPATH\tUne liste de fichiers séparés par un deux-points, que Bash utilise\n"
 "    \t\tpour vérifier les nouveaux courriers.\n"
-"    OSTYPE\tLa version d'Unix sur laquelle cette version de Bash "
-"fonctionne.\n"
+"    OSTYPE\tLa version d'Unix sur laquelle cette version de Bash fonctionne.\n"
 "    PATH\tUne liste de répertoires séparés par un deux-points, utilisés\n"
 "    \t\tpour la recherche des commandes.\n"
 "    PROMPT_COMMAND\tUne commande à exécuter avant d'afficher chaque invite\n"
@@ -4543,39 +4741,27 @@ msgstr ""
 "    PS1\t\tL'invite de commande principale.\n"
 "    PS2\t\tL'invite secondaire.\n"
 "    PWD\t\tLe chemin complet vers le répertoire actuel.\n"
-"    SHELLOPTS\tLa liste des options activées du shell, séparées par un deux-"
-"points.\n"
+"    SHELLOPTS\tLa liste des options activées du shell, séparées par un deux-points.\n"
 "    TERM\tLe nom du type actuel du terminal.\n"
-"    TIMEFORMAT\tLe format de sortie pour les statistiques de temps "
-"affichées\n"
+"    TIMEFORMAT\tLe format de sortie pour les statistiques de temps affichées\n"
 "    \t\tpar le mot réservé « time ».\n"
 "    auto_resume\tNon-vide signifie qu'un mot de commande apparaissant\n"
 "    \t\tde lui-même sur une ligne est d'abord recherché dans la liste des\n"
-"    \t\ttâches stoppées. Si elle est trouvée, la tâche est remise en avant-"
-"plan.\n"
-"    \t\tUne valeur de « exact » signifie que le mot de commande doit "
-"correspondre\n"
-"    \t\texactement à la commande dans la liste des tâches stoppées.  Une "
-"valeur\n"
+"    \t\ttâches stoppées. Si elle est trouvée, la tâche est remise en avant-plan.\n"
+"    \t\tUne valeur de « exact » signifie que le mot de commande doit correspondre\n"
+"    \t\texactement à la commande dans la liste des tâches stoppées.  Une valeur\n"
 "    \t\tde « substring » signifie que le mot de commande\n"
-"    \t\tcorrespondre à une sous-chaîne de la tâche. Une autre valeur "
-"signifie\n"
+"    \t\tcorrespondre à une sous-chaîne de la tâche. Une autre valeur signifie\n"
 "    \t\tque la commande doit être un préfixe d'une tâche stoppée.\n"
-"    histchars\tCaractères contrôlant l'expansion d'historique et la "
-"substitution\n"
-"    \t\trapide. Le premier caractère est le caractère de substitution "
-"d'historique,\n"
-"    \t\thabituellement « ! ». Le deuxième est le caractère de substitution "
-"rapide,\n"
+"    histchars\tCaractères contrôlant l'expansion d'historique et la substitution\n"
+"    \t\trapide. Le premier caractère est le caractère de substitution d'historique,\n"
+"    \t\thabituellement « ! ». Le deuxième est le caractère de substitution rapide,\n"
 "    \t\thabituellement « ^ ». Le troisième est le caractère de commentaire\n"
 "    \t\td'historique, habituellement « # ».\n"
-"    HISTIGNORE\tUne liste de motifs séparés par un deux-points, utilisés "
-"pour\n"
-"    \t\tdécider quelles commandes doivent être conservées dans la liste "
-"d'historique.\n"
+"    HISTIGNORE\tUne liste de motifs séparés par un deux-points, utilisés pour\n"
+"    \t\tdécider quelles commandes doivent être conservées dans la liste d'historique.\n"
 
 #: builtins.c:1754
-#, fuzzy
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -4605,29 +4791,34 @@ msgid ""
 "    Returns success unless an invalid argument is supplied or the directory\n"
 "    change fails."
 msgstr ""
-"Ajoute un répertoire en haut de la pile des répertoires, ou permute\n"
+"Ajoute un répertoire à la pile.\n"
+"    \n"
+"    Ajoute un répertoire en haut de la pile des répertoires, ou permute\n"
 "    la pile, de façon que le répertoire en haut de la pile devienne\n"
 "    le nouveau répertoire de travail. S'il n'y a pas d'argument, les deux\n"
 "    répertoires en haut de la pile sont échangés.\n"
 "    \n"
-"    +N\tPermute la pile de façon que le Nième répertoire se place en haut,\n"
-"    \ten comptant de zéro depuis la gauche de la liste fournie par « dirs "
-"».\n"
+"    Options :\n"
+"    -n\tne pas changer de répertoire de travail lorsque des répertoires\n"
+"    \tsont ajoutés à la pile, de façon que seule la pile soit manipulée\n"
 "    \n"
-"    -N\tPermute la pile de façon que le Nième répertoire se place en haut,\n"
-"    \ten comptant de zéro depuis la droite de la liste fournie par « dirs "
-"».\n"
+"    Arguments :\n"
+"    +N\tPermuter la pile de façon que le Nième répertoire se place en haut,\n"
+"    \ten comptant de zéro depuis la gauche de la liste fournie par « dirs ».\n"
 "    \n"
-"    -n\tne change pas de répertoire de travail lorsque des répertoires\n"
-"    \tsont ajoutés à la pile, de façon que seule la pile soit manipulée\n"
+"    -N\tPermuter la pile de façon que le Nième répertoire se place en haut,\n"
+"    \ten comptant de zéro depuis la droite de la liste fournie par « dirs ».\n"
 "    \n"
-"    dir\tajoute le répertoire DIR en haut de la pile, et en fait le nouveau\n"
+"    dir\tajouter le répertoire DIR en haut de la pile, et en faire le nouveau\n"
 "    \trépertoire de travail.\n"
 "    \n"
-"    Vous pouvez voir la pile des répertoires avec la commande « dirs »."
+"    Vous pouvez voir la pile des répertoires avec la commande « dirs ».\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins qu'un argument non valable ne soit fourni\n"
+"    ou que le changement de répertoire n'échoue."
 
 #: builtins.c:1788
-#, fuzzy
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -4653,25 +4844,30 @@ msgid ""
 "    Returns success unless an invalid argument is supplied or the directory\n"
 "    change fails."
 msgstr ""
-"Enlève des éléments de la pile des répertoires. S'il n'y a pas\n"
+"Enlève des répertoires de la pile.\n"
+"    \n"
+"    Enlève des éléments de la pile des répertoires. S'il n'y a pas\n"
 "    d'argument, le répertoire en haut de la pile est enlevé,\n"
 "    et le nouveau sommet de la pile devient le répertoire de travail.\n"
 "    \n"
+"    Options :\n"
+"    -n\tne change pas de répertoire de travail lorsque des répertoires\n"
+"    \tsont enlevés de la pile, de façon que seule la pile soit manipulée\n"
+"    \n"
+"    Arguments :\n"
 "    +N\tEnlève le Nième répertoire, en comptant de zéro depuis la gauche\n"
 "    \tde la liste fournie par « dirs ». Par exemple : « popd +0 »\n"
-"    \n"
-"enlève le premier répertoire, « popd +1 » le deuxième.    \n"
+"    \tenlève le premier répertoire, « popd +1 » le deuxième.    \n"
 "    -N\tEnlève le Nième répertoire, en comptant de zéro depuis la droite\n"
 "    \tde la liste fournie par « dirs ». Par exemple : « popd -0 »\n"
+"    \tenlève le dernier répertoire, « popd -1 » l'avant-dernier.\n"
+"    Vous pouvez voir la pile des répertoires avec la commande « dirs ».\n"
 "    \n"
-"enlève le dernier répertoire, « popd -1 » l'avant-dernier.    \n"
-"    -n\tne change pas de répertoire de travail lorsque des répertoires\n"
-"    \tsont enlevés de la pile, de façon que seule la pile soit manipulée\n"
-"    \n"
-"    Vous pouvez voir la pile des répertoires avec la commande « dirs »."
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins qu'un argument non valable ne soit donné\n"
+"    ou que le changement de répertoire n'échoue."
 
 #: builtins.c:1818
-#, fuzzy
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -4688,50 +4884,45 @@ msgid ""
 "    \twith its position in the stack\n"
 "    \n"
 "    Arguments:\n"
-"      +N\tDisplays the Nth entry counting from the left of the list shown "
-"by\n"
+"      +N\tDisplays the Nth entry counting from the left of the list shown by\n"
 "    \tdirs when invoked without options, starting with zero.\n"
 "    \n"
-"      -N\tDisplays the Nth entry counting from the right of the list shown "
-"by\n"
+"      -N\tDisplays the Nth entry counting from the right of the list shown by\n"
 "    \tdirs when invoked without options, starting with zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
-"Affiche la liste des répertoires actuellement mémorisés. Les répertoires\n"
-"   sont insérés dans la liste avec la commande « pushd ». Vous pouvez "
-"remonter\n"
+"Affiche la pile de répertoire.\n"
+"    \n"
+"    Affiche la liste des répertoires actuellement mémorisés. Les répertoires\n"
+"   sont insérés dans la liste avec la commande « pushd ». Vous pouvez remonter\n"
 "   dans la liste en enlevant des éléments avec la commande « popd ».\n"
 "    \n"
-"    L'option « -l » spécifie que « dirs » ne doit pas afficher des versions\n"
-"    raccourcies des répertoires relativement à votre répertoire personnel.\n"
-"    Cela signifie que « ~/bin » devrait être affiché comme « /homes/bfox/bin "
-"».\n"
-"    L'option « -v » permet à « dirs » d'afficher la pile des répertoires "
-"avec\n"
-"    un élément par ligne, en commençant la ligne par la position dans la "
-"pile.\n"
-"    L'option « -p » fait la même chose mais le numéro de position n'est pas\n"
-"    affiché. L'option « -c » efface la pile des répertoires en enlevant "
-"tous\n"
-"    les éléments.\n"
-"    \n"
-"    +N\t affiche le Nième élément en comptant de zéro depuis la gauche de "
-"la\n"
+"    Options:\n"
+"      -c\teffacer la pile des répertoires en effaçant tous les éléments\n"
+"      -l\tne pas afficher la version raccourcie (avec ~) des répertoires\n"
+"    \trelativement à votre dossier personnel\n"
+"      -p\tafficher la pile des répertoires avec un élément par ligne\n"
+"      -v\tafficher la pile des répertoires avec un élément par ligne,\n"
+"    \ten préfixant avec sa position dans la pile\n"
+"    \n"
+"    Arguments :\n"
+"    +N\t affiche le Nième élément en comptant de zéro depuis la gauche de la\n"
 "    liste affichée par « dirs » lorsque celle-ci est appelée sans option.\n"
 "    \n"
-"    -N\t affiche le Nième élément en comptant de zéro depuis la droite de "
-"la\n"
-"    liste affichée par « dirs » lorsque celle-ci est appelée sans option."
+"    -N\t affiche le Nième élément en comptant de zéro depuis la droite de la\n"
+"    liste affichée par « dirs » lorsque celle-ci est appelée sans option.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins qu'une option non valable ne soit fournie ou qu'une erreur ne survienne."
 
 #: builtins.c:1847
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
 "    Change the setting of each shell option OPTNAME.  Without any option\n"
-"    arguments, list all shell options with an indication of whether or not "
-"each\n"
+"    arguments, list all shell options with an indication of whether or not each\n"
 "    is set.\n"
 "    \n"
 "    Options:\n"
@@ -4745,9 +4936,24 @@ msgid ""
 "    Returns success if OPTNAME is enabled; fails if an invalid option is\n"
 "    given or OPTNAME is disabled."
 msgstr ""
+"Active ou désactive des options du shell.\n"
+"    \n"
+"    Change la valeur de chaque option du shell NOMOPT.  S'il n'y a pas d'argument à l'option\n"
+"    la commande liste toutes les options du shell en indiquant si elles sont actives\n"
+"    ou non.\n"
+"    \n"
+"    Options :\n"
+"      -o\trestreint les NOMOPT à ceux définis pour être utilisés avec « set -o »\n"
+"      -p\taffiche chaque option du shell en indiquant son état\n"
+"      -q\tsupprime l'affichage\n"
+"      -s\tactive (set) chaque NOMOPT\n"
+"      -u\tdésactive (unset) chaque NOMOPT\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le code de succès si NOMOPT est active ; échec si une option non valable\n"
+"    est donnée ou si NOMOPT est inactive."
 
 #: builtins.c:1868
-#, fuzzy
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -4755,55 +4961,49 @@ msgid ""
 "      -v var\tassign the output to shell variable VAR rather than\n"
 "    \t\tdisplay it on the standard output\n"
 "    \n"
-"    FORMAT is a character string which contains three types of objects: "
-"plain\n"
-"    characters, which are simply copied to standard output; character "
-"escape\n"
+"    FORMAT is a character string which contains three types of objects: plain\n"
+"    characters, which are simply copied to standard output; character escape\n"
 "    sequences, which are converted and copied to the standard output; and\n"
-"    format specifications, each of which causes printing of the next "
-"successive\n"
+"    format specifications, each of which causes printing of the next successive\n"
 "    argument.\n"
 "    \n"
-"    In addition to the standard format specifications described in printf"
-"(1)\n"
+"    In addition to the standard format specifications described in printf(1)\n"
 "    and printf(3), printf interprets:\n"
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or a write or "
-"assignment\n"
+"    Returns success unless an invalid option is given or a write or assignment\n"
 "    error occurs."
 msgstr ""
-"« printf » formate et affiche les ARGUMENTS en contrôlant le FORMAT. Le "
-"FORMAT\n"
-"    est une chaîne de caractères qui contient trois types d'objets : des "
-"caractères\n"
-"    normaux qui sont simplement copiés vers la sortie standard, des "
-"séquences d'échappement\n"
-"    qui sont converties et copiées vers la sortie standard et des "
-"spécifications de\n"
-"    format, chacun entraînant l'affichage de l'argument suivant. En plus des "
-"formats\n"
-"    standards de « printf(1) » , « %b » permet d'effectuer l'expansion des "
-"séquences\n"
-"    d'échappement à contre-oblique dans l'argument correspondant et « %q » "
-"permet de\n"
-"    protéger les arguments par guillemets de façon qu'ils puissent être "
-"réutilisés\n"
-"    comme entrée du shell. Si l'option « -v » est fournie, la sortie est "
-"placée dans\n"
-"    la variable VAR plutôt que d'être envoyée vers la sortie standard."
+"Formatte et affiche des ARGUMENTS en contrôlant le FORMAT.\n"
+"    \n"
+"    Options :\n"
+"      -v var\taffecte la sortie à la vairable VAR du shell plutôt que de l'afficher\n"
+"    \t\tsur la sortie standard\n"
+"    \n"
+"    Le FORMAT est une chaîne de caractères qui contient trois types d'objets : des caractères\n"
+"    normaux qui sont simplement copiés vers la sortie standard, des séquences d'échappement\n"
+"    qui sont converties et copiées vers la sortie standard et des spécifications de\n"
+"    format, chacun entraînant l'affichage de l'argument suivant.\n"
+"    \n"
+"    En plus des formats standards décrits dans printf(1) et printf(3), « printf » interprète :\n"
+"    \n"
+"    %b\tdéveloppe les séquences d'échappement à contre-oblique dans l'argument correspondant\n"
+"    %q\tprotège les arguments par guillemets de façon qu'ils puissent être réutilisés\n"
+"    comme entrée du shell.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins qu'une option non valable ne soit donnée ou qu'une\n"
+"    erreur d'écriture ou d'affectation ne survienne."
 
 #: builtins.c:1895
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
-"    For each NAME, specify how arguments are to be completed.  If no "
-"options\n"
-"    are supplied, existing completion specifications are printed in a way "
-"that\n"
+"    For each NAME, specify how arguments are to be completed.  If no options\n"
+"    are supplied, existing completion specifications are printed in a way that\n"
 "    allows them to be reused as input.\n"
 "    \n"
 "    Options:\n"
@@ -4822,38 +5022,55 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
+"Spécifie la façon dont Readline complète les arguments.\n"
+"    \n"
+"    Pour chaque NOM, la commande spécifie la façon dont les arguments son complétés\n"
+"    S'il n'y a pas d'option, le réglage actuel est affiché d'une manièré réutilisable comme\n"
+"    une entrée.\n"
+"    \n"
+"    Options :\n"
+"      -p\taffiche le réglage d'auto-complètement actuel dans un format réutilisable\n"
+"      -r\tretire un réglage d'auto-complètement à chaque NOM ou, si aucun NOM\n"
+"    \tn'est fourni, retire tous les réglages\n"
+"      -D\tapplique les auto-complètements et actions comme valeurs par défaut aux commandes\n"
+"    \tne possédant aucun auto-complètement spécifique\n"
+"      -E\tapplique les auto-complètements et actions aux commandes vides (\n"
+"    \tauto-complètement tenté sur une ligne vide)\n"
+"    \n"
+"    Lorsqu'un auto-complètement est tenté, les actions sont appliquées dans l'ordre\n"
+"    dans lequel les options en majuscule ci-dessus sont listées.  L'option « -D » est prioritaire\n"
+"    sur « -E ».\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le code de succès à moins qu'une option non valable ne soit fournie ou qu'une erreur ne survienne."
 
 #: builtins.c:1923
-#, fuzzy
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
 "    Intended to be used from within a shell function generating possible\n"
-"    completions.  If the optional WORD argument is supplied, matches "
-"against\n"
+"    completions.  If the optional WORD argument is supplied, matches against\n"
 "    WORD are generated.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
-"Affiche les possibilités de complètement dépendant des options. Ceci est "
-"destiné\n"
-"    à être utilisé depuis une fonction de shell générant des complètements "
-"possibles.\n"
-"    Si le mot « WORD » optionnel est fourni, des correspondances avec « WORD "
-"»\n"
-"    sont générées."
+"Affiche les possibilités de complètement dépendant des options.\n"
+"    \n"
+"    Ceci est destiné à être utilisé depuis une fonction de shell générant\n"
+"    des auto-complètements possibles. Si le MOT optionnel est fourni,\n"
+"    des correspondances avec « WORD » sont générées.\n"
+"    \n"
+"    Code de sortie :\n"
+"    Renvoie le code de succès à moins qu'une option non valable ne soit fournie ou qu'une erreur ne survienne."
 
 #: builtins.c:1938
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
-"    Modify the completion options for each NAME, or, if no NAMEs are "
-"supplied,\n"
-"    the completion currently begin executed.  If no OPTIONs are givenm, "
-"print\n"
-"    the completion options for each NAME or the current completion "
-"specification.\n"
+"    Modify the completion options for each NAME, or, if no NAMEs are supplied,\n"
+"    the completion currently begin executed.  If no OPTIONs are givenm, print\n"
+"    the completion options for each NAME or the current completion specification.\n"
 "    \n"
 "    Options:\n"
 "    \t-o option\tSet completion option OPTION for each NAME\n"
@@ -4874,29 +5091,47 @@ msgid ""
 "    Returns success unless an invalid option is supplied or NAME does not\n"
 "    have a completion specification defined."
 msgstr ""
+"Modifie ou affiche les options d'auto-complètement.\n"
+"    \n"
+"    Modifie les options d'auto-complètement pour chaque NOM ou, si aucun NOM n'est fourni,\n"
+"    l'auto-complètement actuellement exécuté.  si aucune OPTION n'est données, affiche\n"
+"    les options d'auto-complètement de chaque NOM ou le réglage actuel d'auto-complètement.\n"
+"    \n"
+"    Options :\n"
+"    \t-o option\tDéfinir l'option d'auto-complètement OPTION pour chaque NOM\n"
+"    \t-D\t\tChanger les options pour l'auto-complètement de commande par défaut\n"
+"    \t-E\t\tChanger les options pour l'auto-complètement de commande vide\n"
+"    \n"
+"    Utiliser « +o » au lieu de « -o » désactive l'option spécifiée.\n"
+"    \n"
+"    Arguments :\n"
+"    \n"
+"    Chaque NOM correspond à une commande pour laquelle un réglage d'auto-complètement\n"
+"    doit déjà avoir été défini grâce à la commande intégrée « complete ».  Si aucun NOM\n"
+"    n'est fourni, « compopt » doit être appelée par une fonction générant actuellement\n"
+"    des auto-complètements ; ainsi les options de ce générateur d'auto-complètement en cours d'exécution\n"
+"    seront modifiées.\n"
+"    \n"
+"    Code de retour :\n"
+"    Renvoie le code de succès à moins qu'une option non valable ne soit fournie\n"
+"    ou que NOM n'ait aucun réglage d'auto-complètement."
 
 #: builtins.c:1968
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
-"    Read lines from the standard input into the indexed array variable "
-"ARRAY, or\n"
-"    from file descriptor FD if the -u option is supplied.  The variable "
-"MAPFILE\n"
+"    Read lines from the standard input into the indexed array variable ARRAY, or\n"
+"    from file descriptor FD if the -u option is supplied.  The variable MAPFILE\n"
 "    is the default ARRAY.\n"
 "    \n"
 "    Options:\n"
-"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are "
-"copied.\n"
-"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default "
-"index is 0.\n"
+"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are copied.\n"
+"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default index is 0.\n"
 "      -s count \tDiscard the first COUNT lines read.\n"
 "      -t\t\tRemove a trailing newline from each line read.\n"
-"      -u fd\t\tRead lines from file descriptor FD instead of the standard "
-"input.\n"
+"      -u fd\t\tRead lines from file descriptor FD instead of the standard input.\n"
 "      -C callback\tEvaluate CALLBACK each time QUANTUM lines are read.\n"
-"      -c quantum\tSpecify the number of lines read between each call to "
-"CALLBACK.\n"
+"      -c quantum\tSpecify the number of lines read between each call to CALLBACK.\n"
 "    \n"
 "    Arguments:\n"
 "      ARRAY\t\tArray variable name to use for file data.\n"
@@ -4905,15 +5140,41 @@ msgid ""
 "    CALLBACK is evaluated, it is supplied the index of the next array\n"
 "    element to be assigned as an additional argument.\n"
 "    \n"
-"    If not supplied with an explicit origin, mapfile will clear ARRAY "
-"before\n"
+"    If not supplied with an explicit origin, mapfile will clear ARRAY before\n"
 "    assigning to it.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or ARRAY is readonly "
-"or\n"
+"    Returns success unless an invalid option is given or ARRAY is readonly or\n"
 "    not an indexed array."
 msgstr ""
+"Lit des lignes depuis l'entrée standard vers une variable tableau indexé.\n"
+"    \n"
+"    Lit des lignes depuis l'entrée standard vers la variable tableau indexé TABLEAU ou\n"
+"    depuis le descripteur de fichier FD si l'option « -u » est utilisée. La variable MAPFILE\n"
+"    est le TABLEAU par défaut.\n"
+"    \n"
+"    Options :\n"
+"      -n nombre\tCopie au maximum NOMBRE lignes.  Si NOMBRE est 0, toutes les lignes sont copiées.\n"
+"      -O origine\tCommence l'affectation au TABLEAU à l'indice ORIGINE.  L'indice par défaut est 0.\n"
+"      -s nombre\tSaute les NOMBRE premères lignes lues.\n"
+"      -t\t\tRetire les retours à la ligne de chaque ligne lue.\n"
+"      -u fd\t\tLit les lignes depuis le descripteur de fichier FD au lieu de l'entrée standard.\n"
+"      -C callback\tÉvalue le CALLBACK à chaque fois que QUANTUM lignes sont lues.\n"
+"      -c quantum\tIndique le nombre de lignes lues entre chaque appel au CALLBACK.\n"
+"    \n"
+"    Arguments :\n"
+"      TABLEAU\t\tNom de la variable tableau à utiliser pour les données.\n"
+"    \n"
+"    Si l'option « -C » est fournie sans option « -c », le quantum par défaut est 5000.  Lorsque\n"
+"    CALLBACK est évalué, l'indice du prochain élément de tableau qui sera affecté\n"
+"    lui est transmis comme argument additionnel.\n"
+"    \n"
+"    Si la commande « mapfile » n'est pas fournie avec une origine explicite, le tableau est vidé\n"
+"    avant affectation.\n"
+"    \n"
+"    code de retour :\n"
+"    Renvoie le code de succès à moins qu'une option non valable ne soit donnée ou que\n"
+"    le TABLEAU soit en lecture seule ou ne soit pas un tableau indexé."
 
 #: builtins.c:2001
 msgid ""
@@ -4921,16 +5182,9 @@ msgid ""
 "    \n"
 "    A synonym for `mapfile'."
 msgstr ""
-
-#~ msgid "xrealloc: cannot reallocate %lu bytes (%lu bytes allocated)"
-#~ msgstr "xrealloc : impossible de réallouer %lu octets (%lu octets alloués)"
-
-#~ msgid "xrealloc: cannot allocate %lu bytes"
-#~ msgstr "xrealloc : impossible d'allouer %lu octets"
-
-#~ msgid "xrealloc: %s:%d: cannot reallocate %lu bytes (%lu bytes allocated)"
-#~ msgstr ""
-#~ "xrealloc : %s:%d : impossible de réallouer %lu octets (%lu octets alloués)"
+"Lit des lignes depuis un fichier vers une variable tableau.\n"
+"    \n"
+"    Synonyme de « mapfile »."
 
 #~ msgid " "
 #~ msgstr " "
@@ -4939,18 +5193,13 @@ msgstr ""
 #~ msgstr "Sans « EXPR », renvoie « $ligne $nomfichier ».  Avec « EXPR »,"
 
 #~ msgid "returns \"$line $subroutine $filename\"; this extra information"
-#~ msgstr ""
-#~ "renvoie « $ligne $sousroutine $nomfichier » ; cette information "
-#~ "supplémentaire"
+#~ msgstr "renvoie « $ligne $sousroutine $nomfichier » ; cette information supplémentaire"
 
 #~ msgid "can be used used to provide a stack trace."
 #~ msgstr "peut être utilisée pour fournir une trace de la pile"
 
-#~ msgid ""
-#~ "The value of EXPR indicates how many call frames to go back before the"
-#~ msgstr ""
-#~ "La valeur de « EXPR » indique le nombre de cadres d'appel dont il faut "
-#~ "reculer"
+#~ msgid "The value of EXPR indicates how many call frames to go back before the"
+#~ msgstr "La valeur de « EXPR » indique le nombre de cadres d'appel dont il faut reculer"
 
 #~ msgid "current one; the top frame is frame 0."
 #~ msgstr "par rapport à l'actuel ; le cadre supérieur est le cadre 0."
@@ -4962,117 +5211,82 @@ msgstr ""
 #~ msgstr "Commandes du shell correspondant aux mots-clés « "
 
 #~ msgid "Display the list of currently remembered directories.  Directories"
-#~ msgstr ""
-#~ "Affiche la liste des répertoires actuellement mémorisés. Les répertoires"
+#~ msgstr "Affiche la liste des répertoires actuellement mémorisés. Les répertoires"
 
 #~ msgid "find their way onto the list with the `pushd' command; you can get"
 #~ msgstr "sont insérés dans la pile avec la commande « pushd » ; vous pouvez"
 
 #~ msgid "back up through the list with the `popd' command."
-#~ msgstr ""
-#~ "remonter dans la pile en enlevant des éléments avec la commande « popd »."
+#~ msgstr "remonter dans la pile en enlevant des éléments avec la commande « popd »."
 
-#~ msgid ""
-#~ "The -l flag specifies that `dirs' should not print shorthand versions"
-#~ msgstr ""
-#~ "L'option « -l » demande à « dirs » de ne pas afficher sous forme abrégée"
+#~ msgid "The -l flag specifies that `dirs' should not print shorthand versions"
+#~ msgstr "L'option « -l » demande à « dirs » de ne pas afficher sous forme abrégée"
 
-#~ msgid ""
-#~ "of directories which are relative to your home directory.  This means"
-#~ msgstr ""
-#~ "les répertoires relatifs à votre répertoire personnel.  Cela signifie que"
+#~ msgid "of directories which are relative to your home directory.  This means"
+#~ msgstr "les répertoires relatifs à votre répertoire personnel.  Cela signifie que"
 
 #~ msgid "that `~/bin' might be displayed as `/homes/bfox/bin'.  The -v flag"
-#~ msgstr ""
-#~ "le répertoire « ~/bin » pourra être affiché « /homes/bfox/bin ». L'option "
-#~ "« -v »"
+#~ msgstr "le répertoire « ~/bin » pourra être affiché « /homes/bfox/bin ». L'option « -v »"
 
 #~ msgid "causes `dirs' to print the directory stack with one entry per line,"
 #~ msgstr "demande à « dirs » d'afficher un répertoire de la pile par ligne,"
 
-#~ msgid ""
-#~ "prepending the directory name with its position in the stack.  The -p"
-#~ msgstr ""
-#~ "en le précédant de sa position dans la pile.  L'option « -p » fait la "
-#~ "même chose"
+#~ msgid "prepending the directory name with its position in the stack.  The -p"
+#~ msgstr "en le précédant de sa position dans la pile.  L'option « -p » fait la même chose"
 
 #~ msgid "flag does the same thing, but the stack position is not prepended."
 #~ msgstr "sans afficher le numéro d'emplacement dans la pile."
 
-#~ msgid ""
-#~ "The -c flag clears the directory stack by deleting all of the elements."
-#~ msgstr ""
-#~ "L'option « -c » vide la pile des répertoires en retirant tous ses "
-#~ "éléments."
+#~ msgid "The -c flag clears the directory stack by deleting all of the elements."
+#~ msgstr "L'option « -c » vide la pile des répertoires en retirant tous ses éléments."
 
-#~ msgid ""
-#~ "+N   displays the Nth entry counting from the left of the list shown by"
-#~ msgstr ""
-#~ "+N   affiche la Nième entrée à partir de la gauche de la liste fournie par"
+#~ msgid "+N   displays the Nth entry counting from the left of the list shown by"
+#~ msgstr "+N   affiche la Nième entrée à partir de la gauche de la liste fournie par"
 
 #~ msgid "     dirs when invoked without options, starting with zero."
-#~ msgstr ""
-#~ "     « dirs » lorsqu'elle est appelée sans option, la première entrée "
-#~ "étant zéro."
+#~ msgstr "     « dirs » lorsqu'elle est appelée sans option, la première entrée étant zéro."
 
-#~ msgid ""
-#~ "-N   displays the Nth entry counting from the right of the list shown by"
-#~ msgstr ""
-#~ "+N   affiche la Nième entrée à partir de la droite de la liste fournie par"
+#~ msgid "-N   displays the Nth entry counting from the right of the list shown by"
+#~ msgstr "+N   affiche la Nième entrée à partir de la droite de la liste fournie par"
 
 #~ msgid "Adds a directory to the top of the directory stack, or rotates"
-#~ msgstr ""
-#~ "Ajoute un répertoire au dessus de la pile des répertoires ou effectue une"
+#~ msgstr "Ajoute un répertoire au dessus de la pile des répertoires ou effectue une"
 
 #~ msgid "the stack, making the new top of the stack the current working"
-#~ msgstr ""
-#~ "rotation de la pile en plaçant le répertoire supérieur comme répertoire "
-#~ "courant."
+#~ msgstr "rotation de la pile en plaçant le répertoire supérieur comme répertoire courant."
 
 #~ msgid "directory.  With no arguments, exchanges the top two directories."
-#~ msgstr ""
-#~ "Sans paramètre, les deux répertoires supérieurs de la pile sont échangés."
+#~ msgstr "Sans paramètre, les deux répertoires supérieurs de la pile sont échangés."
 
 #~ msgid "+N   Rotates the stack so that the Nth directory (counting"
-#~ msgstr ""
-#~ "+N   effectue une rotation de la pile de façon que le Nième répertoire "
-#~ "soit"
+#~ msgstr "+N   effectue une rotation de la pile de façon que le Nième répertoire soit"
 
 #~ msgid "     from the left of the list shown by `dirs', starting with"
-#~ msgstr ""
-#~ "placé au dessus (N commençant à zéro et en partant à gauche de la liste"
+#~ msgstr "placé au dessus (N commençant à zéro et en partant à gauche de la liste"
 
 #~ msgid "     zero) is at the top."
 #~ msgstr " fournie par « dirs »)."
 
 #~ msgid "-N   Rotates the stack so that the Nth directory (counting"
-#~ msgstr ""
-#~ "+N   effectue une rotation de la pile de façon que le Nième répertoire "
-#~ "soit"
+#~ msgstr "+N   effectue une rotation de la pile de façon que le Nième répertoire soit"
 
 #~ msgid "     from the right of the list shown by `dirs', starting with"
-#~ msgstr ""
-#~ "placé au dessus (N commençant à zéro et en partant à gauche de la liste"
+#~ msgstr "placé au dessus (N commençant à zéro et en partant à gauche de la liste"
 
 #~ msgid "-n   suppress the normal change of directory when adding directories"
-#~ msgstr ""
-#~ "-n   inhibe le changement de répertoire lors d'un ajout de répertoire "
+#~ msgstr "-n   inhibe le changement de répertoire lors d'un ajout de répertoire "
 
 #~ msgid "     to the stack, so only the stack is manipulated."
 #~ msgstr "     à la liste. Seule la pile est manipulée."
 
 #~ msgid "dir  adds DIR to the directory stack at the top, making it the"
-#~ msgstr ""
-#~ "dir  ajoute « DIR » au dessus de la pile des répertoires, en faisant de "
-#~ "lui"
+#~ msgstr "dir  ajoute « DIR » au dessus de la pile des répertoires, en faisant de lui"
 
 #~ msgid "     new current working directory."
 #~ msgstr "     le nouveau répertoire courant."
 
 #~ msgid "You can see the directory stack with the `dirs' command."
-#~ msgstr ""
-#~ "Vous pouvez voir le contenu de la pile des répertoires avec la commande « "
-#~ "dirs »."
+#~ msgstr "Vous pouvez voir le contenu de la pile des répertoires avec la commande « dirs »."
 
 #~ msgid "Removes entries from the directory stack.  With no arguments,"
 #~ msgstr "Enlève des éléments de la pile des répertoires. Sans paramètre,"
@@ -5101,11 +5315,8 @@ msgstr ""
 #~ msgid "     removes the last directory, `popd -1' the next to last."
 #~ msgstr "     enlève le dernier répertoire, « popd  -1 » l'avant-dernier."
 
-#~ msgid ""
-#~ "-n   suppress the normal change of directory when removing directories"
-#~ msgstr ""
-#~ "-n   inhibe le changement de répertoire lors de l'enlèvement d'un "
-#~ "répertoire"
+#~ msgid "-n   suppress the normal change of directory when removing directories"
+#~ msgstr "-n   inhibe le changement de répertoire lors de l'enlèvement d'un répertoire"
 
 #~ msgid "     from the stack, so only the stack is manipulated."
 #~ msgstr "     de la liste. Seule la pile est manipulée."
@@ -5128,6 +5339,15 @@ msgstr ""
 #~ msgid "malloc: watch alert: %p %s "
 #~ msgstr "malloc : alerte de « watch » : %p %s "
 
+#~ msgid "xrealloc: cannot reallocate %lu bytes (%lu bytes allocated)"
+#~ msgstr "xrealloc : impossible de réallouer %lu octets (%lu octets alloués)"
+
+#~ msgid "xrealloc: cannot allocate %lu bytes"
+#~ msgstr "xrealloc : impossible d'allouer %lu octets"
+
+#~ msgid "xrealloc: %s:%d: cannot reallocate %lu bytes (%lu bytes allocated)"
+#~ msgstr "xrealloc : %s:%d : impossible de réallouer %lu octets (%lu octets alloués)"
+
 #~ msgid ""
 #~ "Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,\n"
 #~ "    break N levels."
@@ -5140,18 +5360,15 @@ msgstr ""
 #~ "    shell builtin to be a function, but need the functionality of the\n"
 #~ "    builtin within the function itself."
 #~ msgstr ""
-#~ "Lance une primitive du shell. Ceci est utile lorsque vous souhaitez "
-#~ "nommer une fonction comme\n"
-#~ "    une primitive, mais que vous avez besoin d'utiliser la primitive dans "
-#~ "la fonction elle-même."
+#~ "Lance une primitive du shell. Ceci est utile lorsque vous souhaitez nommer une fonction comme\n"
+#~ "    une primitive, mais que vous avez besoin d'utiliser la primitive dans la fonction elle-même."
 
 #~ msgid ""
 #~ "Print the current working directory.  With the -P option, pwd prints\n"
 #~ "    the physical directory, without any symbolic links; the -L option\n"
 #~ "    makes pwd follow symbolic links."
 #~ msgstr ""
-#~ "Affiche le répertoire de travail actuel.  Avec l'option « -P », « pwd » "
-#~ "affiche\n"
+#~ "Affiche le répertoire de travail actuel.  Avec l'option « -P », « pwd » affiche\n"
 #~ "    le répertoire physique, sans lien symbolique ; l'option « -L »\n"
 #~ "    demande à « pwd » de suivre les liens symboliques."
 
@@ -5161,28 +5378,69 @@ msgstr ""
 #~ msgid ""
 #~ "Runs COMMAND with ARGS ignoring shell functions.  If you have a shell\n"
 #~ "    function called `ls', and you wish to call the command `ls', you can\n"
-#~ "    say \"command ls\".  If the -p option is given, a default value is "
-#~ "used\n"
-#~ "    for PATH that is guaranteed to find all of the standard utilities.  "
-#~ "If\n"
-#~ "    the -V or -v option is given, a string is printed describing "
-#~ "COMMAND.\n"
+#~ "    say \"command ls\".  If the -p option is given, a default value is used\n"
+#~ "    for PATH that is guaranteed to find all of the standard utilities.  If\n"
+#~ "    the -V or -v option is given, a string is printed describing COMMAND.\n"
 #~ "    The -V option produces a more verbose description."
 #~ msgstr ""
-#~ "Lance la commande COMMAND avec les ARGS en ignorant les fonctions du "
-#~ "shell.  Si vous\n"
-#~ "    avez défini une fonction de shell appelée « ls » et que vous voulez "
-#~ "appeler\n"
-#~ "    la commande « ls », vous pouvez faire « command ls ».  Si l'option « -"
-#~ "p » est\n"
-#~ "    donnée, une valeur par défaut est utilisée pour le PATH garantissant "
-#~ "que tous\n"
-#~ "    les utilitaires standards seront trouvés.  Si l'option « -V » ou « -v "
-#~ "» est\n"
-#~ "    donnée, une description de la commande s'affiche. L'option « -V » "
-#~ "fournit plus\n"
+#~ "Lance la commande COMMAND avec les ARGS en ignorant les fonctions du shell.  Si vous\n"
+#~ "    avez défini une fonction de shell appelée « ls » et que vous voulez appeler\n"
+#~ "    la commande « ls », vous pouvez faire « command ls ».  Si l'option « -p » est\n"
+#~ "    donnée, une valeur par défaut est utilisée pour le PATH garantissant que tous\n"
+#~ "    les utilitaires standards seront trouvés.  Si l'option « -V » ou « -v » est\n"
+#~ "    donnée, une description de la commande s'affiche. L'option « -V » fournit plus\n"
 #~ "    d'informations."
 
+#~ msgid ""
+#~ "Declare variables and/or give them attributes.  If no NAMEs are\n"
+#~ "    given, then display the values of variables instead.  The -p option\n"
+#~ "    will display the attributes and values of each NAME.\n"
+#~ "    \n"
+#~ "    The flags are:\n"
+#~ "    \n"
+#~ "      -a\tto make NAMEs arrays (if supported)\n"
+#~ "      -f\tto select from among function names only\n"
+#~ "      -F\tto display function names (and line number and source file name if\n"
+#~ "    \tdebugging) without definitions\n"
+#~ "      -i\tto make NAMEs have the `integer' attribute\n"
+#~ "      -r\tto make NAMEs readonly\n"
+#~ "      -t\tto make NAMEs have the `trace' attribute\n"
+#~ "      -x\tto make NAMEs export\n"
+#~ "    \n"
+#~ "    Variables with the integer attribute have arithmetic evaluation (see\n"
+#~ "    `let') done when the variable is assigned to.\n"
+#~ "    \n"
+#~ "    When displaying values of variables, -f displays a function's name\n"
+#~ "    and definition.  The -F option restricts the display to function\n"
+#~ "    name only.\n"
+#~ "    \n"
+#~ "    Using `+' instead of `-' turns off the given attribute instead.  When\n"
+#~ "    used in a function, makes NAMEs local, as with the `local' command."
+#~ msgstr ""
+#~ "Déclare des variables ou ajoute des attributs aux variables.  Si aucun nom\n"
+#~ "    n'est donné, affiche plutôt les valeurs des variables.  L'option « -p »\n"
+#~ "    permet d'afficher les attributs et les valeurs de chaque NAME.\n"
+#~ "    \n"
+#~ "    Les options sont :\n"
+#~ "    \n"
+#~ "      -a\tpour faire des tableaux de NAME (si pris en charge)\n"
+#~ "      -f\tpour choisir uniquement parmi les noms de fonctions\n"
+#~ "      -F\tpour afficher les noms de fonctions (et les numéros de ligne et le\n"
+#~ "       \tfichier source si le mode de débogage est activé\n"
+#~ "      -i\tpour que les NAME aient l'attribut « integer »\n"
+#~ "      -r\tpour que les NAME soient en lecture seule\n"
+#~ "      -t\tpour que les NAME aient l'attribut « trace »\n"
+#~ "      -x\tpour faire un export des NAME\n"
+#~ "    \n"
+#~ "    L'évaluation arithmétique des variables ayant l'attribut « integer » est\n"
+#~ "    effectuée au moment de l'affectation (voir « let »).\n"
+#~ "    \n"
+#~ "    Lors de l'affichage des valeurs de variables, -f affiche le nom de la fonction\n"
+#~ "    et sa définition.  L'option -F permet de n'afficher que le nom.\n"
+#~ "    \n"
+#~ "    Un attribut peut être désactivé en utilisant « + » au lieu de « - ».  Dans une\n"
+#~ "    fonction, ceci a pour effet de rendre les NAME locaux, comme avec la commande «local »."
+
 #~ msgid "Obsolete.  See `declare'."
 #~ msgstr "Obsolète. Consulter « declare »."
 
@@ -5191,15 +5449,11 @@ msgstr ""
 #~ "    can only be used within a function; it makes the variable NAME\n"
 #~ "    have a visible scope restricted to that function and its children."
 #~ msgstr ""
-#~ "Permet de créer une variable locale appelée NAME, et de lui affecter une "
-#~ "VALUE.\n"
-#~ "    LOCAL peut seulement être utilisé à l'intérieur d'une fonction ; il "
-#~ "rend le nom de\n"
-#~ "    variable NAME visible uniquement à l'intérieur de la fonction et de "
-#~ "ses filles."
+#~ "Permet de créer une variable locale appelée NAME, et de lui affecter une VALUE.\n"
+#~ "    LOCAL peut seulement être utilisé à l'intérieur d'une fonction ; il rend le nom de\n"
+#~ "    variable NAME visible uniquement à l'intérieur de la fonction et de ses filles."
 
-#~ msgid ""
-#~ "Output the ARGs.  If -n is specified, the trailing newline is suppressed."
+#~ msgid "Output the ARGs.  If -n is specified, the trailing newline is suppressed."
 #~ msgstr "Affiche les ARGs. L'option « -n » supprime le saut de ligne final."
 
 #~ msgid ""
@@ -5214,39 +5468,25 @@ msgstr ""
 #~ "    previously loaded with -f.  If no non-option names are given, or\n"
 #~ "    the -p option is supplied, a list of builtins is printed.  The\n"
 #~ "    -a option means to print every builtin with an indication of whether\n"
-#~ "    or not it is enabled.  The -s option restricts the output to the "
-#~ "POSIX.2\n"
-#~ "    `special' builtins.  The -n option displays a list of all disabled "
-#~ "builtins."
+#~ "    or not it is enabled.  The -s option restricts the output to the POSIX.2\n"
+#~ "    `special' builtins.  The -n option displays a list of all disabled builtins."
 #~ msgstr ""
 #~ "Active et désactive les primitives du shell.  Ceci permet\n"
-#~ "    d'utiliser une commande du disque qui a le même nom qu'une commande "
-#~ "intégrée\n"
+#~ "    d'utiliser une commande du disque qui a le même nom qu'une commande intégrée\n"
 #~ "    sans devoir spécifier un chemin complet.  Si « -n » est utilisé, les\n"
-#~ "    noms NAME sont désactivés ; sinon, les noms NAME sont activés. Par "
-#~ "exemple,\n"
+#~ "    noms NAME sont désactivés ; sinon, les noms NAME sont activés. Par exemple,\n"
 #~ "    pour utiliser « test » trouvé dans $PATH au lieu de la primitive du\n"
-#~ "    même nom, tapez « enable -n test ».  Sur les systèmes permettant le "
-#~ "chargement\n"
-#~ "    dynamique, l'option « -f » peut être utilisée pour charger de "
-#~ "nouvelles primitives\n"
-#~ "    depuis l'objet partagé FILENAME.  L'option « -d » efface une "
-#~ "primitive précédemment\n"
-#~ "    chargée avec « -f ».  Si aucun nom (n'étant pas une option) n'est "
-#~ "donné, ou si l'option\n"
-#~ "    « -p » est spécifiée, une liste de primitive est affichée.  L'option "
-#~ "« -a » permet d'afficher\n"
-#~ "    toutes les primitives en précisant si elles sont activées ou non. "
-#~ "L'option « -s » restreint\n"
-#~ "    la sortie aux primitives « special » POSIX.2. L'option « -n » affiche "
-#~ "une liste de toutes les\n"
+#~ "    même nom, tapez « enable -n test ».  Sur les systèmes permettant le chargement\n"
+#~ "    dynamique, l'option « -f » peut être utilisée pour charger de nouvelles primitives\n"
+#~ "    depuis l'objet partagé FILENAME.  L'option « -d » efface une primitive précédemment\n"
+#~ "    chargée avec « -f ».  Si aucun nom (n'étant pas une option) n'est donné, ou si l'option\n"
+#~ "    « -p » est spécifiée, une liste de primitive est affichée.  L'option « -a » permet d'afficher\n"
+#~ "    toutes les primitives en précisant si elles sont activées ou non. L'option « -s » restreint\n"
+#~ "    la sortie aux primitives « special » POSIX.2. L'option « -n » affiche une liste de toutes les\n"
 #~ "    primitives désactivées."
 
-#~ msgid ""
-#~ "Read ARGs as input to the shell and execute the resulting command(s)."
-#~ msgstr ""
-#~ "Lit les ARGs comme une entrée du shell et exécute les commandes "
-#~ "résultantes."
+#~ msgid "Read ARGs as input to the shell and execute the resulting command(s)."
+#~ msgstr "Lit les ARGs comme une entrée du shell et exécute les commandes résultantes."
 
 #~ msgid ""
 #~ "Exec FILE, replacing this shell with the specified program.\n"
@@ -5258,16 +5498,14 @@ msgstr ""
 #~ "    If the file cannot be executed and the shell is not interactive,\n"
 #~ "    then the shell exits, unless the shell option `execfail' is set."
 #~ msgstr ""
-#~ "Exécute le fichier FILE en remplaçant ce shell par le programme "
-#~ "spécifié.\n"
+#~ "Exécute le fichier FILE en remplaçant ce shell par le programme spécifié.\n"
 #~ "    Si FILE n'est pas spécifié, les redirections prennent effet dans\n"
 #~ "    ce shell. Si le premier argument est « -l », un tiret est placé dans\n"
 #~ "    l'argument n°0 transmis à FILE, comme le fait « login ». Si l'option\n"
 #~ "    « -c » est fournie, FILE est exécuté avec un environnement vide.\n"
 #~ "    L'option « -a » indique de définir « argv[0] » du processus exécuté\n"
 #~ "    à NAME. Si le fichier ne peut pas être exécuté et que le shell n'est\n"
-#~ "    pas interactif, alors le shell se termine, à moins que l'option « "
-#~ "execfail »\n"
+#~ "    pas interactif, alors le shell se termine, à moins que l'option « execfail »\n"
 #~ "    ne soit définie."
 
 #~ msgid "Logout of a login shell."
@@ -5278,36 +5516,22 @@ msgstr ""
 #~ "    remembered.  If the -p option is supplied, PATHNAME is used as the\n"
 #~ "    full pathname of NAME, and no path search is performed.  The -r\n"
 #~ "    option causes the shell to forget all remembered locations.  The -d\n"
-#~ "    option causes the shell to forget the remembered location of each "
-#~ "NAME.\n"
+#~ "    option causes the shell to forget the remembered location of each NAME.\n"
 #~ "    If the -t option is supplied the full pathname to which each NAME\n"
-#~ "    corresponds is printed.  If multiple NAME arguments are supplied "
-#~ "with\n"
-#~ "    -t, the NAME is printed before the hashed full pathname.  The -l "
-#~ "option\n"
-#~ "    causes output to be displayed in a format that may be reused as "
-#~ "input.\n"
-#~ "    If no arguments are given, information about remembered commands is "
-#~ "displayed."
+#~ "    corresponds is printed.  If multiple NAME arguments are supplied with\n"
+#~ "    -t, the NAME is printed before the hashed full pathname.  The -l option\n"
+#~ "    causes output to be displayed in a format that may be reused as input.\n"
+#~ "    If no arguments are given, information about remembered commands is displayed."
 #~ msgstr ""
-#~ "Pour chaque NAME, le chemin complet de la commande est déterminé puis "
-#~ "mémorisé.\n"
-#~ "    Si l'option « -p » est fournie, le CHEMIN est utilisé comme chemin "
-#~ "complet\n"
-#~ "    pour NAME, et aucune recherche n'est effectuée. L'option « -r » "
-#~ "demande au shell\n"
-#~ "    d'oublier tous les chemins mémorisés. L'option « -d » demande au "
-#~ "shell d'oublier\n"
-#~ "    les chemins mémorisés pour le NAME. Si l'option « -t » est fournie, "
-#~ "le chemin\n"
-#~ "    complet auquel correspond chaque NAME est affiché. Si plusieurs NAME "
-#~ "sont fournis\n"
-#~ "    à l'option « -t », le NAME est affiché avant chemin complet haché. "
-#~ "L'option\n"
-#~ "    « -l » permet d'utiliser un format de sortie qui peut être réutilisé "
-#~ "comme entrée.\n"
-#~ "    Si aucun argument n'est donné, des informations sur les commandes "
-#~ "mémorisées sont\n"
+#~ "Pour chaque NAME, le chemin complet de la commande est déterminé puis mémorisé.\n"
+#~ "    Si l'option « -p » est fournie, le CHEMIN est utilisé comme chemin complet\n"
+#~ "    pour NAME, et aucune recherche n'est effectuée. L'option « -r » demande au shell\n"
+#~ "    d'oublier tous les chemins mémorisés. L'option « -d » demande au shell d'oublier\n"
+#~ "    les chemins mémorisés pour le NAME. Si l'option « -t » est fournie, le chemin\n"
+#~ "    complet auquel correspond chaque NAME est affiché. Si plusieurs NAME sont fournis\n"
+#~ "    à l'option « -t », le NAME est affiché avant chemin complet haché. L'option\n"
+#~ "    « -l » permet d'utiliser un format de sortie qui peut être réutilisé comme entrée.\n"
+#~ "    Si aucun argument n'est donné, des informations sur les commandes mémorisées sont\n"
 #~ "    affichées."
 
 #~ msgid ""
@@ -5318,40 +5542,75 @@ msgstr ""
 #~ "    a short usage synopsis."
 #~ msgstr ""
 #~ "Affiche des informations utiles sur les commandes intégrées. Si MOTIF\n"
-#~ "    est précisé, une aide détaillée sur toutes les commandes "
-#~ "correspondant\n"
+#~ "    est précisé, une aide détaillée sur toutes les commandes correspondant\n"
 #~ "    au MOTIF sont affichées, sinon une liste des commandes intégrées est\n"
 #~ "    fournie. L'option « -s » restreint l'affichage de chaque commande\n"
 #~ "    correspondant au MOTIF à une courte description sur l'utilisation."
 
 #~ msgid ""
 #~ "By default, removes each JOBSPEC argument from the table of active jobs.\n"
-#~ "    If the -h option is given, the job is not removed from the table, but "
-#~ "is\n"
+#~ "    If the -h option is given, the job is not removed from the table, but is\n"
 #~ "    marked so that SIGHUP is not sent to the job if the shell receives a\n"
-#~ "    SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove "
-#~ "all\n"
-#~ "    jobs from the job table; the -r option means to remove only running "
-#~ "jobs."
+#~ "    SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove all\n"
+#~ "    jobs from the job table; the -r option means to remove only running jobs."
 #~ msgstr ""
-#~ "Par défaut, enlève tous les arguments JOBSPEC de la table des tâches "
-#~ "actives.\n"
-#~ "    Si l'option « -h » est fournie, la tâche n'est pas retirée de la "
-#~ "table mais\n"
-#~ "    est marquée de telle sorte que le signal SIGHUP ne lui soit pas "
-#~ "envoyé quand\n"
-#~ "    le shell reçoit un SIGHUP. Lorsque JOBSPEC n'est pas fournie, "
-#~ "l'option « -a »,\n"
-#~ "    permet d'enlever toutes les tâches de la table des tâches. L'option « "
-#~ "-r »\n"
+#~ "Par défaut, enlève tous les arguments JOBSPEC de la table des tâches actives.\n"
+#~ "    Si l'option « -h » est fournie, la tâche n'est pas retirée de la table mais\n"
+#~ "    est marquée de telle sorte que le signal SIGHUP ne lui soit pas envoyé quand\n"
+#~ "    le shell reçoit un SIGHUP. Lorsque JOBSPEC n'est pas fournie, l'option « -a »,\n"
+#~ "    permet d'enlever toutes les tâches de la table des tâches. L'option « -r »\n"
 #~ "    indique de ne retirer que les tâches en cours de fonctionnement."
 
+#~ msgid ""
+#~ "One line is read from the standard input, or from file descriptor FD if the\n"
+#~ "    -u option is supplied, and the first word is assigned to the first NAME,\n"
+#~ "    the second word to the second NAME, and so on, with leftover words assigned\n"
+#~ "    to the last NAME.  Only the characters found in $IFS are recognized as word\n"
+#~ "    delimiters.  If no NAMEs are supplied, the line read is stored in the REPLY\n"
+#~ "    variable.  If the -r option is given, this signifies `raw' input, and\n"
+#~ "    backslash escaping is disabled.  The -d option causes read to continue\n"
+#~ "    until the first character of DELIM is read, rather than newline.  If the -p\n"
+#~ "    option is supplied, the string PROMPT is output without a trailing newline\n"
+#~ "    before attempting to read.  If -a is supplied, the words read are assigned\n"
+#~ "    to sequential indices of ARRAY, starting at zero.  If -e is supplied and\n"
+#~ "    the shell is interactive, readline is used to obtain the line.  If -n is\n"
+#~ "    supplied with a non-zero NCHARS argument, read returns after NCHARS\n"
+#~ "    characters have been read.  The -s option causes input coming from a\n"
+#~ "    terminal to not be echoed.\n"
+#~ "    \n"
+#~ "    The -t option causes read to time out and return failure if a complete line\n"
+#~ "    of input is not read within TIMEOUT seconds.  If the TMOUT variable is set,\n"
+#~ "    its value is the default timeout.  The return code is zero, unless end-of-file\n"
+#~ "    is encountered, read times out, or an invalid file descriptor is supplied as\n"
+#~ "    the argument to -u."
+#~ msgstr ""
+#~ "Une ligne est lue depuis l'entrée standard ou depuis le descripteur de fichier\n"
+#~ "    FD si l'option « -u » est fournie. Le premier mot est affecté au premier NAME,\n"
+#~ "    le second mot au second NAME, et ainsi de suite, les mots restants étant affectés\n"
+#~ "    au dernier NAME. Seuls les caractères situés dans « $IFS » sont reconnus comme\n"
+#~ "    étant des délimiteurs de mots. Si aucun NAME n'est fourni, la ligne est conservée\n"
+#~ "    dans la variable REPLY. L'option « -r » signifie « entrée brute » et la neutralisation \n"
+#~ "    par barre oblique inverse est désactivée. L'option « -d » indique de continuer\"    la lecture jusqu'à ce que le premier caractère de DELIM soit lu plutôt que\n"
+#~ "    le retour à la ligne. Si « -p » est fourni, la chaîne PROMPT est affichée\n"
+#~ "    sans retour à la ligne final avant la tentative de lecture. Si « -a » est fourni,\n"
+#~ "    les mots lus sont affectés en séquence aux indices du TABLEAU, en commençant\n"
+#~ "    à zéro. Si « -e » est fourni et que le shell est interactif, « readline » est\n"
+#~ "    utilisé pour obtenir la ligne. Si « -n » est fourni avec un argument NCHARS non nul,\n"
+#~ "    « read » se termine après que NCHARS caractères ont été lus. L'option « -s »\n"
+#~ "    permet aux données venant d'un terminal de ne pas être répétées.\n"
+#~ "    \n"
+#~ "    L'option « -t » permet à « read » de se terminer avec une erreur si une ligne\n"
+#~ "    entière de données ne lui a pas été fournie avant le DÉLAI d'expiration. Si la\n"
+#~ "    variable TMOUT est définie, sa valeur est le délai d'expiration par défaut. Le code\n"
+#~ "    de retour est zéro à moins qu'une fin de fichier ne soit rencontrée, que « read »\n"
+#~ "    atteigne le délai d'expiration ou qu'un descripteur de fichier incorrect ne soit\n"
+#~ "    fourni pour l'argument « -u »."
+
 #~ msgid ""
 #~ "Causes a function to exit with the return value specified by N.  If N\n"
 #~ "    is omitted, the return status is that of the last command."
 #~ msgstr ""
-#~ "Permet à une fonction de se terminer avec le code de retour spécifié par "
-#~ "N.\n"
+#~ "Permet à une fonction de se terminer avec le code de retour spécifié par N.\n"
 #~ "    Si N est omis, le code de retour est celui de la dernière commande."
 
 #~ msgid ""
@@ -5363,12 +5622,9 @@ msgstr ""
 #~ msgstr ""
 #~ "Pour chaque NAME, supprime la variable ou la fonction correspondante.\n"
 #~ "    En spécifiant « -v », « unset » agira seulement sur les variables.\n"
-#~ "    Avec l'option « -f », « unset » n'agit que sur les fonctions. Sans "
-#~ "option,\n"
-#~ "    « unset » essaye d'abord de supprimer une variable et, s'il échoue, "
-#~ "essaye\n"
-#~ "    de supprimer une fonction. Certaines variables ne peuvent pas être "
-#~ "supprimées.\n"
+#~ "    Avec l'option « -f », « unset » n'agit que sur les fonctions. Sans option,\n"
+#~ "    « unset » essaye d'abord de supprimer une variable et, s'il échoue, essaye\n"
+#~ "    de supprimer une fonction. Certaines variables ne peuvent pas être supprimées.\n"
 #~ "    Consultez aussi « readonly ».    "
 
 #~ msgid ""
@@ -5381,39 +5637,27 @@ msgstr ""
 #~ "    processing."
 #~ msgstr ""
 #~ "Les NAME sont marqués pour export automatique vers l'environnement des\n"
-#~ "    prochaines commandes exécutées. si l'option « -f » est donnée, les "
-#~ "NAME\n"
-#~ "    se rapportent à des fonctions. Si aucun NAME n'est donné ou si « -p "
-#~ "»\n"
-#~ "    est fourni, la liste de tous les NAME exportés dans ce shell "
-#~ "s'affiche.\n"
-#~ "    L'argument « -n » permet de supprimer la propriété d'export des NAME "
-#~ "qui\n"
-#~ "    suivent. L'argument « -- » désactive le traitement des options "
-#~ "suivantes."
+#~ "    prochaines commandes exécutées. si l'option « -f » est donnée, les NAME\n"
+#~ "    se rapportent à des fonctions. Si aucun NAME n'est donné ou si « -p »\n"
+#~ "    est fourni, la liste de tous les NAME exportés dans ce shell s'affiche.\n"
+#~ "    L'argument « -n » permet de supprimer la propriété d'export des NAME qui\n"
+#~ "    suivent. L'argument « -- » désactive le traitement des options suivantes."
 
 #~ msgid ""
 #~ "The given NAMEs are marked readonly and the values of these NAMEs may\n"
 #~ "    not be changed by subsequent assignment.  If the -f option is given,\n"
 #~ "    then functions corresponding to the NAMEs are so marked.  If no\n"
-#~ "    arguments are given, or if `-p' is given, a list of all readonly "
-#~ "names\n"
+#~ "    arguments are given, or if `-p' is given, a list of all readonly names\n"
 #~ "    is printed.  The `-a' option means to treat each NAME as\n"
 #~ "    an array variable.  An argument of `--' disables further option\n"
 #~ "    processing."
 #~ msgstr ""
-#~ "Les NAME donnés sont marqués pour lecture seule et les valeurs de ces "
-#~ "NAME\n"
-#~ "    ne peuvent plus être changés par affection. Si l'option « -f » est "
-#~ "donnée,\n"
-#~ "    les fonctions correspondant aux NAME sont marquées de la sorte. Si "
-#~ "aucun\n"
-#~ "    argument n'est donné ou si « -p » est fourni, la liste de tous les "
-#~ "noms\n"
-#~ "    en lecture seule est affichée. L'option « -a » indique de traiter "
-#~ "tous les\n"
-#~ "    NAME comme des variables tableaux. L'argument « -- » désactive le "
-#~ "traitement\n"
+#~ "Les NAME donnés sont marqués pour lecture seule et les valeurs de ces NAME\n"
+#~ "    ne peuvent plus être changés par affection. Si l'option « -f » est donnée,\n"
+#~ "    les fonctions correspondant aux NAME sont marquées de la sorte. Si aucun\n"
+#~ "    argument n'est donné ou si « -p » est fourni, la liste de tous les noms\n"
+#~ "    en lecture seule est affichée. L'option « -a » indique de traiter tous les\n"
+#~ "    NAME comme des variables tableaux. L'argument « -- » désactive le traitement\n"
 #~ "    des option suivantes."
 
 #~ msgid ""
@@ -5428,10 +5672,8 @@ msgstr ""
 #~ "    signal.  The `-f' if specified says not to complain about this\n"
 #~ "    being a login shell if it is; just suspend anyway."
 #~ msgstr ""
-#~ "Suspend l'exécution de ce shell jusqu'à ce qu'il reçoive le signal "
-#~ "SIGCONT.\n"
-#~ "    Si « -f » est spécifié, il indique de ne pas se plaindre s'il s'agit "
-#~ "d'un \n"
+#~ "Suspend l'exécution de ce shell jusqu'à ce qu'il reçoive le signal SIGCONT.\n"
+#~ "    Si « -f » est spécifié, il indique de ne pas se plaindre s'il s'agit d'un \n"
 #~ "    shell de connexion, mais de suspendre quand-même."
 
 #~ msgid ""
@@ -5445,85 +5687,60 @@ msgstr ""
 #~ "For each NAME, indicate how it would be interpreted if used as a\n"
 #~ "    command name.\n"
 #~ "    \n"
-#~ "    If the -t option is used, `type' outputs a single word which is one "
-#~ "of\n"
-#~ "    `alias', `keyword', `function', `builtin', `file' or `', if NAME is "
-#~ "an\n"
-#~ "    alias, shell reserved word, shell function, shell builtin, disk "
-#~ "file,\n"
+#~ "    If the -t option is used, `type' outputs a single word which is one of\n"
+#~ "    `alias', `keyword', `function', `builtin', `file' or `', if NAME is an\n"
+#~ "    alias, shell reserved word, shell function, shell builtin, disk file,\n"
 #~ "    or unfound, respectively.\n"
 #~ "    \n"
 #~ "    If the -p flag is used, `type' either returns the name of the disk\n"
 #~ "    file that would be executed, or nothing if `type -t NAME' would not\n"
 #~ "    return `file'.\n"
 #~ "    \n"
-#~ "    If the -a flag is used, `type' displays all of the places that "
-#~ "contain\n"
+#~ "    If the -a flag is used, `type' displays all of the places that contain\n"
 #~ "    an executable named `file'.  This includes aliases, builtins, and\n"
 #~ "    functions, if and only if the -p flag is not also used.\n"
 #~ "    \n"
 #~ "    The -f flag suppresses shell function lookup.\n"
 #~ "    \n"
-#~ "    The -P flag forces a PATH search for each NAME, even if it is an "
-#~ "alias,\n"
-#~ "    builtin, or function, and returns the name of the disk file that "
-#~ "would\n"
+#~ "    The -P flag forces a PATH search for each NAME, even if it is an alias,\n"
+#~ "    builtin, or function, and returns the name of the disk file that would\n"
 #~ "    be executed."
 #~ msgstr ""
-#~ "Indique comment chaque NAME serait interprété s'il était utilisé comme "
-#~ "un\n"
+#~ "Indique comment chaque NAME serait interprété s'il était utilisé comme un\n"
 #~ "    nom de commande.\n"
 #~ "    \n"
-#~ "    Si l'option « -t » est utilisée, « type » affiche un simple mot "
-#~ "parmi\n"
-#~ "    « alias », « keyword », « function », « builtin », « file » ou « », "
-#~ "si\n"
-#~ "    NAME est respectivement un alias, un mot réservé du shell, une "
-#~ "fonction\n"
+#~ "    Si l'option « -t » est utilisée, « type » affiche un simple mot parmi\n"
+#~ "    « alias », « keyword », « function », « builtin », « file » ou « », si\n"
+#~ "    NAME est respectivement un alias, un mot réservé du shell, une fonction\n"
 #~ "    du shell, une primitive, un fichier du disque, ou s'il est inconnu.\n"
 #~ "    \n"
-#~ "    Si l'indicateur « -p » est utilisé, « type » renvoie soit le nom du "
-#~ "fichier\n"
-#~ "    du disque qui serait exécuté, soit rien si « type -t NAME » ne "
-#~ "retourne pas\n"
+#~ "    Si l'indicateur « -p » est utilisé, « type » renvoie soit le nom du fichier\n"
+#~ "    du disque qui serait exécuté, soit rien si « type -t NAME » ne retourne pas\n"
 #~ "    « file ».\n"
 #~ "    \n"
-#~ "    Si « -a » est utilisé, « type » affiche tous les emplacements qui "
-#~ "contiennent\n"
-#~ "    un exécutable nommé « file ». Ceci inclut les alias, les primitives "
-#~ "et les\n"
+#~ "    Si « -a » est utilisé, « type » affiche tous les emplacements qui contiennent\n"
+#~ "    un exécutable nommé « file ». Ceci inclut les alias, les primitives et les\n"
 #~ "    fonctions si, et seulement si « -p » n'est pas également utilisé.\n"
 #~ "    \n"
-#~ "    L'indicateur « -P » force une recherche dans PATH pour chaque NAME "
-#~ "même\n"
-#~ "    si c'est un alias, une primitive ou une fonction et renvoie le nom "
-#~ "du\n"
+#~ "    L'indicateur « -P » force une recherche dans PATH pour chaque NAME même\n"
+#~ "    si c'est un alias, une primitive ou une fonction et renvoie le nom du\n"
 #~ "    fichier du disque qui serait exécuté."
 
 #~ msgid ""
 #~ "The user file-creation mask is set to MODE.  If MODE is omitted, or if\n"
-#~ "    `-S' is supplied, the current value of the mask is printed.  The `-"
-#~ "S'\n"
-#~ "    option makes the output symbolic; otherwise an octal number is "
-#~ "output.\n"
+#~ "    `-S' is supplied, the current value of the mask is printed.  The `-S'\n"
+#~ "    option makes the output symbolic; otherwise an octal number is output.\n"
 #~ "    If `-p' is supplied, and MODE is omitted, the output is in a form\n"
 #~ "    that may be used as input.  If MODE begins with a digit, it is\n"
-#~ "    interpreted as an octal number, otherwise it is a symbolic mode "
-#~ "string\n"
+#~ "    interpreted as an octal number, otherwise it is a symbolic mode string\n"
 #~ "    like that accepted by chmod(1)."
 #~ msgstr ""
-#~ "Le masque de création des fichiers utilisateurs est réglé à MODE. Si "
-#~ "MODE\n"
-#~ "    est omis ou si « -S » est fourni, la valeur actuelle du masque est "
-#~ "affichée\n"
-#~ "    L'option « -S » rend la sortie symbolique, sinon une valeur octale "
-#~ "est\n"
-#~ "    est utilisée. Si « -p » est fourni et que MODE est omis, la sortie se "
-#~ "fait\n"
-#~ "    dans un format qui peut être réutilisé comme entrée. Si MODE commence "
-#~ "par\n"
-#~ "    un chiffre, il est interprété comme un nombre octal, sinon comme une "
-#~ "chaîne\n"
+#~ "Le masque de création des fichiers utilisateurs est réglé à MODE. Si MODE\n"
+#~ "    est omis ou si « -S » est fourni, la valeur actuelle du masque est affichée\n"
+#~ "    L'option « -S » rend la sortie symbolique, sinon une valeur octale est\n"
+#~ "    est utilisée. Si « -p » est fourni et que MODE est omis, la sortie se fait\n"
+#~ "    dans un format qui peut être réutilisé comme entrée. Si MODE commence par\n"
+#~ "    un chiffre, il est interprété comme un nombre octal, sinon comme une chaîne\n"
 #~ "    symbolique de mode comme celle utilisée par « chmod(1) »."
 
 #~ msgid ""
@@ -5556,38 +5773,23 @@ msgstr ""
 #~ "    settable options is displayed, with an indication of whether or\n"
 #~ "    not each is set."
 #~ msgstr ""
-#~ "Commute la valeur des variables qui contrôlent les comportements "
-#~ "optionnels.\n"
-#~ "    L'option « -s » indique d'activer chaque option nommée OPTNAME. "
-#~ "L'option\n"
-#~ "    « -u » désactive l'option OPTNAME. L'option « -q » rend la sortie "
-#~ "silencieuse.\n"
-#~ "    Le code de retour indique si chaque OPTNAME est activée ou "
-#~ "désactivée.\n"
-#~ "    L'option « -o » restreint les options OPTNAME à celles qui peuvent "
-#~ "être utilisées avec\n"
-#~ "    « set -o ». Sans option ou avec l'option « -p », une liste de toutes "
-#~ "les\n"
-#~ "    options modifiables est affichée, avec une indication sur l'état de "
-#~ "chacune."
+#~ "Commute la valeur des variables qui contrôlent les comportements optionnels.\n"
+#~ "    L'option « -s » indique d'activer chaque option nommée OPTNAME. L'option\n"
+#~ "    « -u » désactive l'option OPTNAME. L'option « -q » rend la sortie silencieuse.\n"
+#~ "    Le code de retour indique si chaque OPTNAME est activée ou désactivée.\n"
+#~ "    L'option « -o » restreint les options OPTNAME à celles qui peuvent être utilisées avec\n"
+#~ "    « set -o ». Sans option ou avec l'option « -p », une liste de toutes les\n"
+#~ "    options modifiables est affichée, avec une indication sur l'état de chacune."
 
 #~ msgid ""
 #~ "For each NAME, specify how arguments are to be completed.\n"
-#~ "    If the -p option is supplied, or if no options are supplied, "
-#~ "existing\n"
-#~ "    completion specifications are printed in a way that allows them to "
-#~ "be\n"
-#~ "    reused as input.  The -r option removes a completion specification "
-#~ "for\n"
-#~ "    each NAME, or, if no NAMEs are supplied, all completion "
-#~ "specifications."
+#~ "    If the -p option is supplied, or if no options are supplied, existing\n"
+#~ "    completion specifications are printed in a way that allows them to be\n"
+#~ "    reused as input.  The -r option removes a completion specification for\n"
+#~ "    each NAME, or, if no NAMEs are supplied, all completion specifications."
 #~ msgstr ""
 #~ "Pour chaque NAME, spécifie comment les arguments doivent être complétés.\n"
-#~ "    Si l'option « -p » est fournie ou si aucune option n'est fournie, les "
-#~ "spécifications\n"
-#~ "    de complètement actuelles sont affichées de manière à pouvoir être "
-#~ "réutilisées\n"
-#~ "    comme entrée. L'option « -r » enlève la spécification de complètement "
-#~ "pour chaque\n"
-#~ "    NAME ou, si aucun NAME n'est fourni, toutes les spécifications de "
-#~ "complètement."
+#~ "    Si l'option « -p » est fournie ou si aucune option n'est fournie, les spécifications\n"
+#~ "    de complètement actuelles sont affichées de manière à pouvoir être réutilisées\n"
+#~ "    comme entrée. L'option « -r » enlève la spécification de complètement pour chaque\n"
+#~ "    NAME ou, si aucun NAME n'est fourni, toutes les spécifications de complètement."
index 744306f6bfed41b997ed8cda3b97047d4ce8b927..efc25c857e410d5955c3797c47d33626b775aa92 100644 (file)
--- a/redir.c~
+++ b/redir.c~
@@ -439,7 +439,6 @@ here_document_to_fd (redirectee, ri)
   /* Make the document really temporary.  Also make it the input. */
   fd2 = open (filename, O_RDONLY, 0600);
 
-itrace("here_document_to_fd: %s open read-only to fd %d", filename, fd2);
   if (fd2 < 0)
     {
       r = errno;
@@ -639,7 +638,8 @@ redir_open (filename, flags, mode, ri)
 #endif /* AFS */
     }
 
-itrace("redir_open: %s opens to fd %d", filename, fd);
+itrace("redir_open: %s -> %d", filename, fd);
+
   return fd;
 }
 
diff --git a/subst.c b/subst.c
index e642b4af7c385081892930808a0d2b44337adf79..ee2303feb9c79f9abb3bfee6a4e265922cf86d35 100644 (file)
--- a/subst.c
+++ b/subst.c
@@ -4589,6 +4589,15 @@ static struct temp_fifo *fifo_list = (struct temp_fifo *)NULL;
 static int nfifo;
 static int fifo_list_size;
 
+char *
+copy_fifo_list (sizep)
+     int *sizep;
+{
+  if (sizep)
+    *sizep = 0;
+  return (char *)NULL;
+}
+
 static void
 add_fifo_list (pathname)
      char *pathname;
@@ -4604,6 +4613,19 @@ add_fifo_list (pathname)
   nfifo++;
 }
 
+void
+unlink_fifo (i)
+     int i;
+{
+  if ((fifo_list[i].proc == -1) || (kill(fifo_list[i].proc, 0) == -1))
+    {
+      unlink (fifo_list[i].file);
+      free (fifo_list[i].file);
+      fifo_list[i].file = (char *)NULL;
+      fifo_list[i].proc = -1;
+    }
+}
+
 void
 unlink_fifo_list ()
 {
@@ -4641,12 +4663,52 @@ unlink_fifo_list ()
     nfifo = 0;
 }
 
+/* Take LIST, which is a bitmap denoting active FIFOs in fifo_list
+   from some point in the past, and close all open FIFOs in fifo_list
+   that are not marked as active in LIST.  If LIST is NULL, close
+   everything in fifo_list. LSIZE is the number of elements in LIST, in
+   case it's larger than fifo_list_size (size of fifo_list). */
+void
+close_new_fifos (list, lsize)
+     char *list;
+     int lsize;
+{
+  int i;
+
+  if (list == 0)
+    {
+itrace("close_new_fifos: list == 0, calling unlink_fifo_list");
+      unlink_fifo_list ();
+      return;
+    }
+
+  for (i = 0; i < lsize; i++)
+    if (list[i] == 0 && i < fifo_list_size && fifo_list[i].proc != -1)
+{
+itrace("close_new_fifos: closing %d", i);
+      unlink_fifo (i);
+}
+
+  for (i = lsize; i < fifo_list_size; i++)
+{
+if (fifo_list[i].proc != -1)
+  itrace("close_new_fifos: closing %d", i);
+    unlink_fifo (i);  
+}
+}
+
 int
 fifos_pending ()
 {
   return nfifo;
 }
 
+int
+num_fifos ()
+{
+  return nfifo;
+}
+
 static char *
 make_named_pipe ()
 {
@@ -4673,11 +4735,30 @@ static char *dev_fd_list = (char *)NULL;
 static int nfds;
 static int totfds;     /* The highest possible number of open files. */
 
+char *
+copy_fifo_list (sizep)
+     int *sizep;
+{
+  char *ret;
+
+  if (nfds == 0 || totfds == 0)
+    {
+      if (sizep)
+       *sizep = 0;
+      return (char *)NULL;
+    }
+
+  if (sizep)
+    *sizep = totfds;
+  ret = (char *)xmalloc (totfds);
+  return (memcpy (ret, dev_fd_list, totfds));
+}
+
 static void
 add_fifo_list (fd)
      int fd;
 {
-  if (!dev_fd_list || fd >= totfds)
+  if (dev_fd_list == 0 || fd >= totfds)
     {
       int ofds;
 
@@ -4702,6 +4783,24 @@ fifos_pending ()
   return 0;    /* used for cleanup; not needed with /dev/fd */
 }
 
+int
+num_fifos ()
+{
+  return nfds;
+}
+
+void
+unlink_fifo (fd)
+     int fd;
+{
+  if (dev_fd_list[fd])
+    {
+      close (fd);
+      dev_fd_list[fd] = 0;
+      nfds--;
+    }
+}
+
 void
 unlink_fifo_list ()
 {
@@ -4711,16 +4810,37 @@ unlink_fifo_list ()
     return;
 
   for (i = 0; nfds && i < totfds; i++)
-    if (dev_fd_list[i])
-      {
-       close (i);
-       dev_fd_list[i] = 0;
-       nfds--;
-      }
+    unlink_fifo (i);
 
   nfds = 0;
 }
 
+/* Take LIST, which is a snapshot copy of dev_fd_list from some point in
+   the past, and close all open fds in dev_fd_list that are not marked
+   as open in LIST.  If LIST is NULL, close everything in dev_fd_list.
+   LSIZE is the number of elements in LIST, in case it's larger than
+   totfds (size of dev_fd_list). */
+void
+close_new_fifos (list, lsize)
+     char *list;
+     int lsize;
+{
+  int i;
+
+  if (list == 0)
+    {
+      unlink_fifo_list ();
+      return;
+    }
+
+  for (i = 0; i < lsize; i++)
+    if (list[i] == 0 && i < totfds && dev_fd_list[i])
+      unlink_fifo (i);
+
+  for (i = lsize; i < totfds; i++)
+    unlink_fifo (i);  
+}
+
 #if defined (NOTDEF)
 print_dev_fd_list ()
 {
index e642b4af7c385081892930808a0d2b44337adf79..92d0520610e480a2a47be29d3a1f5a30c42e007b 100644 (file)
--- a/subst.c~
+++ b/subst.c~
@@ -4589,6 +4589,15 @@ static struct temp_fifo *fifo_list = (struct temp_fifo *)NULL;
 static int nfifo;
 static int fifo_list_size;
 
+char *
+copy_fifo_list (sizep)
+     int *sizep;
+{
+  if (sizep)
+    *sizep = 0;
+  return (char *)NULL;
+}
+
 static void
 add_fifo_list (pathname)
      char *pathname;
@@ -4604,6 +4613,19 @@ add_fifo_list (pathname)
   nfifo++;
 }
 
+void
+unlink_fifo (i)
+     int i;
+{
+  if ((fifo_list[i].proc == -1) || (kill(fifo_list[i].proc, 0) == -1))
+    {
+      unlink (fifo_list[i].file);
+      free (fifo_list[i].file);
+      fifo_list[i].file = (char *)NULL;
+      fifo_list[i].proc = -1;
+    }
+}
+
 void
 unlink_fifo_list ()
 {
@@ -4641,12 +4663,52 @@ unlink_fifo_list ()
     nfifo = 0;
 }
 
+/* Take LIST, which is a bitmap denoting active FIFOs in fifo_list
+   from some point in the past, and close all open FIFOs in fifo_list
+   that are not marked as active in LIST.  If LIST is NULL, close
+   everything in fifo_list. LSIZE is the number of elements in LIST, in
+   case it's larger than fifo_list_size (size of fifo_list). */
+void
+close_new_fifos (list, lsize)
+     char *list;
+     int lsize;
+{
+  int i;
+
+  if (list == 0)
+    {
+itrace("close_new_fifos: list == 0, calling unlink_fifo_list");
+      unlink_fifo_list ();
+      return;
+    }
+
+  for (i = 0; i < lsize; i++)
+    if (list[i] == 0 && i < fifo_list_size && fifo_list[i].proc != -1)
+{
+itrace("close_new_fifos: closing %d", i);
+      unlink_fifo (i);
+}
+
+  for (i = lsize; i < fifo_list_size; i++)
+{
+if (fifo_list[i].proc != -1)
+  itrace("close_new_fifos: closing %d", i);
+    unlink_fifo (i);  
+}
+}
+
 int
 fifos_pending ()
 {
   return nfifo;
 }
 
+int
+num_fifos ()
+{
+  return nfifo;
+}
+
 static char *
 make_named_pipe ()
 {
@@ -4673,11 +4735,31 @@ static char *dev_fd_list = (char *)NULL;
 static int nfds;
 static int totfds;     /* The highest possible number of open files. */
 
+char *
+copy_fifo_list (sizep)
+     int *sizep;
+{
+  char *ret;
+
+  if (nfds == 0 || totfds == 0)
+    {
+      if (sizep)
+       *sizep = 0;
+      return (char *)NULL;
+    }
+
+  if (sizep)
+    *sizep = totfds;
+  ret = (char *)xmalloc (totfds);
+  return (memcpy (ret, dev_fd_list, totfds));
+}
+
 static void
 add_fifo_list (fd)
      int fd;
 {
-  if (!dev_fd_list || fd >= totfds)
+itrace("add_fifo_list: adding %d", fd);
+  if (dev_fd_list == 0 || fd >= totfds)
     {
       int ofds;
 
@@ -4702,6 +4784,24 @@ fifos_pending ()
   return 0;    /* used for cleanup; not needed with /dev/fd */
 }
 
+int
+num_fifos ()
+{
+  return nfds;
+}
+
+void
+unlink_fifo (fd)
+     int fd;
+{
+  if (dev_fd_list[fd])
+    {
+      close (fd);
+      dev_fd_list[fd] = 0;
+      nfds--;
+    }
+}
+
 void
 unlink_fifo_list ()
 {
@@ -4711,16 +4811,45 @@ unlink_fifo_list ()
     return;
 
   for (i = 0; nfds && i < totfds; i++)
-    if (dev_fd_list[i])
-      {
-       close (i);
-       dev_fd_list[i] = 0;
-       nfds--;
-      }
+    unlink_fifo (i);
 
   nfds = 0;
 }
 
+/* Take LIST, which is a snapshot copy of dev_fd_list from some point in
+   the past, and close all open fds in dev_fd_list that are not marked
+   as open in LIST.  If LIST is NULL, close everything in dev_fd_list.
+   LSIZE is the number of elements in LIST, in case it's larger than
+   totfds (size of dev_fd_list). */
+void
+close_new_fifos (list, lsize)
+     char *list;
+     int lsize;
+{
+  int i;
+
+  if (list == 0)
+    {
+itrace("close_new_fifos: list == 0, calling unlink_fifo_list");
+      unlink_fifo_list ();
+      return;
+    }
+
+  for (i = 0; i < lsize; i++)
+    if (list[i] == 0 && i < totfds && dev_fd_list[i])
+{
+itrace("close_new_fifos: closing %d", i);
+      unlink_fifo (i);
+}
+
+  for (i = lsize; i < totfds; i++)
+{
+if (dev_fd_list[i])
+  itrace("close_new_fifos: closing %d", i);
+    unlink_fifo (i);  
+}
+}
+
 #if defined (NOTDEF)
 print_dev_fd_list ()
 {
diff --git a/subst.h b/subst.h
index 8896a1174f8aa16f216b1c3448528fc8d03d8701..db6a1326d8779ef13810dd7c7bb52ed33e58ae18 100644 (file)
--- a/subst.h
+++ b/subst.h
@@ -254,7 +254,12 @@ extern WORD_DESC *command_substitute __P((char *, int));
 extern char *pat_subst __P((char *, char *, char *, int));
 
 extern int fifos_pending __P((void));
+extern int num_fifos __P((void));
 extern void unlink_fifo_list __P((void));
+extern void unlink_fifo __P((int));
+
+extern char *copy_fifo_list __P((int *));
+extern void unlink_new_fifos __P((char *, int));
 
 extern WORD_LIST *list_string_with_quotes __P((char *));
 
index 5d2717e0e35baac71fdaf65802f5febcaf897e0c..f313758c397e01734acce6cd3e51e10131e9f5cf 100644 (file)
--- a/subst.h~
+++ b/subst.h~
 #define ASS_MKASSOC    0x04
 
 /* Flags for the string extraction functions. */
-#define SX_NOALLOC     0x01    /* just skip; don't return substring */
-#define SX_VARNAME     0x02    /* variable name; for string_extract () */
-#define SX_REQMATCH    0x04    /* closing/matching delimiter required */
-#define SX_COMMAND     0x08    /* extracting a shell script/command */
-#define SX_NOCTLESC    0x10    /* don't honor CTLESC quoting */
-#define SX_NOESCCTLNUL 0x20    /* don't let CTLESC quote CTLNUL */
-#define SX_NOLONGJMP   0x40    /* don't longjmp on fatal error */
-#define SX_ARITHSUB    0x80    /* extracting $(( ... )) (currently unused) */
+#define SX_NOALLOC     0x0001  /* just skip; don't return substring */
+#define SX_VARNAME     0x0002  /* variable name; for string_extract () */
+#define SX_REQMATCH    0x0004  /* closing/matching delimiter required */
+#define SX_COMMAND     0x0008  /* extracting a shell script/command */
+#define SX_NOCTLESC    0x0010  /* don't honor CTLESC quoting */
+#define SX_NOESCCTLNUL 0x0020  /* don't let CTLESC quote CTLNUL */
+#define SX_NOLONGJMP   0x0040  /* don't longjmp on fatal error */
+#define SX_ARITHSUB    0x0080  /* extracting $(( ... )) (currently unused) */
+#define SX_POSIXEXP    0x0100  /* extracting new Posix pattern removal expansions in extract_dollar_brace_string */
 
 /* Remove backslashes which are quoting backquotes from STRING.  Modifies
    STRING, and returns a pointer to it. */
@@ -252,8 +253,11 @@ extern WORD_LIST *expand_words_shellexp __P((WORD_LIST *));
 extern WORD_DESC *command_substitute __P((char *, int));
 extern char *pat_subst __P((char *, char *, char *, int));
 
+extern char *copy_fifo_list __P((int *));
 extern int fifos_pending __P((void));
+extern int num_fifos __P((void));
 extern void unlink_fifo_list __P((void));
+extern void unlink_fifo __P((int));
 
 extern WORD_LIST *list_string_with_quotes __P((char *));