]> git.ipfire.org Git - thirdparty/bash.git/commitdiff
commit bash-20120224 snapshot
authorChet Ramey <chet.ramey@case.edu>
Tue, 6 Mar 2012 02:17:40 +0000 (21:17 -0500)
committerChet Ramey <chet.ramey@case.edu>
Tue, 6 Mar 2012 02:17:40 +0000 (21:17 -0500)
18 files changed:
CWRU/CWRU.chlog
CWRU/CWRU.chlog~
CWRU/misc/endian.c [new file with mode: 0644]
CWRU/misc/endian2.c [new file with mode: 0644]
CWRU/misc/endian3.c [new file with mode: 0644]
MANIFEST
doc/bash.1
doc/builtins.1
error.c
error.c~ [new file with mode: 0644]
execute_cmd.c
lib/sh/shquote.c
lib/sh/strtrans.c
lib/sh/unicode.c
lib/sh/unicode.c~ [new file with mode: 0644]
locale.c
po/gl.po
variables.c

index 8ae4f8e9c608c12a832d151c46ea2bb04be1bc0f..ff5b2f9f2b01c2337153e1ee60306b29d1178777 100644 (file)
@@ -13196,6 +13196,16 @@ trap.c
        - use BLOCK_SIGNAL/UNBLOCK_SIGNAL instead of code dependent on
          HAVE_POSIX_SIGNALS and BSD signals
 
+                                  1/24
+                                  ----
+
+print_cmd.c
+       - print_redirection_list: change the conditions under which
+         r_duplicating_output_word is mapped to r_err_and_out to more or
+         less match those used in redir.c.  Fixes bug pointed out by
+         Dan Douglas <ormaaj@gmail.com>
+
+
                                   1/29
                                   ----
 lib/readline/signals.c
@@ -13386,12 +13396,58 @@ lib/sh/unicode.c
        - u32reset: new function, resets local static state to uninitialized
          (locale information, currently)
 
-lib/sh/strtrans.c
-       - ansicstr: allocate a new string 6 times longer than the original
-         if the \U escape sequence appears, to accommodate UTF-8 chars
-         of maximum theoretical length
-
 locale.c
        - call u32reset whenever LC_CTYPE/LC_ALL/LANG is changed to reset the
          cached locale information used by u32cconv.  From a report from
          John Kearney <dethrophes@web.de>
+
+                                  2/21
+                                  ----
+doc/{bash,builtins}.1
+       - minor changes from Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+lib/sh/unicode.c
+       - u32cconv: only assume you can directly call wctomb on the passed
+         value if __STDC_ISO_10646__ is defined and the value is <=
+         0x7fffffff
+       - stub_charset: return locale as default instead of "ASCII", let
+         rest of code decide what to do with it
+
+lib/readline/parens.c
+       - _rl_enable_paren_matching: make paren matching work in vi insert
+         mode.  Bug report from <derflob@derflob.de>
+
+                                  2/22
+                                  ----
+lib/sh/shquote.c
+       - sh_backslash_quote: quote tilde in places where it would be
+         expanded.  From a report from John Kearney <dethrophes@web.de>
+
+                                  2/23
+                                  ----
+execute_cmd.c
+       - execute_pipeline: wrap the discard_unwind_frame call in #ifdef
+         JOB_CONTROL, since the frame is only created if JOB_CONTROL is
+         defined.  Bug and fix from Doug Kehn <rdkehn@yahoo.com>
+
+                                  2/25
+                                  ----
+error.c
+       - report_error: make sure last_command_exit_value is non-zero before
+         we call exit_shell, since the exit trap may reference it.  Call
+         exit_shell with last_command_exit_value to allow exit statuses
+         other than 1
+
+unicode.c
+       - stub_charset: use local static buffer to hold charset, don't change
+         value returned by get_locale_var.  Based on idea and code from
+         John Kearney <dethrophes@web.de>
+       - u32toutf16: function to convert unsigned 32-bit value (unicode) to
+         UTF-16.  From John Kearney <dethrophes@web.de>
+       - u32cconv: call u32toutf16 if __STDC_ISO_10646__ defined and wchar_t
+         is two bytes, send result to wcstombs, return if not encoding error.
+         From John Kearney <dethrophes@web.de>
+       - u32cconv: return UTF-8 conversion if iconv conversion to local
+         charset is unsupported
+
+         
index 76b126833f2187aeda2893ae454bb1f2f7185a77..8e6bd15426e060eb806dfcd4a4132c0f764b66ad 100644 (file)
@@ -13196,6 +13196,16 @@ trap.c
        - use BLOCK_SIGNAL/UNBLOCK_SIGNAL instead of code dependent on
          HAVE_POSIX_SIGNALS and BSD signals
 
+                                  1/24
+                                  ----
+
+print_cmd.c
+       - print_redirection_list: change the conditions under which
+         r_duplicating_output_word is mapped to r_err_and_out to more or
+         less match those used in redir.c.  Fixes bug pointed out by
+         Dan Douglas <ormaaj@gmail.com>
+
+
                                   1/29
                                   ----
 lib/readline/signals.c
@@ -13386,11 +13396,56 @@ lib/sh/unicode.c
        - u32reset: new function, resets local static state to uninitialized
          (locale information, currently)
 
-lib/sh/strtrans.c
-       - ansicstr: allocate a new string 6 times longer than the original
-         if the \U escape sequence appears, to accommodate UTF-8 chars
-         of maximum theoretical length
-
 locale.c
        - call u32reset whenever LC_CTYPE/LC_ALL/LANG is changed to reset the
-         cached locale information used by u32cconv
+         cached locale information used by u32cconv.  From a report from
+         John Kearney <dethrophes@web.de>
+
+                                  2/21
+                                  ----
+doc/{bash,builtins}.1
+       - minor changes from Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+lib/sh/unicode.c
+       - u32cconv: only assume you can directly call wctomb on the passed
+         value if __STDC_ISO_10646__ is defined and the value is <=
+         0x7fffffff
+       - stub_charset: return locale as default instead of "ASCII", let
+         rest of code decide what to do with it
+
+lib/readline/parens.c
+       - _rl_enable_paren_matching: make paren matching work in vi insert
+         mode.  Bug report from <derflob@derflob.de>
+
+                                  2/22
+                                  ----
+lib/sh/shquote.c
+       - sh_backslash_quote: quote tilde in places where it would be
+         expanded.  From a report from John Kearney <dethrophes@web.de>
+
+                                  2/23
+                                  ----
+execute_cmd.c
+       - execute_pipeline: wrap the discard_unwind_frame call in #ifdef
+         JOB_CONTROL, since the frame is only created if JOB_CONTROL is
+         defined.  Bug and fix from Doug Kehn <rdkehn@yahoo.com>
+
+                                  2/25
+                                  ----
+error.c
+       - report_error: make sure last_command_exit_value is non-zero before
+         we call exit_shell, since the exit trap may reference it.  Call
+         exit_shell with last_command_exit_value to allow exit statuses
+         other than 1
+
+unicode.c
+       - stub_charset: use local static buffer to hold charset, don't change
+         value returned by get_locale_var.  Based on idea and code from
+         John Kearney <dethrophes@web.de>
+       - u32toutf16: function to convert unsigned 32-bit value (unicode) to
+         UTF-16.  From John Kearney <dethrophes@web.de>
+       - u32cconv: call u32toutf16 if __STDC_ISO_10646__ defined and wchar_t
+         is two bytes, send result to wcstombs, return if not encoding error.
+         From John Kearney <dethrophes@web.de>
+
+         
diff --git a/CWRU/misc/endian.c b/CWRU/misc/endian.c
new file mode 100644 (file)
index 0000000..3dd30b3
--- /dev/null
@@ -0,0 +1,21 @@
+#include <stdio.h>
+
+main()
+{
+
+union {
+       long int l;
+       char c[sizeof(long int)];
+} u;
+       int x0, x1, x2, x3;
+
+       u.l = 1;
+       x0 = u.c[0];
+       x3 = u.c[sizeof (long int) - 1];
+       printf ("x0 = %d x3 = %d (%s)\n", x0, x3, x3 == 1 ? "bigendian" : "littleendian");
+       x0 = u.l >> 24;
+       x1 = u.l >> 16;
+       x2 = u.l >> 8;
+       x3 = u.l & 0xff;
+       printf ("x0:x3: %d %d %d %d\n", x0, x1, x2, x3);
+}
diff --git a/CWRU/misc/endian2.c b/CWRU/misc/endian2.c
new file mode 100644 (file)
index 0000000..b84754b
--- /dev/null
@@ -0,0 +1,13 @@
+#include <stdio.h>
+int
+main()
+{
+       int i = 0x12345678;
+       char *x;
+
+       x = (char *)&i;
+       printf ("0x%x\n", *x);
+       printf ((*x == 0x78) ? "little endian\n" : "big endian\n");
+       return 0;
+}
diff --git a/CWRU/misc/endian3.c b/CWRU/misc/endian3.c
new file mode 100644 (file)
index 0000000..86b478b
--- /dev/null
@@ -0,0 +1,21 @@
+#include <stdio.h>
+
+main()
+{
+
+       union {
+               int l;
+               char c[sizeof(int)];
+       } u;
+       int x0, x1, x2, x3;
+
+       u.l = 0x012345678;
+       x0 = u.c[0];
+       x3 = u.c[sizeof (int) - 1];
+       printf ("x0 = 0x%x x3 = 0x%x (%s)\n", x0, x3, x3 == 0x78 ? "bigendian" : "littleendian");
+       x0 = (u.l >> 24) & 0xff;
+       x1 = (u.l >> 16) & 0xff;
+       x2 = (u.l >> 8)  & 0xff;
+       x3 = u.l & 0xff;
+       printf ("big endian x0:x3: %x %x %x %x\n", x0, x1, x2, x3);
+}
index 376966d629ffa1a8d05e767969dba6a1cba08b60..c4226943381c8d3cb9e7f1d69766a25e0c4229d3 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -505,10 +505,14 @@ po/fr.gmo         f
 po/fr.po               f
 po/ga.gmo              f
 po/ga.po               f
+po/gl.gmo              f
+po/gl.po               f
 po/hu.gmo              f
 po/hu.po               f
 po/id.gmo              f
 po/id.po               f
+po/it.gmo              f
+po/it.po               f
 po/ja.gmo              f
 po/ja.po               f
 po/lt.gmo              f
index 7df378b40ff6db7b4b7229248d423263543e9d5a..77adfaf87a79389e54d1a1dc5b506b4f495b9ec0 100644 (file)
@@ -6377,7 +6377,7 @@ is similar to the history expansion in
 This section describes what syntax features are available.  This
 feature is enabled by default for interactive shells, and can be
 disabled using the
-.B \+H
+.B +H
 option to the
 .B set
 builtin command (see
index bf8bfec254a30f5e71b26ea897323fad3cfea551..829a49c2751652663ff37fdf8693a6285f6bfe9f 100644 (file)
@@ -1,6 +1,13 @@
 .\" This is a hack to force bash builtins into the whatis database
 .\" and to get the list of builtins to come up with the man command.
-.TH BASH_BUILTINS 1 "2004 Apr 20" "GNU Bash-4.0"
+.\"
+.\" 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
+..
+.TH BASH_BUILTINS 1 "2004 Apr 20" "GNU Bash-4.2"
 .SH NAME
 bash, :, ., [, alias, bg, bind, break, builtin, caller,
 cd, command, compgen, complete,
diff --git a/error.c b/error.c
index 72da9f54040ea4f5209c25e7fee2e40fdc221bbe..1eac01c4a173820aadcf3a9b0335cf89febde11e 100644 (file)
--- a/error.c
+++ b/error.c
@@ -200,7 +200,11 @@ report_error (format, va_alist)
 
   va_end (args);
   if (exit_immediately_on_error)
-    exit_shell (1);
+    {
+      if (last_command_exit_value == 0)
+       last_command_exit_value = 1;
+      exit_shell (last_command_exit_value);
+    }
 }
 
 void
diff --git a/error.c~ b/error.c~
new file mode 100644 (file)
index 0000000..72da9f5
--- /dev/null
+++ b/error.c~
@@ -0,0 +1,455 @@
+/* error.c -- Functions for handling errors. */
+
+/* Copyright (C) 1993-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"
+
+#include "bashtypes.h"
+#include <fcntl.h>
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#if defined (PREFER_STDARG)
+#  include <stdarg.h>
+#else
+#  include <varargs.h>
+#endif
+
+#include <stdio.h>
+
+#include <errno.h>
+#if !defined (errno)
+extern int errno;
+#endif /* !errno */
+
+#include "bashansi.h"
+#include "bashintl.h"
+
+#include "shell.h"
+#include "flags.h"
+#include "input.h"
+
+#if defined (HISTORY)
+#  include "bashhist.h"
+#endif
+
+extern int executing_line_number __P((void));
+
+extern int last_command_exit_value;
+extern char *shell_name;
+#if defined (JOB_CONTROL)
+extern pid_t shell_pgrp;
+extern int give_terminal_to __P((pid_t, int));
+#endif /* JOB_CONTROL */
+
+#if defined (ARRAY_VARS)
+extern const char * const bash_badsub_errmsg;
+#endif
+
+static void error_prolog __P((int));
+
+/* The current maintainer of the shell.  You change this in the
+   Makefile. */
+#if !defined (MAINTAINER)
+#define MAINTAINER "bash-maintainers@gnu.org"
+#endif
+
+const char * const the_current_maintainer = MAINTAINER;
+
+int gnu_error_format = 0;
+
+static void
+error_prolog (print_lineno)
+     int print_lineno;
+{
+  char *ename;
+  int line;
+
+  ename = get_name_for_error ();
+  line = (print_lineno && interactive_shell == 0) ? executing_line_number () : -1;
+
+  if (line > 0)
+    fprintf (stderr, "%s:%s%d: ", ename, gnu_error_format ? "" : _(" line "), line);
+  else
+    fprintf (stderr, "%s: ", ename);
+}
+
+/* Return the name of the shell or the shell script for error reporting. */
+char *
+get_name_for_error ()
+{
+  char *name;
+#if defined (ARRAY_VARS)
+  SHELL_VAR *bash_source_v;
+  ARRAY *bash_source_a;
+#endif
+
+  name = (char *)NULL;
+  if (interactive_shell == 0)
+    {
+#if defined (ARRAY_VARS)
+      bash_source_v = find_variable ("BASH_SOURCE");
+      if (bash_source_v && array_p (bash_source_v) &&
+         (bash_source_a = array_cell (bash_source_v)))
+       name = array_reference (bash_source_a, 0);
+      if (name == 0 || *name == '\0')  /* XXX - was just name == 0 */
+#endif
+       name = dollar_vars[0];
+    }
+  if (name == 0 && shell_name && *shell_name)
+    name = base_pathname (shell_name);
+  if (name == 0)
+#if defined (PROGRAM)
+    name = PROGRAM;
+#else
+    name = "bash";
+#endif
+
+  return (name);
+}
+
+/* Report an error having to do with FILENAME.  This does not use
+   sys_error so the filename is not interpreted as a printf-style
+   format string. */
+void
+file_error (filename)
+     const char *filename;
+{
+  report_error ("%s: %s", filename, strerror (errno));
+}
+
+void
+#if defined (PREFER_STDARG)
+programming_error (const char *format, ...)
+#else
+programming_error (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+  va_list args;
+  char *h;
+
+#if defined (JOB_CONTROL)
+  give_terminal_to (shell_pgrp, 0);
+#endif /* JOB_CONTROL */
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  fprintf (stderr, "\n");
+  va_end (args);
+
+#if defined (HISTORY)
+  if (remember_on_history)
+    {
+      h = last_history_line ();
+      fprintf (stderr, _("last command: %s\n"), h ? h : "(null)");
+    }
+#endif
+
+#if 0
+  fprintf (stderr, "Report this to %s\n", the_current_maintainer);
+#endif
+
+  fprintf (stderr, _("Aborting..."));
+  fflush (stderr);
+
+  abort ();
+}
+
+/* Print an error message and, if `set -e' has been executed, exit the
+   shell.  Used in this file by file_error and programming_error.  Used
+   outside this file mostly to report substitution and expansion errors,
+   and for bad invocation options. */
+void
+#if defined (PREFER_STDARG)
+report_error (const char *format, ...)
+#else
+report_error (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+  va_list args;
+
+  error_prolog (1);
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  fprintf (stderr, "\n");
+
+  va_end (args);
+  if (exit_immediately_on_error)
+    exit_shell (1);
+}
+
+void
+#if defined (PREFER_STDARG)
+fatal_error (const char *format, ...)
+#else
+fatal_error (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+  va_list args;
+
+  error_prolog (0);
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  fprintf (stderr, "\n");
+
+  va_end (args);
+  sh_exit (2);
+}
+
+void
+#if defined (PREFER_STDARG)
+internal_error (const char *format, ...)
+#else
+internal_error (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+  va_list args;
+
+  error_prolog (1);
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  fprintf (stderr, "\n");
+
+  va_end (args);
+}
+
+void
+#if defined (PREFER_STDARG)
+internal_warning (const char *format, ...)
+#else
+internal_warning (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+  va_list args;
+
+  error_prolog (1);
+  fprintf (stderr, _("warning: "));
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  fprintf (stderr, "\n");
+
+  va_end (args);
+}
+
+void
+#if defined (PREFER_STDARG)
+sys_error (const char *format, ...)
+#else
+sys_error (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+  int e;
+  va_list args;
+
+  e = errno;
+  error_prolog (0);
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  fprintf (stderr, ": %s\n", strerror (e));
+
+  va_end (args);
+}
+
+/* An error from the parser takes the general form
+
+       shell_name: input file name: line number: message
+
+   The input file name and line number are omitted if the shell is
+   currently interactive.  If the shell is not currently interactive,
+   the input file name is inserted only if it is different from the
+   shell name. */
+void
+#if defined (PREFER_STDARG)
+parser_error (int lineno, const char *format, ...)
+#else
+parser_error (lineno, format, va_alist)
+     int lineno;
+     const char *format;
+     va_dcl
+#endif
+{
+  va_list args;
+  char *ename, *iname;
+
+  ename = get_name_for_error ();
+  iname = yy_input_name ();
+
+  if (interactive)
+    fprintf (stderr, "%s: ", ename);
+  else if (interactive_shell)
+    fprintf (stderr, "%s: %s:%s%d: ", ename, iname, gnu_error_format ? "" : _(" line "), lineno);
+  else if (STREQ (ename, iname))
+    fprintf (stderr, "%s:%s%d: ", ename, gnu_error_format ? "" : _(" line "), lineno);
+  else
+    fprintf (stderr, "%s: %s:%s%d: ", ename, iname, gnu_error_format ? "" : _(" line "), lineno);
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  fprintf (stderr, "\n");
+
+  va_end (args);
+
+  if (exit_immediately_on_error)
+    exit_shell (last_command_exit_value = 2);
+}
+
+#ifdef DEBUG
+void
+#if defined (PREFER_STDARG)
+itrace (const char *format, ...)
+#else
+itrace (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+  va_list args;
+
+  fprintf(stderr, "TRACE: pid %ld: ", (long)getpid());
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  fprintf (stderr, "\n");
+
+  va_end (args);
+
+  fflush(stderr);
+}
+
+/* A trace function for silent debugging -- doesn't require a control
+   terminal. */
+void
+#if defined (PREFER_STDARG)
+trace (const char *format, ...)
+#else
+trace (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+  va_list args;
+  static FILE *tracefp = (FILE *)NULL;
+
+  if (tracefp == NULL)
+    tracefp = fopen("/tmp/bash-trace.log", "a+");
+
+  if (tracefp == NULL)
+    tracefp = stderr;
+  else
+    fcntl (fileno (tracefp), F_SETFD, 1);     /* close-on-exec */
+
+  fprintf(tracefp, "TRACE: pid %ld: ", (long)getpid());
+
+  SH_VA_START (args, format);
+
+  vfprintf (tracefp, format, args);
+  fprintf (tracefp, "\n");
+
+  va_end (args);
+
+  fflush(tracefp);
+}
+
+#endif /* DEBUG */
+
+/* **************************************************************** */
+/*                                                                 */
+/*                 Common error reporting                          */
+/*                                                                 */
+/* **************************************************************** */
+
+
+static const char * const cmd_error_table[] = {
+       N_("unknown command error"),    /* CMDERR_DEFAULT */
+       N_("bad command type"),         /* CMDERR_BADTYPE */
+       N_("bad connector"),            /* CMDERR_BADCONN */
+       N_("bad jump"),                 /* CMDERR_BADJUMP */
+       0
+};
+
+void
+command_error (func, code, e, flags)
+     const char *func;
+     int code, e, flags;       /* flags currently unused */
+{
+  if (code > CMDERR_LAST)
+    code = CMDERR_DEFAULT;
+
+  programming_error ("%s: %s: %d", func, _(cmd_error_table[code]), e);
+}
+
+char *
+command_errstr (code)
+     int code;
+{
+  if (code > CMDERR_LAST)
+    code = CMDERR_DEFAULT;
+
+  return (_(cmd_error_table[code]));
+}
+
+#ifdef ARRAY_VARS
+void
+err_badarraysub (s)
+     const char *s;
+{
+  report_error ("%s: %s", s, _(bash_badsub_errmsg));
+}
+#endif
+
+void
+err_unboundvar (s)
+     const char *s;
+{
+  report_error (_("%s: unbound variable"), s);
+}
+
+void
+err_readonly (s)
+     const char *s;
+{
+  report_error (_("%s: readonly variable"), s);
+}
index 19a685da0faeaaaa864d686d4ee46c8e9320fbf8..5def9b0f43b6039e605a2ae0c5861dc44ff9fb49 100644 (file)
@@ -2370,7 +2370,9 @@ execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close)
       unfreeze_jobs_list ();
     }
 
+#if defined (JOB_CONTROL)
   discard_unwind_frame ("lastpipe-exec");
+#endif
 
   return (exec_result);
 }
index 602ce9b98792636bc48a843f29da22a1ba7a10ad..9f485115e707b9381853aaa41375617ddff0177c 100644 (file)
@@ -226,6 +226,10 @@ sh_backslash_quote (string, table)
        *r++ = '\\';
       else if (c == '#' && s == string)                        /* comment char */
        *r++ = '\\';
+      else if (c == '~' && (s == string || s[-1] == ':' || s[-1] == '='))
+        /* Tildes are special at the start of a word or after a `:' or `='
+          (technically unquoted, but it doesn't make a difference in practice) */
+       *r++ = '\\';
       *r++ = c;
     }
 
index 8691c054f0202b43f7a465bf7e7ca921db4a04aa..6b1f13e2afc791b2a4207cae6e2f967e14a0f108 100644 (file)
@@ -60,10 +60,7 @@ ansicstr (string, len, flags, sawc, rlen)
     return ((char *)NULL);
 
 #if defined (HANDLE_MULTIBYTE)
-  if (strstr (string, "\\U") != 0)
-    ret = (char *)xmalloc (6*len + 1);
-  else
-    ret = (char *)xmalloc (4*len + 1);
+  ret = (char *)xmalloc (4*len + 1);
 #else
   ret = (char *)xmalloc (2*len + 1);   /* 2*len for possible CTLESC */
 #endif
index 5bb4702c9e63c03a1845df12d1d452312c83753e..df2da0150003cc6a2b2291f6d3656ba1f68680a8 100644 (file)
@@ -1,6 +1,6 @@
 /* unicode.c - functions to convert unicode characters */
 
-/* Copyright (C) 2010 Free Software Foundation, Inc.
+/* Copyright (C) 2010-2012 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -61,6 +61,8 @@ static iconv_t localconv;
 #endif
 
 #ifndef HAVE_LOCALE_CHARSET
+static char charsetbuf[40];
+
 static char *
 stub_charset ()
 {
@@ -68,19 +70,21 @@ stub_charset ()
 
   locale = get_locale_var ("LC_CTYPE");
   if (locale == 0 || *locale == 0)
-    return "ASCII";
+    {
+      strcpy (charsetbuf, "ASCII");
+      return charsetbuf;
+    }
   s = strrchr (locale, '.');
   if (s)
     {
-      t = strchr (s, '@');
+      strcpy (charsetbuf, s+1);
+      t = strchr (charsetbuf, '@');
       if (t)
        *t = 0;
-      return ++s;
+      return charsetbuf;
     }
-  else if (STREQ (locale, "UTF-8"))
-    return "UTF-8";
-  else
-    return "ASCII";
+  strcpy (charsetbuf, locale);
+  return charsetbuf;
 }
 #endif
 
@@ -93,14 +97,12 @@ u32reset ()
 
 /* u32toascii ? */
 int
-u32tochar (wc, s)
-     wchar_t wc;
+u32tochar (x, s)
+     unsigned long x;
      char *s;
 {
-  unsigned long x;
   int l;
 
-  x = wc;
   l = (x <= UCHAR_MAX) ? 1 : ((x <= USHORT_MAX) ? 2 : 4);
 
   if (x <= UCHAR_MAX)
@@ -165,7 +167,7 @@ u32toutf8 (wc, s)
       s[4] = (wc & 0x3f) | 0x80;
       l = 5;
     }
-  else
+  else if (wc < 0x080000000)
     {
       s[0] = (wc >> 30) | 0xf8;
       s[1] = ((wc >> 24) & 0x3f) | 0x80;
@@ -175,11 +177,39 @@ u32toutf8 (wc, s)
       s[5] = (wc & 0x3f) | 0x80;
       l = 6;
     }
+  else
+    l = 0;
 
   s[l] = '\0';
   return l;
 }
 
+/* Convert a 32-bit unsigned int (unicode) to a UTF-16 string.  Rarely used,
+   only if sizeof(wchar_t) == 2. */
+int
+u32toutf16 (c, s)
+     u_bits32_t c;
+     unsigned short *s;
+{
+  int l;
+
+  l = 0;
+  if (c < 0x0d800)
+    {
+      s[0] = (unsigned short) (c & 0xFFFF);
+      l = 1;
+    }
+  else if (c >= 0x0e000 && c <= 0x010ffff)
+    {
+      c -= 0x010000;
+      s[0] = (unsigned short)((c >> 10) + 0xd800);
+      s[1] = (unsigned short)((c & 0x3ff) + 0xdc00);
+      l = 2;
+    }
+  s[l] = 0;
+  return l;
+}
+
 /* convert a single unicode-32 character into a multibyte string and put the
    result in S, which must be large enough (at least MB_LEN_MAX bytes) */
 int
@@ -188,6 +218,7 @@ u32cconv (c, s)
      char *s;
 {
   wchar_t wc;
+  wchar_t ws[3];
   int n;
 #if HAVE_ICONV
   const char *charset;
@@ -197,14 +228,16 @@ u32cconv (c, s)
   size_t sn;
 #endif
 
-  wc = c;
-
 #if __STDC_ISO_10646__
-  if (sizeof (wchar_t) == 4)
-    {
-      n = wctomb (s, wc);
-      return n;
-    }
+  wc = c;
+  if (sizeof (wchar_t) == 4 && c <= 0x7fffffff)
+    n = wctomb (s, wc);
+  else if (sizeof (wchar_t) == 2 && c <= 0x10ffff && u32toutf16 (c, ws))
+    n = wcstombs (s, ws, MB_LEN_MAX);
+  else
+    n = -1;
+  if (n != -1)
+    return n;
 #endif
 
 #if HAVE_NL_LANGINFO
@@ -236,19 +269,9 @@ u32cconv (c, s)
       u32init = 1;
     }
 
-  if (utf8locale)
-    {
-      n = u32toutf8 (c, s);
-      return n;
-    }
-
-  if (localconv == (iconv_t)-1)
-    {
-      n = u32tochar (wc, s);
-      return n;
-    }
-
   n = u32toutf8 (c, s);
+  if (utf8locale || localconv == (iconv_t)-1)
+    return n;
 
   optr = obuf;
   obytesleft = sizeof (obuf);
@@ -268,8 +291,12 @@ u32cconv (c, s)
   return (optr - obuf);
 #endif
 
-  n = u32tochar (wc, s);       /* fallback */
+  n = u32tochar (c, s);        /* fallback */
   return n;
 }
-
+#else
+void
+u32reset ()
+{
+}
 #endif /* HANDLE_MULTIBYTE */
diff --git a/lib/sh/unicode.c~ b/lib/sh/unicode.c~
new file mode 100644 (file)
index 0000000..ba24dd4
--- /dev/null
@@ -0,0 +1,319 @@
+/* unicode.c - functions to convert unicode characters */
+
+/* Copyright (C) 2010-2012 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 (HANDLE_MULTIBYTE)
+
+#include <stdc.h>
+#include <wchar.h>
+#include <bashansi.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <limits.h>
+
+#if HAVE_ICONV
+#  include <iconv.h>
+#endif
+
+#include <xmalloc.h>
+
+#ifndef USHORT_MAX
+#  ifdef USHRT_MAX
+#    define USHORT_MAX USHRT_MAX
+#  else
+#    define USHORT_MAX ((unsigned short) ~(unsigned short)0)
+#  endif
+#endif
+
+#if !defined (STREQ)
+#  define STREQ(a, b) ((a)[0] == (b)[0] && strcmp ((a), (b)) == 0)
+#endif /* !STREQ */
+
+#if defined (HAVE_LOCALE_CHARSET)
+extern const char *locale_charset __P((void));
+#else
+extern char *get_locale_var __P((char *));
+#endif
+
+static int u32init = 0;
+static int utf8locale = 0;
+#if defined (HAVE_ICONV)
+static iconv_t localconv;
+#endif
+
+#ifndef HAVE_LOCALE_CHARSET
+static char charsetbuf[40];
+
+static char *
+stub_charset ()
+{
+  char *locale, *s, *t;
+
+  locale = get_locale_var ("LC_CTYPE");
+  if (locale == 0 || *locale == 0)
+    {
+      strcpy (charsetbuf, "ASCII");
+      return charsetbuf;
+    }
+  s = strrchr (locale, '.');
+  if (s)
+    {
+      strcpy (charsetbuf, s+1);
+      t = strchr (charsetbuf, '@');
+      if (t)
+       *t = 0;
+      return charsetbuf;
+    }
+  strcpy (charsetbuf, locale);
+  return charsetbuf;
+}
+#endif
+
+void
+u32reset ()
+{
+  u32init = 0;
+  utf8locale = 0;
+}
+
+/* u32toascii ? */
+int
+u32tochar (x, s)
+     unsigned long x;
+     char *s;
+{
+  int l;
+
+  l = (x <= UCHAR_MAX) ? 1 : ((x <= USHORT_MAX) ? 2 : 4);
+
+  if (x <= UCHAR_MAX)
+    s[0] = x & 0xFF;
+  else if (x <= USHORT_MAX)    /* assume unsigned short = 16 bits */
+    {
+      s[0] = (x >> 8) & 0xFF;
+      s[1] = x & 0xFF;
+    }
+  else
+    {
+      s[0] = (x >> 24) & 0xFF;
+      s[1] = (x >> 16) & 0xFF;
+      s[2] = (x >> 8) & 0xFF;
+      s[3] = x & 0xFF;
+    }
+  s[l] = '\0';
+  return l;  
+}
+
+/* Convert unsigned 32-bit int to utf-8 character string */
+int
+u32toutf8 (wc, s)
+     u_bits32_t wc;
+     char *s;
+{
+  int l;
+
+  if (wc < 0x0080)
+    {
+      s[0] = (char)wc;
+      l = 1;
+    }
+  else if (wc < 0x0800)
+    {
+      s[0] = (wc >> 6) | 0xc0;
+      s[1] = (wc & 0x3f) | 0x80;
+      l = 2;
+    }
+  else if (wc < 0x10000)
+    {
+      s[0] = (wc >> 12) | 0xe0;
+      s[1] = ((wc >> 6) & 0x3f) | 0x80;
+      s[2] = (wc & 0x3f) | 0x80;
+      l = 3;
+    }
+  else if (wc < 0x200000)
+    {
+      s[0] = (wc >> 18) | 0xf0;
+      s[1] = ((wc >> 12) & 0x3f) | 0x80;
+      s[2] = ((wc >>  6) & 0x3f) | 0x80;
+      s[3] = (wc & 0x3f) | 0x80;
+      l = 4;
+    }
+  /* Strictly speaking, UTF-8 doesn't have characters longer than 4 bytes */
+  else if (wc < 0x04000000)
+    {
+      s[0] = (wc >> 24) | 0xf8;
+      s[1] = ((wc >> 18) & 0x3f) | 0x80;
+      s[2] = ((wc >> 12) & 0x3f) | 0x80;
+      s[3] = ((wc >>  6) & 0x3f) | 0x80;
+      s[4] = (wc & 0x3f) | 0x80;
+      l = 5;
+    }
+  else if (wc < 0x080000000)
+    {
+      s[0] = (wc >> 30) | 0xf8;
+      s[1] = ((wc >> 24) & 0x3f) | 0x80;
+      s[2] = ((wc >> 18) & 0x3f) | 0x80;
+      s[3] = ((wc >> 12) & 0x3f) | 0x80;
+      s[4] = ((wc >>  6) & 0x3f) | 0x80;
+      s[5] = (wc & 0x3f) | 0x80;
+      l = 6;
+    }
+  else
+    l = 0;
+
+  s[l] = '\0';
+  return l;
+}
+
+/* Convert a 32-bit unsigned int (unicode) to a UTF-16 string.  Rarely used,
+   only if sizeof(wchar_t) == 2. */
+int
+u32toutf16 (c, s)
+     u_bits32_t c;
+     unsigned short *s;
+{
+  int l;
+
+  l = 0;
+  if (c < 0x0d800)
+    {
+      s[0] = (unsigned short) (c & 0xFFFF);
+      l = 1;
+    }
+  else if (c >= 0x0e000 && c <= 0x010ffff)
+    {
+      c -= 0x010000;
+      s[0] = (unsigned short)((c >> 10) + 0xd800);
+      s[1] = (unsigned short)((c & 0x3ff) + 0xdc00);
+      l = 2;
+    }
+  s[l] = 0;
+  return l;
+}
+
+/* convert a single unicode-32 character into a multibyte string and put the
+   result in S, which must be large enough (at least MB_LEN_MAX bytes) */
+int
+u32cconv (c, s)
+     unsigned long c;
+     char *s;
+{
+  wchar_t wc;
+  wchar_t ws[3];
+  int n;
+#if HAVE_ICONV
+  const char *charset;
+  char obuf[25], *optr;
+  size_t obytesleft;
+  const char *iptr;
+  size_t sn;
+#endif
+
+#if __STDC_ISO_10646__
+  wc = c;
+  if (sizeof (wchar_t) == 4 && c <= 0x7fffffff)
+    {
+      n = wctomb (s, wc);
+      if (n != -1)
+       return n;
+    }
+  else if (sizeof (wchar_t) == 2)
+    {
+      if (u32toutf16 (c, ws))
+       {
+         n = wcstombs (s, ws, MB_LEN_MAX);
+         if (n != -1)
+           return n;
+       }
+    }
+#endif
+
+#if HAVE_NL_LANGINFO
+  codeset = nl_langinfo (CODESET);
+  if (STREQ (codeset, "UTF-8"))
+    {
+      n = u32toutf8 (c, s);
+      return n;
+    }
+#endif
+
+#if HAVE_ICONV
+  /* this is mostly from coreutils-8.5/lib/unicodeio.c */
+  if (u32init == 0)
+    {
+#  if HAVE_LOCALE_CHARSET
+      charset = locale_charset ();     /* XXX - fix later */
+#  else
+      charset = stub_charset ();
+#  endif
+      if (STREQ (charset, "UTF-8"))
+       utf8locale = 1;
+      else
+       {
+         localconv = iconv_open (charset, "UTF-8");
+         if (localconv == (iconv_t)-1)
+           localconv = iconv_open (charset, "ASCII");
+       }
+      u32init = 1;
+    }
+
+  if (utf8locale)
+    {
+      n = u32toutf8 (c, s);
+      return n;
+    }
+
+  if (localconv == (iconv_t)-1)
+    {
+      n = u32tochar (c, s);
+      return n;
+    }
+
+  n = u32toutf8 (c, s);
+
+  optr = obuf;
+  obytesleft = sizeof (obuf);
+  iptr = s;
+  sn = n;
+
+  iconv (localconv, NULL, NULL, NULL, NULL);
+
+  if (iconv (localconv, (ICONV_CONST char **)&iptr, &sn, &optr, &obytesleft) == (size_t)-1)
+    return n;  /* You get utf-8 if iconv fails */
+
+  *optr = '\0';
+
+  /* number of chars to be copied is optr - obuf if we want to do bounds
+     checking */
+  strcpy (s, obuf);
+  return (optr - obuf);
+#endif
+
+  n = u32tochar (c, s);        /* fallback */
+  return n;
+}
+#else
+void
+u32reset ()
+{
+}
+#endif /* HANDLE_MULTIBYTE */
index a452ac52743cac06d7ab57a73efc8a9d2b8fe7ff..d56f1791409ece2f779cb81f096b516f10f4aa32 100644 (file)
--- a/locale.c
+++ b/locale.c
@@ -1,6 +1,6 @@
 /* locale.c - Miscellaneous internationalization functions. */
 
-/* Copyright (C) 1996-2009 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2009,2012 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
index 9321c6747193f1d1b85bccc3e25f298023b7fbe9..46ade7c66da6473c6ebba86dd11b6d74a0341140 100644 (file)
--- a/po/gl.po
+++ b/po/gl.po
@@ -3,6 +3,8 @@
 # This file is distributed under the same license as the bash package.
 #
 # Leandro Regueiro <leandro.regueiro@gmail.com>, 2011.
+# Francisco Diéguez <frandieguez@ubuntu.com>, 2012.
+# Fran Dieguez <frandieguez@gnome.org>, 2012.
 #
 # Proxecto Trasno - Adaptación do software libre á lingua galega:  Se desexas
 # colaborar connosco, podes atopar máis información en <http://trasno.net>
@@ -12,7 +14,7 @@ msgstr ""
 "Project-Id-Version: bash 4.2\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2011-01-28 22:09-0500\n"
-"PO-Revision-Date: 2011-09-26 13:38+0100\n"
+"PO-Revision-Date: 2012-02-23 14:38+0100\n"
 "Last-Translator: Leandro Regueiro <leandro.regueiro@gmail.com>\n"
 "Language-Team: Galician <proxecto@trasno.net>\n"
 "Language: gl\n"
@@ -23,27 +25,27 @@ msgstr ""
 
 #: arrayfunc.c:50
 msgid "bad array subscript"
-msgstr ""
+msgstr "subíndice de matriz incorrecto"
 
 #: arrayfunc.c:313 builtins/declare.def:487
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
-msgstr ""
+msgstr "%s: non é posíbel converter a matriz de indizada a asociativa"
 
 #: arrayfunc.c:480
 #, c-format
 msgid "%s: invalid associative array key"
-msgstr ""
+msgstr "%s: índice de matriz asociativa non válido"
 
 #: arrayfunc.c:482
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
-msgstr ""
+msgstr "%s: non é posíbel asignar a un índice que non é numérico"
 
 #: arrayfunc.c:518
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
-msgstr ""
+msgstr "%s: %s: se debe usar un subíndice ao asignar a unha matriz asociativa"
 
 #: bashhist.c:387
 #, c-format
@@ -52,69 +54,69 @@ msgstr "%s: non foi posíbel crear: %s"
 
 #: bashline.c:3498
 msgid "bash_execute_unix_command: cannot find keymap for command"
-msgstr ""
+msgstr "bash_execute_unix_command: non foi posíbel atopar a combinación de teclas para a orde"
 
 #: bashline.c:3584
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
-msgstr ""
+msgstr "%s: o primeiro carácter que non é espazo en branco non é `\"'"
 
 #: bashline.c:3613
 #, c-format
 msgid "no closing `%c' in %s"
-msgstr ""
+msgstr "no hai un `%c' que peche en %s"
 
 #: bashline.c:3647
 #, c-format
 msgid "%s: missing colon separator"
-msgstr ""
+msgstr "%s: falta un `:' separador"
 
 #: builtins/alias.def:132
 #, c-format
 msgid "`%s': invalid alias name"
-msgstr ""
+msgstr "`%s': nome de alias non válido"
 
 #: builtins/bind.def:120 builtins/bind.def:123
 msgid "line editing not enabled"
-msgstr ""
+msgstr "no se activó a edición de liña"
 
 #: builtins/bind.def:206
 #, c-format
 msgid "`%s': invalid keymap name"
-msgstr ""
+msgstr "`%s': nome de combinación de teclas non válido"
 
 #: builtins/bind.def:245
 #, c-format
 msgid "%s: cannot read: %s"
-msgstr "%s: non foi posíbel ler: %s"
+msgstr "%s: non se pode leer: %s"
 
 #: builtins/bind.def:260
 #, c-format
 msgid "`%s': cannot unbind"
-msgstr ""
+msgstr "%s: non se pode borrar a asignación"
 
 #: builtins/bind.def:295 builtins/bind.def:325
 #, c-format
 msgid "`%s': unknown function name"
-msgstr ""
+msgstr "`%s': nome de función descoñecido"
 
 #: builtins/bind.def:303
 #, c-format
 msgid "%s is not bound to any keys.\n"
-msgstr ""
+msgstr "%s non está asignado a ningunha tecla.\n"
 
 #: builtins/bind.def:307
 #, c-format
 msgid "%s can be invoked via "
-msgstr ""
+msgstr "%s pódese invocar a través de "
 
 #: builtins/break.def:77 builtins/break.def:117
 msgid "loop count"
-msgstr ""
+msgstr "contía de ciclo"
 
 #: builtins/break.def:137
 msgid "only meaningful in a `for', `while', or `until' loop"
-msgstr ""
+msgstr "só ten significado nun ciclo `for', `while' ou `until'"
 
 #: builtins/caller.def:133
 msgid ""
@@ -122,14 +124,17 @@ msgid ""
 "    \n"
 "    Without EXPR, returns "
 msgstr ""
+"Devolve o contexto da chamada a subrutina actual.\n"
+"    \n"
+"    Sen EXPR, devovle "
 
 #: builtins/cd.def:235
 msgid "HOME not set"
-msgstr ""
+msgstr "HOME non está definido"
 
 #: builtins/cd.def:247
 msgid "OLDPWD not set"
-msgstr ""
+msgstr "OLDPWD non está definido"
 
 #: builtins/common.c:101
 #, c-format
@@ -137,14 +142,14 @@ msgid "line %d: "
 msgstr "liña %d: "
 
 #: builtins/common.c:139 error.c:261
-#, fuzzy, c-format
+#, c-format
 msgid "warning: "
-msgstr "Aviso"
+msgstr "aviso: "
 
 #: builtins/common.c:153
 #, c-format
 msgid "%s: usage: "
-msgstr "%s: modo de uso: "
+msgstr "%s: uso: "
 
 #: builtins/common.c:166 test.c:832
 msgid "too many arguments"
@@ -153,12 +158,12 @@ msgstr "demasiados argumentos"
 #: builtins/common.c:191 shell.c:500 shell.c:782
 #, c-format
 msgid "%s: option requires an argument"
-msgstr ""
+msgstr "%s: a opción require un argumento"
 
 #: builtins/common.c:198
 #, c-format
 msgid "%s: numeric argument required"
-msgstr ""
+msgstr "%s: requírese un argumento numérico"
 
 #: builtins/common.c:205
 #, c-format
@@ -173,7 +178,7 @@ msgstr "%s: opción non válida"
 #: builtins/common.c:221
 #, c-format
 msgid "%s: invalid option name"
-msgstr ""
+msgstr "%s: nome de opción non válido"
 
 #: builtins/common.c:228 general.c:231 general.c:236
 #, c-format
@@ -195,22 +200,22 @@ msgstr "número non válido"
 #: builtins/common.c:250
 #, c-format
 msgid "%s: invalid signal specification"
-msgstr ""
+msgstr "%s: especificación de sinal non válida"
 
 #: builtins/common.c:257
 #, c-format
 msgid "`%s': not a pid or valid job spec"
-msgstr ""
+msgstr "`%s': no é un pid ou unha especificación válida de traballo"
 
 #: builtins/common.c:264 error.c:454
 #, c-format
 msgid "%s: readonly variable"
-msgstr ""
+msgstr "%s: variábel de só lectura"
 
 #: builtins/common.c:272
 #, c-format
 msgid "%s: %s out of range"
-msgstr ""
+msgstr "%s: %s fóra de rango"
 
 #: builtins/common.c:272 builtins/common.c:274
 msgid "argument"
@@ -219,35 +224,35 @@ msgstr "argumento"
 #: builtins/common.c:274
 #, c-format
 msgid "%s out of range"
-msgstr ""
+msgstr "%s fóra de rango"
 
 #: builtins/common.c:282
 #, c-format
 msgid "%s: no such job"
-msgstr ""
+msgstr "%s: non existe ese traballo"
 
 #: builtins/common.c:290
 #, c-format
 msgid "%s: no job control"
-msgstr ""
+msgstr "%s: no hai control de traballos"
 
 #: builtins/common.c:292
 msgid "no job control"
-msgstr ""
+msgstr "no ha control de traballos"
 
 #: builtins/common.c:302
 #, c-format
 msgid "%s: restricted"
-msgstr ""
+msgstr "%s: restrinxido"
 
 #: builtins/common.c:304
 msgid "restricted"
-msgstr ""
+msgstr "restrinxido"
 
 #: builtins/common.c:312
 #, c-format
 msgid "%s: not a shell builtin"
-msgstr ""
+msgstr "%s: no é una orde interna do shell"
 
 #: builtins/common.c:321
 #, c-format
@@ -257,87 +262,87 @@ msgstr "erro de escritura: %s"
 #: builtins/common.c:329
 #, c-format
 msgid "error setting terminal attributes: %s"
-msgstr ""
+msgstr "erro ao estabelecer os atributos da terminal: %s"
 
 #: builtins/common.c:331
 #, c-format
 msgid "error getting terminal attributes: %s"
-msgstr ""
+msgstr "erro ao obtener os atributos da terminal: %s"
 
 #: builtins/common.c:563
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
-msgstr ""
+msgstr "%s: erro ao obtener o directorio actual: %s: %s\n"
 
 #: builtins/common.c:629 builtins/common.c:631
 #, c-format
 msgid "%s: ambiguous job spec"
-msgstr ""
+msgstr "%s: especificación de traballo ambigüa"
 
 #: builtins/complete.def:276
 #, c-format
 msgid "%s: invalid action name"
-msgstr ""
+msgstr "%s: nome de acción non válido"
 
 #: builtins/complete.def:449 builtins/complete.def:644
 #: builtins/complete.def:853
 #, c-format
 msgid "%s: no completion specification"
-msgstr ""
+msgstr "%s: non hai completado de especificación"
 
 #: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
-msgstr ""
+msgstr "aviso: é posíbel que a opción -F non funcione como se espera"
 
 #: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
-msgstr ""
+msgstr "aviso: é posíbel que a opción -C non funcione como se espera"
 
 #: builtins/complete.def:826
 msgid "not currently executing completion function"
-msgstr ""
+msgstr "non se está executando a función de completado"
 
 #: builtins/declare.def:124
 msgid "can only be used in a function"
-msgstr ""
+msgstr "só se pode usar dentro dunha función"
 
 #: builtins/declare.def:366
 msgid "cannot use `-f' to make functions"
-msgstr ""
+msgstr "non se pode use `-f' para facer funcións"
 
 #: builtins/declare.def:378 execute_cmd.c:5105
 #, c-format
 msgid "%s: readonly function"
-msgstr ""
+msgstr "%s: función de só lectura"
 
 #: builtins/declare.def:474
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
-msgstr ""
+msgstr "%s: non é posíbel destruír variábeis de matriz desta forma"
 
 #: builtins/declare.def:481
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
-msgstr ""
+msgstr "%s: non é posíbel converter unha matriz asociativa a indizada"
 
 #: builtins/enable.def:137 builtins/enable.def:145
 msgid "dynamic loading not available"
-msgstr ""
+msgstr "a carga dinámica non está dispoñíbel"
 
 #: builtins/enable.def:312
 #, c-format
 msgid "cannot open shared object %s: %s"
-msgstr ""
+msgstr "non é posíbel abrir o obxecto compartido %s: %s"
 
 #: builtins/enable.def:335
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
-msgstr ""
+msgstr "non é posíbel atopar %s no obxecto compartido %s: %s"
 
 #: builtins/enable.def:459
 #, c-format
 msgid "%s: not dynamically loaded"
-msgstr ""
+msgstr "%s: non foi cargado dinamicamente"
 
 #: builtins/enable.def:474
 #, c-format
@@ -351,9 +356,9 @@ msgid "%s: is a directory"
 msgstr "%s: é un directorio"
 
 #: builtins/evalfile.c:140
-#, fuzzy, c-format
+#, c-format
 msgid "%s: not a regular file"
-msgstr "Non é un ficheiro regular"
+msgstr "%s: non é un ficheiro regular"
 
 #: builtins/evalfile.c:148
 #, c-format
@@ -364,7 +369,7 @@ msgstr "%s: o ficheiro é demasiado grande"
 #: shell.c:1467
 #, c-format
 msgid "%s: cannot execute binary file"
-msgstr ""
+msgstr "%s: non é posíbel executar o ficheiro binario"
 
 #: builtins/exec.def:154 builtins/exec.def:156 builtins/exec.def:228
 #, c-format
@@ -374,80 +379,79 @@ msgstr "%s: non foi posíbel executar: %s"
 #: builtins/exit.def:65
 #, c-format
 msgid "logout\n"
-msgstr ""
+msgstr "logout\n"
 
 #: builtins/exit.def:88
 msgid "not login shell: use `exit'"
-msgstr ""
+msgstr "non é un shell de entrada: use `exit'"
 
 #: builtins/exit.def:120
 #, c-format
 msgid "There are stopped jobs.\n"
-msgstr ""
+msgstr "Hai traballos pendentes.\n"
 
 #: builtins/exit.def:122
 #, c-format
 msgid "There are running jobs.\n"
-msgstr ""
+msgstr "Hay traballos en execución.\n"
 
 #: builtins/fc.def:262
 msgid "no command found"
-msgstr ""
+msgstr "non foi posíbel atopar a orde"
 
 #: builtins/fc.def:312 builtins/fc.def:359
 msgid "history specification"
-msgstr ""
+msgstr "especificación de historial"
 
 #: builtins/fc.def:380
 #, c-format
 msgid "%s: cannot open temp file: %s"
-msgstr ""
+msgstr "%s: non é posíbel abrir o ficheiro temporal: %s"
 
 #: builtins/fg_bg.def:149 builtins/jobs.def:282
-#, fuzzy
 msgid "current"
-msgstr "Actual"
+msgstr "actual"
 
 #: builtins/fg_bg.def:158
 #, c-format
 msgid "job %d started without job control"
-msgstr ""
+msgstr "o traballo %d iniciou sen control de traballo"
 
 #: builtins/getopt.c:110
 #, c-format
 msgid "%s: illegal option -- %c\n"
-msgstr ""
+msgstr "%s: opción ilegal -- %c\n"
 
 #: builtins/getopt.c:111
 #, c-format
 msgid "%s: option requires an argument -- %c\n"
-msgstr ""
+msgstr "%s: a opción require un argumento -- %c\n"
 
 #: builtins/hash.def:92
 msgid "hashing disabled"
-msgstr ""
+msgstr "asociación desactivada"
 
 #: builtins/hash.def:138
 #, c-format
 msgid "%s: hash table empty\n"
-msgstr ""
+msgstr "%s: táboa de asociación baleira\n"
 
 #: builtins/hash.def:245
 #, c-format
 msgid "hits\tcommand\n"
-msgstr ""
+msgstr "coinc\torde\n"
 
 #: builtins/help.def:130
 #, c-format
 msgid "Shell commands matching keyword `"
 msgid_plural "Shell commands matching keywords `"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Orde do shell que coincide coa palabra `"
+msgstr[1] "Orde do shell que coincide coas palabras `"
 
 #: builtins/help.def:168
 #, c-format
 msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
-msgstr ""
+msgstr "non hai temas de axuda que coincidan con «%s». Probe «help help» ou «man -k %s» ou «info %s»"
 
 #: builtins/help.def:185
 #, c-format
@@ -465,33 +469,41 @@ msgid ""
 "A star (*) next to a name means that the command is disabled.\n"
 "\n"
 msgstr ""
+"Estas ordes do shell están definidas internamente.  Teclee `help' para\n"
+"ver esta lista.\n"
+"Teclee `help nome' para saber máis sobre a función `nome'.\n"
+"Use `info bash' para saber máis sobre o shell en xeral.\n"
+"Use `man -k' o `info' para saber máis sobre as órdenes que non están nesta lista.\n"
+"\n"
+"Un asterisco (*) xunto a un nome significa que a orde está desactivada.\n"
+"\n"
 
 #: builtins/history.def:154
 msgid "cannot use more than one of -anrw"
-msgstr ""
+msgstr "non foi posíbel usar máis dun de -anrw"
 
 #: builtins/history.def:186
 msgid "history position"
-msgstr ""
+msgstr "posición no historial"
 
 #: builtins/history.def:365
 #, c-format
 msgid "%s: history expansion failed"
-msgstr ""
+msgstr "%s: fallou a expansión do historial"
 
 #: builtins/inlib.def:71
 #, c-format
 msgid "%s: inlib failed"
-msgstr ""
+msgstr "%s: fallou inlib"
 
 #: builtins/jobs.def:109
 msgid "no other options allowed with `-x'"
-msgstr ""
+msgstr "non se permiten outras opcións con «-x»"
 
 #: builtins/kill.def:198
 #, c-format
 msgid "%s: arguments must be process or job IDs"
-msgstr ""
+msgstr "%s: os argumentos deben ser procesos ou IDs de traballos"
 
 #: builtins/kill.def:261
 msgid "Unknown error"
@@ -499,90 +511,90 @@ msgstr "Erro descoñecido"
 
 #: builtins/let.def:95 builtins/let.def:120 expr.c:552 expr.c:567
 msgid "expression expected"
-msgstr ""
+msgstr "agardábase unha expresión"
 
 #: builtins/mapfile.def:172
 #, c-format
 msgid "%s: not an indexed array"
-msgstr ""
+msgstr "%s: non é unha matriz indizada"
 
 #: builtins/mapfile.def:256 builtins/read.def:279
 #, c-format
 msgid "%s: invalid file descriptor specification"
-msgstr ""
+msgstr "%s: especificación de descritor de ficheiro non válida"
 
 #: builtins/mapfile.def:264 builtins/read.def:286
 #, c-format
 msgid "%d: invalid file descriptor: %s"
-msgstr ""
+msgstr "%d: descritor de ficheiro non válido: %s"
 
 #: builtins/mapfile.def:273 builtins/mapfile.def:311
 #, c-format
 msgid "%s: invalid line count"
-msgstr ""
+msgstr "%s: conta de liñas non válida"
 
 #: builtins/mapfile.def:284
 #, c-format
 msgid "%s: invalid array origin"
-msgstr ""
+msgstr "%s: orixe de matriz non válido"
 
 #: builtins/mapfile.def:301
 #, c-format
 msgid "%s: invalid callback quantum"
-msgstr ""
+msgstr "%s: quantum de chamada non válido"
 
 #: builtins/mapfile.def:333
 msgid "empty array variable name"
-msgstr ""
+msgstr "nome de variábel de matriz baleiro"
 
 #: builtins/mapfile.def:354
 msgid "array variable support required"
-msgstr ""
+msgstr "requírese a compatibilidade de variábel de matriz"
 
 #: builtins/printf.def:394
 #, c-format
 msgid "`%s': missing format character"
-msgstr ""
+msgstr "`%s': falta o carácter de formato"
 
 #: builtins/printf.def:448
 #, c-format
 msgid "`%c': invalid time format specification"
-msgstr ""
+msgstr "`%c': especificación de formato de tempo non válida"
 
 #: builtins/printf.def:635
 #, c-format
 msgid "`%c': invalid format character"
-msgstr ""
+msgstr "`%c': carácter de formato non válido"
 
 #: builtins/printf.def:662
-#, fuzzy, c-format
+#, c-format
 msgid "warning: %s: %s"
-msgstr "Aviso"
+msgstr "aviso: %s: %s"
 
 #: builtins/printf.def:840
 msgid "missing hex digit for \\x"
-msgstr ""
+msgstr "falta o díxito hexadecimal para \\x"
 
 #: builtins/printf.def:855
 #, c-format
 msgid "missing unicode digit for \\%c"
-msgstr ""
+msgstr "falta o díxito unicode para \\%c"
 
 #: builtins/pushd.def:195
 msgid "no other directory"
-msgstr ""
+msgstr "non hai outro directorio"
 
 #: builtins/pushd.def:462
 msgid "<no current directory>"
-msgstr ""
+msgstr "<non hai directorio actual>"
 
 #: builtins/pushd.def:506
 msgid "directory stack empty"
-msgstr ""
+msgstr "a pila de directorios está baleira"
 
 #: builtins/pushd.def:508
 msgid "directory stack index"
-msgstr ""
+msgstr "índice da pila de directorios"
 
 #: builtins/pushd.def:683
 msgid ""
@@ -605,6 +617,26 @@ msgid ""
 "      -N\tDisplays the Nth entry counting from the right of the list shown by\n"
 "\tdirs when invoked without options, starting with zero."
 msgstr ""
+"Mostra a lista de directorios actualmente gravados.  Os directorios\n"
+"    gárdanse na lista coa orde `pushd'; pode ir saíndo da\n"
+"    lista coa orde `popd'.\n"
+"    \n"
+"    Opcións:\n"
+"      -c\tlimpa a pila de directorios, eliminando todos os elementos\n"
+"      -l\tnon mostra as versións con prefixo de til dos directorios\n"
+"    \trelativos ao seu directorio inicial\n"
+"      -p\tmostra a pila de directorios cunha entrada por liña\n"
+"      -v\tmuestra a pila de directorios cunha entrada por liña coa\n"
+"    \tsúa posición na pila como prefixo\n"
+"    \n"
+"    Argumentos:\n"
+"      +N\tMostra a N-ésima entrada contando desde a esquerda da\n"
+"    \tlista mostrada por dirs cando se chama sen opcións,\n"
+"    \tcomezando desde cero.\n"
+"    \n"
+"      -N\tMostra a N-ésima entrada contando desde a dereita da\n"
+"\tlista mostrada por dirs cando se chama sen opcións,\n"
+"\tcomezando desde cero."
 
 #: builtins/pushd.def:705
 msgid ""
@@ -630,6 +662,23 @@ msgid ""
 "    \n"
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
+"Engade un directorio ao tope da rima de directorios, ou rota\n"
+"    a pila, facendo que o novo tope da rima sexa o\n"
+"    directorio de trabajo actual.  Sen argumentos, intercambia\n"
+"    os dous directorios do tope.\n"
+"    \n"
+"    Argumentos:\n"
+"    +N\tRota a pila para que o N-ésimo directorio (contando\n"
+"    \tda izquierda da lista mostrada por `dirs',\n"
+"    \tcomezando desde cero) estea no tope.\n"
+"    -N\tRota a pila para que o N-ésimo directorio (contando\n"
+"    \tda derecha da lista mostrada por `dirs',\n"
+"    \tcomezando desde cero) estea no tope.\n"
+"    \n"
+"     dir\tagrega DIR á rima de directorios no tope,\n"
+"    \tfacéndoo o novo directorio de traballo actual.\n"
+"    \n"
+"    A orde interna `dirs' mostra a rima de directorios."
 
 #: builtins/pushd.def:730
 msgid ""
@@ -651,11 +700,30 @@ msgid ""
 "    \n"
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
+"Borra entradas da pila de directorios.  Sen argumentos, borra\n"
+"    directorio do tope da pila, e cambia ao novo directorio tope.\n"
+"    \n"
+"    Opcións:\n"
+"      -n\tsuprime o cambio normal de directorio cando se borra\n"
+"    \tdirectorios da pila, así só se manipula a pila.\n"
+"    \n"
+"    Argumentos:\n"
+"      +N\tBorra a N-ésima entrada contando da esquerda da\n"
+"    \tlista mostrada por `dirs', comenzando desde cero.\n"
+"    \tPor exemplo: `popd +0' borra o primeiro directorio, `popd +1'\n"
+"    \to segundo.\n"
+"    \n"
+"      -N\tBorra a N-ésima entrada contando da derecha da\n"
+"    \tlista mostrada por `dirs', comezando desde cero.\n"
+"    \tPor exemplo: `popd -0' borra o último directorio, `popd -1'\n"
+"    \to penúltimo.\n"
+"    \n"
+"    A orde interna `dirs' mostra a pila de directorios."
 
 #: builtins/read.def:252
 #, c-format
 msgid "%s: invalid timeout specification"
-msgstr ""
+msgstr "%s: especificación de tempo de expiración non válida"
 
 #: builtins/read.def:588
 #, c-format
@@ -664,26 +732,26 @@ msgstr "erro de lectura: %d: %s"
 
 #: builtins/return.def:73
 msgid "can only `return' from a function or sourced script"
-msgstr ""
+msgstr "só se pode usar «return» nunha función ou guión lido con «source»"
 
 #: builtins/set.def:771
 msgid "cannot simultaneously unset a function and a variable"
-msgstr ""
+msgstr "non é posíbel borrar ao mesmo tempo unha función e unha variábel"
 
 #: builtins/set.def:808
 #, c-format
 msgid "%s: cannot unset"
-msgstr ""
+msgstr "%s: non é posíbel borrar"
 
 #: builtins/set.def:815
 #, c-format
 msgid "%s: cannot unset: readonly %s"
-msgstr ""
+msgstr "%s: non é posíbel borrar: %s é de só lectura"
 
 #: builtins/set.def:826
 #, c-format
 msgid "%s: not an array variable"
-msgstr ""
+msgstr "%s: non é unha variábel de matriz"
 
 #: builtins/setattr.def:186
 #, c-format
@@ -692,20 +760,20 @@ msgstr "%s: non é unha función"
 
 #: builtins/shift.def:71 builtins/shift.def:77
 msgid "shift count"
-msgstr ""
+msgstr "conta de shift"
 
 #: builtins/shopt.def:264
 msgid "cannot set and unset shell options simultaneously"
-msgstr ""
+msgstr "non é posíbel activar e desactivar opcións do shell simultaneamente"
 
 #: builtins/shopt.def:329
 #, c-format
 msgid "%s: invalid shell option name"
-msgstr ""
+msgstr "%s: nome de opción do shell non válido"
 
 #: builtins/source.def:130
 msgid "filename argument required"
-msgstr ""
+msgstr "requírese un argumento de nome de ficheiro"
 
 #: builtins/source.def:155
 #, c-format
@@ -714,21 +782,21 @@ msgstr "%s: non se atopou o ficheiro"
 
 #: builtins/suspend.def:101
 msgid "cannot suspend"
-msgstr ""
+msgstr "non é posíbel suspender"
 
 #: builtins/suspend.def:111
 msgid "cannot suspend a login shell"
-msgstr ""
+msgstr "non é posíbel suspender un shell de entrada"
 
 #: builtins/type.def:234
 #, c-format
 msgid "%s is aliased to `%s'\n"
-msgstr ""
+msgstr "%s é un alias de `%s'\n"
 
 #: builtins/type.def:255
 #, c-format
 msgid "%s is a shell keyword\n"
-msgstr ""
+msgstr "%s é unha palabra chave do shell\n"
 
 #: builtins/type.def:274
 #, c-format
@@ -738,7 +806,7 @@ msgstr "%s é unha función\n"
 #: builtins/type.def:296
 #, c-format
 msgid "%s is a shell builtin\n"
-msgstr ""
+msgstr "%s é unha orde interna do shell\n"
 
 #: builtins/type.def:317 builtins/type.def:391
 #, c-format
@@ -748,31 +816,31 @@ msgstr "%s é %s\n"
 #: builtins/type.def:337
 #, c-format
 msgid "%s is hashed (%s)\n"
-msgstr ""
+msgstr "%s está asociado (%s)\n"
 
 #: builtins/ulimit.def:376
 #, c-format
 msgid "%s: invalid limit argument"
-msgstr ""
+msgstr "%s: límite de argumento non válido"
 
 #: builtins/ulimit.def:402
 #, c-format
 msgid "`%c': bad command"
-msgstr ""
+msgstr "`%c': orde errónea"
 
 #: builtins/ulimit.def:431
 #, c-format
 msgid "%s: cannot get limit: %s"
-msgstr ""
+msgstr "%s: non é posíbel obter o límite: %s"
 
 #: builtins/ulimit.def:457
 msgid "limit"
-msgstr ""
+msgstr "límite"
 
 #: builtins/ulimit.def:469 builtins/ulimit.def:769
 #, c-format
 msgid "%s: cannot modify limit: %s"
-msgstr ""
+msgstr "%s: non é posíbel modificar o límite: %s"
 
 #: builtins/umask.def:118
 msgid "octal number"
@@ -781,12 +849,12 @@ msgstr "número octal"
 #: builtins/umask.def:231
 #, c-format
 msgid "`%c': invalid symbolic mode operator"
-msgstr ""
+msgstr "`%c': operador de modo simbólico non válido"
 
 #: builtins/umask.def:286
 #, c-format
 msgid "`%c': invalid symbolic mode character"
-msgstr ""
+msgstr "`%c': carácter de modo simbólico non válido"
 
 #: error.c:90 error.c:321 error.c:323 error.c:325
 msgid " line "
@@ -800,43 +868,43 @@ msgstr "última orde: %s\n"
 #: error.c:173
 #, c-format
 msgid "Aborting..."
-msgstr ""
+msgstr "Abortando…"
 
 #: error.c:406
 msgid "unknown command error"
-msgstr ""
+msgstr "erro de orde descoñecido"
 
 #: error.c:407
 msgid "bad command type"
-msgstr ""
+msgstr "tipo de orde erróneo"
 
 #: error.c:408
 msgid "bad connector"
-msgstr ""
+msgstr "conector erróneo"
 
 #: error.c:409
 msgid "bad jump"
-msgstr ""
+msgstr "salto erróneo"
 
 #: error.c:447
 #, c-format
 msgid "%s: unbound variable"
-msgstr ""
+msgstr "%s: variable sen asignar"
 
 #: eval.c:181
 #, c-format
 msgid "\atimed out waiting for input: auto-logout\n"
-msgstr ""
+msgstr "\aexpirou mentres agardaba algunha entrada: auto-logout\n"
 
 #: execute_cmd.c:504
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
-msgstr ""
+msgstr "non é posíbel redirixir a saída estándar desde /dev/null: %s"
 
 #: execute_cmd.c:1168
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
-msgstr ""
+msgstr "TIMEFORMAT: `%c': carácter de formato non válido"
 
 #: execute_cmd.c:2121
 msgid "pipe error"
@@ -845,7 +913,7 @@ msgstr "erro de canalización"
 #: execute_cmd.c:4640
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
-msgstr ""
+msgstr "%s: restrinxido: non se pode especificar `/' en nomes de ordes"
 
 #: execute_cmd.c:4735
 #, c-format
@@ -860,20 +928,20 @@ msgstr "%s: %s"
 #: execute_cmd.c:4995
 #, c-format
 msgid "%s: %s: bad interpreter"
-msgstr ""
+msgstr "%s: %s: intérprete erróneo"
 
 #: execute_cmd.c:5144
-#, fuzzy, c-format
+#, c-format
 msgid "cannot duplicate fd %d to fd %d"
-msgstr "Seleccione un ou máis <b>obxectos</b> para duplicalos."
+msgstr "no se pode duplicar o df %d ao df %d"
 
 #: expr.c:256
 msgid "expression recursion level exceeded"
-msgstr ""
+msgstr "excedeuse o nivel de recursión da expresión"
 
 #: expr.c:280
 msgid "recursion stack underflow"
-msgstr ""
+msgstr "desbordamento da base da pila de recursión"
 
 #: expr.c:422
 msgid "syntax error in expression"
@@ -881,7 +949,7 @@ msgstr "erro de sintaxe na expresión"
 
 #: expr.c:463
 msgid "attempted assignment to non-variable"
-msgstr ""
+msgstr "tentouse asignar a algo que non é unha variábel"
 
 #: expr.c:486 expr.c:491 expr.c:807
 msgid "division by 0"
@@ -889,102 +957,102 @@ msgstr "división entre 0"
 
 #: expr.c:517
 msgid "bug: bad expassign token"
-msgstr ""
+msgstr "erro: elemento de asignación de expresión erróneo"
 
 #: expr.c:564
 msgid "`:' expected for conditional expression"
-msgstr ""
+msgstr "agardábase `:' para a expresión condicional"
 
 #: expr.c:832
 msgid "exponent less than 0"
-msgstr ""
+msgstr "expoñente menor que 0"
 
 #: expr.c:887
 msgid "identifier expected after pre-increment or pre-decrement"
-msgstr ""
+msgstr "agardábase un identificador despois do pre-incremento ou pre-decremento"
 
 #: expr.c:910
 msgid "missing `)'"
-msgstr ""
+msgstr "falta un `)'"
 
 #: expr.c:959 expr.c:1282
 msgid "syntax error: operand expected"
-msgstr ""
+msgstr "erro de sintaxe: agardábase un operando"
 
 #: expr.c:1284
 msgid "syntax error: invalid arithmetic operator"
-msgstr ""
+msgstr "erro de sintaxe: operador aritmético non válido"
 
 #: expr.c:1308
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
-msgstr ""
+msgstr "%s%s%s: %s (o elemento de erro é \"%s\")"
 
 #: expr.c:1366
 msgid "invalid arithmetic base"
-msgstr ""
+msgstr "base aritmética non válida"
 
 #: expr.c:1386
 msgid "value too great for base"
-msgstr ""
+msgstr "valor demasiado grande para a base"
 
 #: expr.c:1435
 #, c-format
 msgid "%s: expression error\n"
-msgstr ""
+msgstr "%s: erro de expresión\n"
 
 #: general.c:61
 msgid "getcwd: cannot access parent directories"
-msgstr ""
+msgstr "getcwd: non é posíbel acceder aos directorios pai"
 
 #: input.c:94 subst.c:5082
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
-msgstr ""
+msgstr "non é posíbel restabelecer o modo nodelay para o df %d"
 
 #: input.c:260
 #, c-format
 msgid "cannot allocate new file descriptor for bash input from fd %d"
-msgstr ""
+msgstr "non é posíbel asignar un novo descritor de ficheiros para a entrada de bash desde o fd %d"
 
 #: input.c:268
 #, c-format
 msgid "save_bash_input: buffer already exists for new fd %d"
-msgstr ""
+msgstr "save_bash_input: o almacenamento intermedio xa existe para o novo fd %d"
 
 #: jobs.c:468
 msgid "start_pipeline: pgrp pipe"
-msgstr ""
+msgstr "start_pipeline: tubería de pgrp"
 
 #: jobs.c:889
 #, c-format
 msgid "forked pid %d appears in running job %d"
-msgstr ""
+msgstr "o pid `forked' %d aparece no traballo en execución %d"
 
 #: jobs.c:1007
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
-msgstr ""
+msgstr "borrando o trabajo detido %d con grupo de proceso %ld"
 
 #: jobs.c:1112
 #, c-format
 msgid "add_process: process %5ld (%s) in the_pipeline"
-msgstr ""
+msgstr "add_process: o proceso %5ld (%s) en the_pipeline"
 
 #: jobs.c:1115
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
-msgstr ""
+msgstr "add_process: pid %5ld (%s) márcase como vivo aínda"
 
 #: jobs.c:1430
 #, c-format
 msgid "describe_pid: %ld: no such pid"
-msgstr ""
+msgstr "describe_pid: %ld: non existe tal pid"
 
 #: jobs.c:1445
 #, c-format
 msgid "Signal %d"
-msgstr ""
+msgstr "Sinal %d"
 
 #: jobs.c:1459 jobs.c:1484
 msgid "Done"
@@ -992,12 +1060,12 @@ msgstr "Feito"
 
 #: jobs.c:1464 siglist.c:123
 msgid "Stopped"
-msgstr ""
+msgstr "Detido"
 
 #: jobs.c:1468
 #, c-format
 msgid "Stopped(%s)"
-msgstr ""
+msgstr "Detido(%s)"
 
 #: jobs.c:1472
 msgid "Running"
@@ -1011,7 +1079,7 @@ msgstr "Feito(%d)"
 #: jobs.c:1488
 #, c-format
 msgid "Exit %d"
-msgstr ""
+msgstr "Saída %d"
 
 #: jobs.c:1491
 msgid "Unknown status"
@@ -1020,46 +1088,46 @@ msgstr "Estado descoñecido"
 #: jobs.c:1578
 #, c-format
 msgid "(core dumped) "
-msgstr ""
+msgstr "(«core» xerado) "
 
 #: jobs.c:1597
 #, c-format
 msgid "  (wd: %s)"
-msgstr ""
+msgstr "  (dir agora: %s)"
 
 #: jobs.c:1805
 #, c-format
 msgid "child setpgid (%ld to %ld)"
-msgstr ""
+msgstr "setpgid fillo (%ld a %ld)"
 
 #: jobs.c:2133 nojobs.c:585
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
-msgstr ""
+msgstr "wait: pid %ld non é un proceso fillo desta shell"
 
 #: jobs.c:2360
 #, c-format
 msgid "wait_for: No record of process %ld"
-msgstr ""
+msgstr "wait_for: Non hai un rexistro do proceso %ld"
 
 #: jobs.c:2637
 #, c-format
 msgid "wait_for_job: job %d is stopped"
-msgstr ""
+msgstr "wait_for_job: o traballo %d está detido"
 
 #: jobs.c:2859
 #, c-format
 msgid "%s: job has terminated"
-msgstr ""
+msgstr "%s: o traballo rematou"
 
 #: jobs.c:2868
 #, c-format
 msgid "%s: job %d already in background"
-msgstr ""
+msgstr "%s: o trabajo %d xa está en segundo plano"
 
 #: jobs.c:3089
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
-msgstr ""
+msgstr "waitchld: actívase WNOHANG para evitar o bloque indefinido"
 
 #: jobs.c:3538
 #, c-format
@@ -1069,38 +1137,38 @@ msgstr "%s: liña %d: "
 #: jobs.c:3552 nojobs.c:814
 #, c-format
 msgid " (core dumped)"
-msgstr ""
+msgstr " («core» generado)"
 
 #: jobs.c:3564 jobs.c:3577
 #, c-format
 msgid "(wd now: %s)\n"
-msgstr ""
+msgstr "(dir agora: %s)\n"
 
 #: jobs.c:3609
 msgid "initialize_job_control: getpgrp failed"
-msgstr ""
+msgstr "initialize_jobs_control: fallou getpgrp"
 
 #: jobs.c:3669
 msgid "initialize_job_control: line discipline"
-msgstr ""
+msgstr "initialize_jobs_control: disciplina de liña"
 
 #: jobs.c:3679
 msgid "initialize_job_control: setpgid"
-msgstr ""
+msgstr "initialize_jobs_control: setpgid"
 
 #: jobs.c:3707
 #, c-format
 msgid "cannot set terminal process group (%d)"
-msgstr ""
+msgstr "non é posíbel estabelecer o grupo de procesos de terminal (%d)"
 
 #: jobs.c:3712
 msgid "no job control in this shell"
-msgstr ""
+msgstr "non hai control de trabalos nesta shell"
 
 #: lib/malloc/malloc.c:296
 #, c-format
 msgid "malloc: failed assertion: %s\n"
-msgstr ""
+msgstr "malloc: fallou a aserción: %s\n"
 
 #: lib/malloc/malloc.c:312
 #, c-format
@@ -1108,6 +1176,8 @@ msgid ""
 "\r\n"
 "malloc: %s:%d: assertion botched\r\n"
 msgstr ""
+"\r\n"
+"malloc: %s:%d: aserción arruinada\r\n"
 
 #: lib/malloc/malloc.c:313
 msgid "unknown"
@@ -1115,93 +1185,93 @@ msgstr "descoñecido"
 
 #: lib/malloc/malloc.c:797
 msgid "malloc: block on free list clobbered"
-msgstr ""
+msgstr "malloc: bloque na lista libre sobreescrito"
 
 #: lib/malloc/malloc.c:874
 msgid "free: called with already freed block argument"
-msgstr ""
+msgstr "free: chamouse cun argumento de bloque previamente liberado"
 
 #: lib/malloc/malloc.c:877
 msgid "free: called with unallocated block argument"
-msgstr ""
+msgstr "free: chamouse cun argumento de bloque sen asignar"
 
 #: lib/malloc/malloc.c:896
 msgid "free: underflow detected; mh_nbytes out of range"
-msgstr ""
+msgstr "free: detectouse un desbordamento por embaixo; mh_nbytes fóra de rango"
 
 #: lib/malloc/malloc.c:902
 msgid "free: start and end chunk sizes differ"
-msgstr ""
+msgstr "free: os tamaños dos anacos de inicio e fin son diferentes"
 
 #: lib/malloc/malloc.c:1001
 msgid "realloc: called with unallocated block argument"
-msgstr ""
+msgstr "realloc: chamouse cun argumento de bloque sen asignar"
 
 #: lib/malloc/malloc.c:1016
 msgid "realloc: underflow detected; mh_nbytes out of range"
-msgstr ""
+msgstr "realloc: detectouse un desbordamento por embaixo; mh_nbytes fóra de rango"
 
 #: lib/malloc/malloc.c:1022
 msgid "realloc: start and end chunk sizes differ"
-msgstr ""
+msgstr "realloc: os tamaños dos anacos de inicio e fin son diferentes"
 
 #: lib/malloc/table.c:177
 #, c-format
 msgid "register_alloc: alloc table is full with FIND_ALLOC?\n"
-msgstr ""
+msgstr "register_alloc: a táboa alloc está chea con FIND_ALLOC?\n"
 
 #: lib/malloc/table.c:184
 #, c-format
 msgid "register_alloc: %p already in table as allocated?\n"
-msgstr ""
+msgstr "register_alloc: %p xa está na táboa como asignado?\n"
 
 #: lib/malloc/table.c:220
 #, c-format
 msgid "register_free: %p already in table as free?\n"
-msgstr ""
+msgstr "register_free: %p xa está na táboa como libre?\n"
 
 #: lib/sh/fmtulong.c:101
 msgid "invalid base"
-msgstr ""
+msgstr "base non válida"
 
 #: lib/sh/netopen.c:168
 #, c-format
 msgid "%s: host unknown"
-msgstr ""
+msgstr "%s: anfitrión descoñecido"
 
 #: lib/sh/netopen.c:175
 #, c-format
 msgid "%s: invalid service"
-msgstr ""
+msgstr "%s: servizo non válido"
 
 #: lib/sh/netopen.c:306
 #, c-format
 msgid "%s: bad network path specification"
-msgstr ""
+msgstr "%s: especificación de ruta de rede errónea"
 
 #: lib/sh/netopen.c:346
 msgid "network operations not supported"
-msgstr ""
+msgstr "non hai compatibilidade para operacións de rede"
 
 #: locale.c:192
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
-msgstr ""
+msgstr "setlocale: LC_ALL non se pode cambiar a configuración rexional (%s)"
 
 #: locale.c:194
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
-msgstr ""
+msgstr "setlocale: LC_ALL: non se pode cambiar a configuración rexional (%s): %s"
 
 #: locale.c:247
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
-msgstr ""
+msgstr "setlocale: %s: non se pode cambiar a configuración rexional (%s)"
 
 #: locale.c:249
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
-msgstr ""
+msgstr "setlocale: %s: non se pode cambiar a configuración rexional (%s): %s"
 
 #: mailcheck.c:433
 msgid "You have mail in $_"
@@ -1214,15 +1284,15 @@ msgstr "Ten unha nova mensaxe en $_"
 #: mailcheck.c:474
 #, c-format
 msgid "The mail in %s has been read\n"
-msgstr ""
+msgstr "O correo en %s foi lido\n"
 
 #: make_cmd.c:323
 msgid "syntax error: arithmetic expression required"
-msgstr ""
+msgstr "error de sintaxe: requírese unha expresión aritmética"
 
 #: make_cmd.c:325
 msgid "syntax error: `;' unexpected"
-msgstr ""
+msgstr "error sintáctico: `;' non esperado"
 
 #: make_cmd.c:326
 #, c-format
@@ -1232,100 +1302,100 @@ msgstr "erro de sintaxe: `((%s))'"
 #: make_cmd.c:575
 #, c-format
 msgid "make_here_document: bad instruction type %d"
-msgstr ""
+msgstr "make_here_document: tipo de instrución %d erróneo"
 
 #: make_cmd.c:659
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
-msgstr ""
+msgstr "o documento-aquí na liña %d está delimitado por fin-de-fichero (agardábase `%s')"
 
 #: make_cmd.c:756
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
-msgstr ""
+msgstr "make_redirection: a instrucción de redirección `%d' está fóra de rango"
 
 #: parse.y:3173 parse.y:3444
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
-msgstr ""
+msgstr "EOF inesperado mentres se buscaba un `%c' coincidente"
 
 #: parse.y:4025
 msgid "unexpected EOF while looking for `]]'"
-msgstr ""
+msgstr "EOF inesperado mentres se buscaba `]]'"
 
 #: parse.y:4030
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
-msgstr ""
+msgstr "error de sintaxe na expresión condicional: elemento inesperado `%s'"
 
 #: parse.y:4034
 msgid "syntax error in conditional expression"
-msgstr ""
+msgstr "error sintáctico na expresión condicional"
 
 #: parse.y:4112
 #, c-format
 msgid "unexpected token `%s', expected `)'"
-msgstr ""
+msgstr "elemento inesperado `%s', agardábase `)'"
 
 #: parse.y:4116
 msgid "expected `)'"
-msgstr ""
+msgstr "agardábase `)'"
 
 #: parse.y:4144
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
-msgstr ""
+msgstr "argumento inesperado `%s' para o operador unario condicional"
 
 #: parse.y:4148
 msgid "unexpected argument to conditional unary operator"
-msgstr ""
+msgstr "argumento inesperado para o operador unario condicional"
 
 #: parse.y:4194
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
-msgstr ""
+msgstr "elemento inesperado `%s', agardábase un operador binario condicional"
 
 #: parse.y:4198
 msgid "conditional binary operator expected"
-msgstr ""
+msgstr "agardábase un operador binario condicional"
 
 #: parse.y:4220
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
-msgstr ""
+msgstr "argumento inesperado `%s' para o operador binario condicional"
 
 #: parse.y:4224
 msgid "unexpected argument to conditional binary operator"
-msgstr ""
+msgstr "argumento inesperado para o operador binario condicional"
 
 #: parse.y:4235
 #, c-format
 msgid "unexpected token `%c' in conditional command"
-msgstr ""
+msgstr "elemento inesperado `%c' na orde condicional"
 
 #: parse.y:4238
 #, c-format
 msgid "unexpected token `%s' in conditional command"
-msgstr ""
+msgstr "elemento inesperado `%s' na orde condicional"
 
 #: parse.y:4242
 #, c-format
 msgid "unexpected token %d in conditional command"
-msgstr ""
+msgstr "elemento inesperado %d na orde condicional"
 
 #: parse.y:5566
 #, c-format
 msgid "syntax error near unexpected token `%s'"
-msgstr ""
+msgstr "error de sintaxe perto do elemento inesperado `%s'"
 
 #: parse.y:5584
 #, c-format
 msgid "syntax error near `%s'"
-msgstr ""
+msgstr "erro de sintaxe cerca de «%s»"
 
 #: parse.y:5594
 msgid "syntax error: unexpected end of file"
-msgstr ""
+msgstr "error de sintaxe: non se agardaba o final do fichero"
 
 #: parse.y:5594
 msgid "syntax error"
@@ -1334,90 +1404,90 @@ msgstr "erro de sintaxe"
 #: parse.y:5656
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
-msgstr ""
+msgstr "Use «%s» para deixar o shell.\n"
 
 #: parse.y:5818
 msgid "unexpected EOF while looking for matching `)'"
-msgstr ""
+msgstr "EOF non agardado mentres se buscaba un «)» coincidente"
 
 #: pcomplete.c:1030
 #, c-format
 msgid "completion: function `%s' not found"
-msgstr ""
+msgstr "completion: non se atopa a función `%s'"
 
 #: pcomplib.c:182
 #, c-format
 msgid "progcomp_insert: %s: NULL COMPSPEC"
-msgstr ""
+msgstr "progcomp_insert: %s: COMPSPEC nulo"
 
 #: print_cmd.c:296
 #, c-format
 msgid "print_command: bad connector `%d'"
-msgstr ""
+msgstr "print_command: conector erróneo `%d'"
 
 #: print_cmd.c:368
 #, c-format
 msgid "xtrace_set: %d: invalid file descriptor"
-msgstr ""
+msgstr "xtrace_set: %d: descriptor de fichero non válido"
 
 #: print_cmd.c:373
 msgid "xtrace_set: NULL file pointer"
-msgstr ""
+msgstr "xtrace_set: punteiro a ficheiro NULL"
 
 #: print_cmd.c:377
 #, c-format
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
-msgstr ""
+msgstr "xtrace fd (%d) != numfich xtrace fp (%d)"
 
 #: print_cmd.c:1478
 #, c-format
 msgid "cprintf: `%c': invalid format character"
-msgstr ""
+msgstr "cprintf: `%c': carácter de formato non válido"
 
 #: redir.c:122
 msgid "file descriptor out of range"
-msgstr ""
+msgstr "descritor de ficheiro fóra de rango"
 
 #: redir.c:178
 #, c-format
 msgid "%s: ambiguous redirect"
-msgstr ""
+msgstr "%s: redireccionamento ambigüo"
 
 #: redir.c:182
 #, c-format
 msgid "%s: cannot overwrite existing file"
-msgstr ""
+msgstr "%s: non se pode sobreescribir un fichero existente"
 
 #: redir.c:187
 #, c-format
 msgid "%s: restricted: cannot redirect output"
-msgstr ""
+msgstr "%s: restrinxido: no se pode redirixir a saída"
 
 #: redir.c:192
 #, c-format
 msgid "cannot create temp file for here-document: %s"
-msgstr ""
+msgstr "non se pode crear un fichero temporal para o documento-aquí: %s"
 
 #: redir.c:196
 #, c-format
 msgid "%s: cannot assign fd to variable"
-msgstr ""
+msgstr "%s: non é posíbel asignar o gd á variábel"
 
 #: redir.c:548
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
-msgstr ""
+msgstr "non se admite /dev/(tcp|udp)/anfitrion/porto sen rede"
 
 #: redir.c:818 redir.c:930 redir.c:993 redir.c:1136
 msgid "redirection error: cannot duplicate fd"
-msgstr ""
+msgstr "erro de redirección: non é posíbel duplicar o fd"
 
 #: shell.c:333
 msgid "could not find /tmp, please create!"
-msgstr ""
+msgstr "non é posíbel atopar /tmp, por favor creeo!"
 
 #: shell.c:337
 msgid "/tmp must be a valid directory name"
-msgstr ""
+msgstr "/tmp debe ser un nome de directorio válido"
 
 #: shell.c:884
 #, c-format
@@ -1439,38 +1509,40 @@ msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
 "\t%s [GNU long option] [option] script-file ...\n"
 msgstr ""
+"Uso:\t%s [opción GNU longa] [opción] ...\n"
+"\t%s [opción GNU longa] [opción] guión-do-shell\n"
 
 #: shell.c:1798
 msgid "GNU long options:\n"
-msgstr ""
+msgstr "Opcións GNU longas:\n"
 
 #: shell.c:1802
 msgid "Shell options:\n"
-msgstr ""
+msgstr "Opcións do shell:\n"
 
 #: shell.c:1803
 msgid "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n"
-msgstr ""
+msgstr "\t-irsD o -c orde ou -O opcion_shopt\t\t(só invocación)\n"
 
 #: shell.c:1818
 #, c-format
 msgid "\t-%s or -o option\n"
-msgstr ""
+msgstr "\t-%s ou -o opción\n"
 
 #: shell.c:1824
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
-msgstr ""
+msgstr "Escriba `%s -c \"help set\"' para máis información sobre as opcións do shell.\n"
 
 #: shell.c:1825
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
-msgstr ""
+msgstr "Escriba `%s -c help' para máis información sobre as ordes internas do shell.\n"
 
 #: shell.c:1826
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
-msgstr ""
+msgstr "Use a orden `bashbug' para reportar erros.\n"
 
 #: sig.c:638
 #, c-format
@@ -1479,15 +1551,15 @@ msgstr "sigprocmask: %d: operación non válida"
 
 #: siglist.c:48
 msgid "Bogus signal"
-msgstr ""
+msgstr "Sinal ambigüa"
 
 #: siglist.c:51
 msgid "Hangup"
-msgstr ""
+msgstr "Colgar"
 
 #: siglist.c:55
 msgid "Interrupt"
-msgstr ""
+msgstr "Interromper"
 
 #: siglist.c:59
 msgid "Quit"
@@ -1495,127 +1567,127 @@ msgstr "Saír"
 
 #: siglist.c:63
 msgid "Illegal instruction"
-msgstr ""
+msgstr "Instrución ilegal"
 
 #: siglist.c:67
 msgid "BPT trace/trap"
-msgstr ""
+msgstr "BPT rastreo/captura"
 
 #: siglist.c:75
 msgid "ABORT instruction"
-msgstr ""
+msgstr "instrución ABORT"
 
 #: siglist.c:79
 msgid "EMT instruction"
-msgstr ""
+msgstr "instrución EMT"
 
 #: siglist.c:83
 msgid "Floating point exception"
-msgstr ""
+msgstr "Excepción de coma flotante"
 
 #: siglist.c:87
 msgid "Killed"
-msgstr ""
+msgstr "Matado"
 
 #: siglist.c:91
 msgid "Bus error"
-msgstr ""
+msgstr "Erro no bus"
 
 #: siglist.c:95
 msgid "Segmentation fault"
-msgstr ""
+msgstr "Violación de segmento"
 
 #: siglist.c:99
 msgid "Bad system call"
-msgstr ""
+msgstr "Chamada ao sistema errónea"
 
 #: siglist.c:103
 msgid "Broken pipe"
-msgstr ""
+msgstr "Tubería rota"
 
 #: siglist.c:107
 msgid "Alarm clock"
-msgstr ""
+msgstr "Temporizador"
 
 #: siglist.c:111
 msgid "Terminated"
-msgstr ""
+msgstr "Rematado"
 
 #: siglist.c:115
 msgid "Urgent IO condition"
-msgstr ""
+msgstr "Condicón de E/s urxente"
 
 #: siglist.c:119
 msgid "Stopped (signal)"
-msgstr ""
+msgstr "Detido (sinal)"
 
 #: siglist.c:127
 msgid "Continue"
-msgstr ""
+msgstr "Continúa"
 
 #: siglist.c:135
 msgid "Child death or stop"
-msgstr ""
+msgstr "O proceso fillo morreu ou está parado"
 
 #: siglist.c:139
 msgid "Stopped (tty input)"
-msgstr ""
+msgstr "Detido (entrada pola terminal)"
 
 #: siglist.c:143
 msgid "Stopped (tty output)"
-msgstr ""
+msgstr "Detido (saída pola terminal)"
 
 #: siglist.c:147
 msgid "I/O ready"
-msgstr "E/S preparada"
+msgstr "E/S listas"
 
 #: siglist.c:151
 msgid "CPU limit"
-msgstr ""
+msgstr "Límite de CPU"
 
 #: siglist.c:155
 msgid "File limit"
-msgstr ""
+msgstr "Límite de ficheiros"
 
 #: siglist.c:159
 msgid "Alarm (virtual)"
-msgstr ""
+msgstr "Alarma (virtual)"
 
 #: siglist.c:163
 msgid "Alarm (profile)"
-msgstr ""
+msgstr "Alarma (contorno)"
 
 #: siglist.c:167
 msgid "Window changed"
-msgstr ""
+msgstr "Xanela cambiada"
 
 #: siglist.c:171
 msgid "Record lock"
-msgstr ""
+msgstr "Bloqueo de gravación"
 
 #: siglist.c:175
 msgid "User signal 1"
-msgstr ""
+msgstr "Sinal de usuario 1"
 
 #: siglist.c:179
 msgid "User signal 2"
-msgstr ""
+msgstr "Sinal de usuario 2"
 
 #: siglist.c:183
 msgid "HFT input data pending"
-msgstr ""
+msgstr "entrada de datos HFT pendente"
 
 #: siglist.c:187
 msgid "power failure imminent"
-msgstr ""
+msgstr "fallo de enerxía inminente"
 
 #: siglist.c:191
 msgid "system crash imminent"
-msgstr ""
+msgstr "caída do sistema inminente"
 
 #: siglist.c:195
 msgid "migrate process to another CPU"
-msgstr ""
+msgstr "migrando o proceso a outra CPU"
 
 #: siglist.c:199
 msgid "programming error"
@@ -1623,15 +1695,15 @@ msgstr "erro de programación"
 
 #: siglist.c:203
 msgid "HFT monitor mode granted"
-msgstr ""
+msgstr "o modo monitor HFT foi concedido"
 
 #: siglist.c:207
 msgid "HFT monitor mode retracted"
-msgstr ""
+msgstr "o modo monitor HTF foi retirado"
 
 #: siglist.c:211
 msgid "HFT sound sequence has completed"
-msgstr ""
+msgstr "a secuencia de son HFT foi completada"
 
 #: siglist.c:215
 msgid "Information request"
@@ -1639,197 +1711,197 @@ msgstr "Solicitude de información"
 
 #: siglist.c:223
 msgid "Unknown Signal #"
-msgstr ""
+msgstr "Sinal descoñecido #"
 
 #: siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
-msgstr ""
+msgstr "Sinal descoñecido #%d"
 
 #: subst.c:1333 subst.c:1502
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
-msgstr ""
+msgstr "susbtitución errónea: non hai un `%s' que peche en %s"
 
 #: subst.c:2795
 #, c-format
 msgid "%s: cannot assign list to array member"
-msgstr ""
+msgstr "%s: no é posíbel asignar unha lista a un membro da matriz"
 
 #: subst.c:4979 subst.c:4995
 msgid "cannot make pipe for process substitution"
-msgstr ""
+msgstr "non é posíbel crear a tubería para a sustitución do proceso"
 
 #: subst.c:5027
 msgid "cannot make child for process substitution"
-msgstr ""
+msgstr "non é posíbel crear un proceso fillo para a substitución do proceso"
 
 #: subst.c:5072
 #, c-format
 msgid "cannot open named pipe %s for reading"
-msgstr ""
+msgstr "non é posíbel abrir a tubería chamada %s para lectura"
 
 #: subst.c:5074
 #, c-format
 msgid "cannot open named pipe %s for writing"
-msgstr ""
+msgstr "non é posíbel abrir a tubería chamada %s para escritura"
 
 #: subst.c:5092
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
-msgstr ""
+msgstr "non é posíbel duplicar a tubería chamada %s como df %d"
 
 #: subst.c:5284
 msgid "cannot make pipe for command substitution"
-msgstr ""
+msgstr "non é posíble crear a tubería para a substitución da orde"
 
 #: subst.c:5322
 msgid "cannot make child for command substitution"
-msgstr ""
+msgstr "non é posíbel crear un proceso fillo para a substitución da orde"
 
 #: subst.c:5339
 msgid "command_substitute: cannot duplicate pipe as fd 1"
-msgstr ""
+msgstr "command_substitute: non é posíbel duplicar a tubería como fd 1"
 
 #: subst.c:5859
 #, c-format
 msgid "%s: parameter null or not set"
-msgstr ""
+msgstr "%s: parámetro nulo ou non estabelecido"
 
 #: subst.c:6125 subst.c:6140
 #, c-format
 msgid "%s: substring expression < 0"
-msgstr ""
+msgstr "%s: expresión de subcadea < 0"
 
 #: subst.c:7271
 #, c-format
 msgid "%s: bad substitution"
-msgstr ""
+msgstr "%s: substitución errónea"
 
 #: subst.c:7347
 #, c-format
 msgid "$%s: cannot assign in this way"
-msgstr ""
+msgstr "$%s: non é posíbel asignar de esta forma"
 
 #: subst.c:7684
 msgid "future versions of the shell will force evaluation as an arithmetic substitution"
-msgstr ""
+msgstr "versiones futuras do intérprete obligarán a evaluación como unha substitución aritmética"
 
 #: subst.c:8149
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
-msgstr ""
+msgstr "substitución errónea: non hai unha \"`\" que peche en %s"
 
 #: subst.c:9036
 #, c-format
 msgid "no match: %s"
-msgstr ""
+msgstr "non hai concidencia: %s"
 
 #: test.c:146
 msgid "argument expected"
-msgstr ""
+msgstr "agardábase un argumento"
 
 #: test.c:155
 #, c-format
 msgid "%s: integer expression expected"
-msgstr ""
+msgstr "%s: agardábase unha expresión enteira"
 
 #: test.c:263
 msgid "`)' expected"
-msgstr ""
+msgstr "agardábase `)'"
 
 #: test.c:265
 #, c-format
 msgid "`)' expected, found %s"
-msgstr ""
+msgstr "`)' agardábase, atopouse %s"
 
 #: test.c:280 test.c:698 test.c:701
 #, c-format
 msgid "%s: unary operator expected"
-msgstr ""
+msgstr "%s: agardábase un operador unario"
 
 #: test.c:449 test.c:741
 #, c-format
 msgid "%s: binary operator expected"
-msgstr ""
+msgstr "%s: agardábase un operador binario"
 
 #: test.c:816
 msgid "missing `]'"
-msgstr ""
+msgstr "falta un «]»"
 
 #: trap.c:207
 msgid "invalid signal number"
-msgstr ""
+msgstr "número de sinal non válido"
 
 #: trap.c:337
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
-msgstr ""
+msgstr "run_pending_traps: valor erróneo en trap_list[%d]: %p"
 
 #: trap.c:341
 #, c-format
 msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
-msgstr ""
+msgstr "run_pending_traps: o manexador de sinal é SIG_DFL, reenviando %d (%s) a sí mesmo"
 
 #: trap.c:393
 #, c-format
 msgid "trap_handler: bad signal %d"
-msgstr ""
+msgstr "trap_handler: sinal errónea %d"
 
 #: variables.c:363
 #, c-format
 msgid "error importing function definition for `%s'"
-msgstr ""
+msgstr "erro ao importar a definición da función para «%s»"
 
 #: variables.c:755
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
-msgstr ""
+msgstr "o nivel de shell (%d) é demasiado alto, restabelécese a 1"
 
 #: variables.c:1932
 msgid "make_local_variable: no function context at current scope"
-msgstr ""
+msgstr "make_local_variable: non hai contexto de función no ámbito actual"
 
 #: variables.c:3182
 msgid "all_local_variables: no function context at current scope"
-msgstr ""
+msgstr "all_local_variables: non hai contexto de función no ámbito actual"
 
 #: variables.c:3427
 #, c-format
 msgid "%s has null exportstr"
-msgstr ""
+msgstr "%s ten exportstr nulo"
 
 #: variables.c:3432 variables.c:3441
 #, c-format
 msgid "invalid character %d in exportstr for %s"
-msgstr ""
+msgstr "carácter non válido %d en exportsrt para %s"
 
 #: variables.c:3447
 #, c-format
 msgid "no `=' in exportstr for %s"
-msgstr ""
+msgstr "non hai «=» en exportstr para %s"
 
 #: variables.c:3891
 msgid "pop_var_context: head of shell_variables not a function context"
-msgstr ""
+msgstr "pop_var_context: a cabezak de shell_variables non é un contexto de función"
 
 #: variables.c:3904
 msgid "pop_var_context: no global_variables context"
-msgstr ""
+msgstr "pop_var_context: non é un contexto global_variables "
 
 #: variables.c:3978
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
-msgstr ""
+msgstr "pop_scope: a cabeza de shell_variables non é un ámbito de ambiente temporal"
 
 #: variables.c:4786
 #, c-format
 msgid "%s: %s: cannot open as FILE"
-msgstr ""
+msgstr "%s: %s: non é posíbel abrir como FICHEIRO"
 
 #: variables.c:4791
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
-msgstr ""
+msgstr "%s: %s: valor non válido para o descitor de ficheiro de rastreo"
 
 #: version.c:46
 msgid "Copyright (C) 2011 Free Software Foundation, Inc."
@@ -1837,7 +1909,7 @@ msgstr "Copyright (C) 2011 Free Software Foundation, Inc."
 
 #: version.c:47
 msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
-msgstr ""
+msgstr "Licenza GPLv3+: GPL de GNU versión 3 ou posterior <http://gnu.org/licenses/gpl.html>\n"
 
 #: version.c:86 version2.c:83
 #, c-format
@@ -1847,12 +1919,12 @@ msgstr "GNU bash, versión %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 "Isto é software libre; vostede é libre de cambialo e redistribuilo.\n"
 
 #: version.c:92 version2.c:89
 #, c-format
 msgid "There is NO WARRANTY, to the extent permitted by law.\n"
-msgstr ""
+msgstr "Non hai GARANTÍA, á extensión permitida pola ley.\n"
 
 #: version2.c:86
 #, c-format
@@ -1862,39 +1934,39 @@ 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 ""
+msgstr "Licenza GPLv2+: GPL de GNU versión 2 ou posterior <http://gnu.org/licenses/gpl.html>\n"
 
 #: xmalloc.c:91
 #, c-format
 msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)"
-msgstr ""
+msgstr "%s: non é posíbel asignar %lu bytes (%lu bytes asignados)"
 
 #: xmalloc.c:93
 #, c-format
 msgid "%s: cannot allocate %lu bytes"
-msgstr ""
+msgstr "%s: non é posíbel asignar %lu bytes"
 
 #: xmalloc.c:163
 #, c-format
 msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)"
-msgstr ""
+msgstr "%s: %s:%d: non é posíbel asignar %lu bytes (%lu bytes asignados)"
 
 #: xmalloc.c:165
 #, c-format
 msgid "%s: %s:%d: cannot allocate %lu bytes"
-msgstr ""
+msgstr "%s: %s:%d: non é posíbel asignar %lu bytes"
 
 #: builtins.c:43
 msgid "alias [-p] [name[=value] ... ]"
-msgstr ""
+msgstr "alias [-p] [nome[=valor] ... ]"
 
 #: builtins.c:47
 msgid "unalias [-a] name [name ...]"
-msgstr ""
+msgstr "unalias [-a] nome [nome ...]"
 
 #: 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 ""
+msgstr "bind [-lpvsPVS] [-m comb_teclas] [-f ficheiro] [-q nome] [-u nome] [-r secteclas] [-x secteclas:orde-shell] [keyseq:función-readline ou función-readline]"
 
 #: builtins.c:54
 msgid "break [n]"
@@ -1906,15 +1978,15 @@ msgstr "continue [n]"
 
 #: builtins.c:58
 msgid "builtin [shell-builtin [arg ...]]"
-msgstr ""
+msgstr "builtin [orde-interna-shell [arg ...]]"
 
 #: builtins.c:61
 msgid "caller [expr]"
-msgstr ""
+msgstr "caller [expresión]"
 
 #: builtins.c:64
 msgid "cd [-L|[-P [-e]]] [dir]"
-msgstr ""
+msgstr "cd [-L|[-P [-e]]] [directorio]"
 
 #: builtins.c:66
 msgid "pwd [-LP]"
@@ -1926,51 +1998,51 @@ 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] orde [arg ...]"
 
 #: builtins.c:76
 msgid "declare [-aAfFgilrtux] [-p] [name[=value] ...]"
-msgstr ""
+msgstr "declare [-aAfFgilrtux] [-p] [nome[=valor] ...]"
 
 #: builtins.c:78
 msgid "typeset [-aAfFgilrtux] [-p] name[=value] ..."
-msgstr ""
+msgstr "typeset [-aAfFgilrtux] [-p] nome[=valor] ..."
 
 #: builtins.c:80
 msgid "local [option] name[=value] ..."
-msgstr ""
+msgstr "local [option] nome[=valor] ..."
 
 #: 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 nomeficheiro] [nome ...]"
 
 #: builtins.c:92
 msgid "eval [arg ...]"
-msgstr ""
+msgstr "eval [arg ...]"
 
 #: builtins.c:94
 msgid "getopts optstring name [arg]"
-msgstr ""
+msgstr "getopts cadena_opcións nome [arg]"
 
 #: builtins.c:96
 msgid "exec [-cl] [-a name] [command [arguments ...]] [redirection ...]"
-msgstr ""
+msgstr "exec [-cl] [-a ome] [orde [argumentos ...]] [redirección ...]"
 
 #: builtins.c:98
 msgid "exit [n]"
@@ -1982,47 +2054,47 @@ msgstr "logout [n]"
 
 #: builtins.c:103
 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]"
-msgstr ""
+msgstr "fc [-e nome_e] [-lnr] [primeiro] [último] ou fc -s [pat=rep] [orde]"
 
 #: builtins.c:107
 msgid "fg [job_spec]"
-msgstr ""
+msgstr "fg [id_traballo]"
 
 #: builtins.c:111
 msgid "bg [job_spec ...]"
-msgstr ""
+msgstr "bg [id_traballo ...]"
 
 #: builtins.c:114
 msgid "hash [-lr] [-p pathname] [-dt] [name ...]"
-msgstr ""
+msgstr "hash [-lr] [-p ruta] [-dt] [nome ...]"
 
 #: builtins.c:117
 msgid "help [-dms] [pattern ...]"
-msgstr ""
+msgstr "help [-dms] [patrón ...]"
 
 #: builtins.c:121
 msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]"
-msgstr ""
+msgstr "history [-c] [-d desprazamento] [n] ou history -anrw [ficheiro] ou history -ps arg [arg...]"
 
 #: builtins.c:125
 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]"
-msgstr ""
+msgstr "jobs [-lnprs] [idtraballo ...] ou jobs -x orde [args]"
 
 #: builtins.c:129
 msgid "disown [-h] [-ar] [jobspec ...]"
-msgstr ""
+msgstr "disown [-h] [-ar] [id_traballo ...]"
 
 #: builtins.c:132
 msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]"
-msgstr ""
+msgstr "kill [-s id_sinal | -n num_sinal | -id_sinal] pid | id_traballo ... ou kill -l [id_sinal]"
 
 #: 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 ""
+msgstr "read [-ers] [-a matriz] [-d delim] [-i texto] [-n ncars] [-N ncars] [-p prompt] [-t timeout] [-u fd] [nome ...]"
 
 #: builtins.c:138
 msgid "return [n]"
@@ -2030,19 +2102,19 @@ msgstr "return [n]"
 
 #: builtins.c:140
 msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr ""
+msgstr "set [-abefhkmnptuvxBCHP] [-o nome-opción] [--] [arg ...]"
 
 #: builtins.c:142
 msgid "unset [-f] [-v] [name ...]"
-msgstr ""
+msgstr "unset [-f] [-v] [nome ...]"
 
 #: builtins.c:144
 msgid "export [-fn] [name[=value] ...] or export -p"
-msgstr ""
+msgstr "export [-fn] [nome[=valor] ...] ou export -p"
 
 #: builtins.c:146
 msgid "readonly [-aAf] [name[=value] ...] or readonly -p"
-msgstr ""
+msgstr "readonly [-aAf] [nome[=valor] ...] ou readonly -p"
 
 #: builtins.c:148
 msgid "shift [n]"
@@ -2050,43 +2122,43 @@ msgstr "shift [n]"
 
 #: builtins.c:150
 msgid "source filename [arguments]"
-msgstr ""
+msgstr "source ficheiro [arguments]"
 
 #: builtins.c:152
 msgid ". filename [arguments]"
-msgstr ""
+msgstr ". ficheiro [argumentos]"
 
 #: builtins.c:155
 msgid "suspend [-f]"
-msgstr ""
+msgstr "suspend [-f]"
 
 #: builtins.c:158
 msgid "test [expr]"
-msgstr ""
+msgstr "test [expresión]"
 
 #: 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] id_sinal ...]"
 
 #: builtins.c:166
 msgid "type [-afptP] name [name ...]"
-msgstr ""
+msgstr "type [-afptP] nome [nome ...]"
 
 #: builtins.c:169
 msgid "ulimit [-SHacdefilmnpqrstuvx] [limit]"
-msgstr ""
+msgstr "ulimit [-SHacdefilmnpqrstuvx] [límite]"
 
 #: builtins.c:172
 msgid "umask [-p] [-S] [mode]"
-msgstr ""
+msgstr "umask [-p] [-S] [modo]"
 
 #: builtins.c:175
 msgid "wait [id]"
@@ -2094,75 +2166,75 @@ 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 NOME [in PALABRAS ... ] ; do ORDES; done"
 
 #: builtins.c:184
 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done"
-msgstr ""
+msgstr "for (( exp1; exp2; exp3 )); do ORDES; done"
 
 #: builtins.c:186
 msgid "select NAME [in WORDS ... ;] do COMMANDS; done"
-msgstr ""
+msgstr "select NOME [in PALABRAS ... ;] do ORDES; 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 PALABRA in [PATRÓN [| PATRÓN]...) ORDES ;;]... esac"
 
 #: builtins.c:192
 msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi"
-msgstr ""
+msgstr "if ORDES; then ORDES; [ elif ORDES; then ORDES; ]...[ else ORDES; ] fi"
 
 #: builtins.c:194
 msgid "while COMMANDS; do COMMANDS; done"
-msgstr ""
+msgstr "while ORDES; do ORDES; done"
 
 #: builtins.c:196
 msgid "until COMMANDS; do COMMANDS; done"
-msgstr ""
+msgstr "until ORDES; do ORDES; done"
 
 #: builtins.c:198
 msgid "coproc [NAME] command [redirections]"
-msgstr ""
+msgstr "coproc [NOME] orden [redireccións]"
 
 #: builtins.c:200
 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }"
-msgstr ""
+msgstr "function nome { ORDES ; } ou nome () { ORDES ; }"
 
 #: builtins.c:202
 msgid "{ COMMANDS ; }"
-msgstr ""
+msgstr "{ ORDES ; }"
 
 #: builtins.c:204
 msgid "job_spec [&]"
-msgstr ""
+msgstr "job_spec [&]"
 
 #: builtins.c:206
 msgid "(( expression ))"
-msgstr ""
+msgstr "(( expresión ))"
 
 #: builtins.c:208
 msgid "[[ expression ]]"
-msgstr ""
+msgstr "[[ expresión ]]"
 
 #: builtins.c:210
 msgid "variables - Names and meanings of some shell variables"
-msgstr ""
+msgstr "variables - Nomes e significados de algunhas variábeis de shell"
 
 #: builtins.c:213
 msgid "pushd [-n] [+N | -N | dir]"
-msgstr ""
+msgstr "pushd [-n] [+N | -N | dir]"
 
 #: builtins.c:217
 msgid "popd [-n] [+N | -N]"
-msgstr ""
+msgstr "popd [-n] [+N | -N]"
 
 #: builtins.c:221
 msgid "dirs [-clpv] [+N] [-N]"
@@ -2170,31 +2242,31 @@ msgstr "dirs [-clpv] [+N] [-N]"
 
 #: builtins.c:224
 msgid "shopt [-pqsu] [-o] [optname ...]"
-msgstr ""
+msgstr "shopt [-pqsu] [-o] [nome_opción ...]"
 
 #: builtins.c:226
 msgid "printf [-v var] format [arguments]"
-msgstr ""
+msgstr "printf [-v var] formato [argumentos]"
 
 #: 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 ""
+msgstr "complete [-abcdefgjksuv] [-pr] [-DE] [-o opción] [-A acción] [-G patglob] [-W listapalabras] [-F función] [-C orde] [-X patfiltro] [-P prefixo] [-S sufixo] [nome ...]"
 
 #: 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 ""
+msgstr "compgen [-abcdefgjksuv] [-o opción]  [-A acción] [-G patglob] [-W listapalabras] [-F función] [-C orde] [-X patfiltro] [-P prefixo] [-S sufixo] [palabra]"
 
 #: builtins.c:237
 msgid "compopt [-o|+o option] [-DE] [name ...]"
-msgstr ""
+msgstr "compopt [-o|+o opción] [-DE] [nome ...]"
 
 #: builtins.c:240
 msgid "mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
-msgstr ""
+msgstr "mapfile [-n conta] [-O orixe] [-s conta] [-t] [-u df] [-C chamada] [-c quantum] [matriz]"
 
 #: builtins.c:242
 msgid "readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
-msgstr ""
+msgstr "readarray [-n conta] [-O orixe] [-s conta] [-t] [-u df] [-C chamada] [-c quantum] [matriz]"
 
 #: builtins.c:254
 msgid ""
@@ -2214,6 +2286,22 @@ msgid ""
 "    alias returns true unless a NAME is supplied for which no alias has been\n"
 "    defined."
 msgstr ""
+"Define ou mostra aliases.\n"
+"    \n"
+"    `alias' sen argumentos mostra a lista de aliases na forma\n"
+"    reutilizábel `alias NOMBRE=VALOR' na saída estándar.\n"
+"    \n"
+"    De outra maneira, defínese un alias por cada NOME cuxo VALOR se\n"
+"    forneza.  Un espazo final en VALOR causa que se revise\n"
+"    a seguinte palabra para substitución de alias cando se expande\n"
+"    o alias.\n"
+"    \n"
+"    Opciones:\n"
+"      -p\tMuestra todos los aliases definidos en un formato reusable\n"
+"    \n"
+"    Estado de salida:\n"
+"    alias devuelve verdadero a menos que se de un NOMBRE para el cual\n"
+"    no se haya definido ningún alias."
 
 #: builtins.c:276
 msgid ""
@@ -2224,6 +2312,11 @@ msgid ""
 "    \n"
 "    Return success unless a NAME is not an existing alias."
 msgstr ""
+"Borra cada NOME da lista de alias definidos.\n"
+"    \n"
+"    Opcións:\n"
+"      -a\telimina todas as definicións de alias.\n"
+"    Devovle verdadero a menos que un NOME non sexa un alias existente."
 
 #: builtins.c:289
 msgid ""
@@ -2259,6 +2352,44 @@ msgid ""
 "    Exit Status:\n"
 "    bind returns 0 unless an unrecognized option is given or an error occurs."
 msgstr ""
+"Estabelece secuencias de teclas Readline e variábeis.\n"
+"\n"
+"    Asigna unha secuencia de teclas a unha función Readline ou a unha macro, ou\n"
+"    estabelece unha variábel Readline.  A sintaxe dos argumentos que\n"
+"    non son opcións é equivalente á que se encontra en ~/.inputrc,\n"
+"    pero débese pasar como un só argumento:\n"
+"    p.e., bind '\"\\C-x\\C-r\": re-read-init-file'.\n"
+"    \n"
+"    opcións:\n"
+"    \n"
+"      -m  comb_teclas    Usa COMB_TECLAS como a combinación de teclas pola\n"
+"                         duración desta orde.  Os nomes de combinacións\n"
+"                         de teclas aceptábeis son emacs, emacs-standard,\n"
+"                         emacs-meta, emacs-ctlx, vi, vi-move, vi-command e\n"
+"                         vi-insert.\n"
+"      -l                 Enlista os nomes das funcións.\n"
+"      -P                 Enlista os nomes das funcións e asignacións.\n"
+"      -p                 Enlista as funcións e asignacións nunha forma que\n"
+"                         se pode reusar como entrada.\n"
+"      -S                 Enlista as secuencias de teclas que invocan macros\n"
+"                         e os seus valores.\n"
+"      -s                 Enlista as secuencias de teclas que invocan macros\n"
+"                         e os seus valores nunha forma que se poden reusar como\n"
+"                         entrada.\n"
+"      -V                 Enlista os nomes de variábeis e valores.\n"
+"      -v                 Enlista os nomes de variábeis e valores nunha\n"
+"                         forma que se pode reusar como entrada.\n"
+"      -q nome-funcion    Pregunta qué teclas invocan a función nomeada.\n"
+"      -u nome-función    Borra todas as teclas que están ligadas\n"
+"                         á función nomeada.\n"
+"      -r secteclas       Borra a asignación para a SECTECLAS.\n"
+"      -f fichero         Lee as asignacións de teclas do FICHERO.\n"
+"      -x secteclas:orde-shell\tCausa que se execute a ORDE-SHELL cando\n"
+"    \t\t\t\tse introduce a SECTECLAS.\n"
+"    \n"
+"    Estado de saída:\n"
+"    bind devolve 0 a menos que se presente unha opción descoñecida ou se\n"
+"    se produza un erro."
 
 #: builtins.c:326
 msgid ""
@@ -2270,6 +2401,13 @@ msgid ""
 "    Exit Status:\n"
 "    The exit status is 0 unless N is not greater than or equal to 1."
 msgstr ""
+"Termina ciclos for, while o until.\n"
+"    \n"
+"    Termina un ciclo FOR, WHILE o UNTIL.  Se se especifica N, remata\n"
+"    N ciclos anidados.\n"
+"    \n"
+"    Estado de saída:\n"
+"    O estado de saída é 0 a menos que N non sexa maior ou igual a 1."
 
 #: builtins.c:338
 msgid ""
@@ -2281,6 +2419,13 @@ msgid ""
 "    Exit Status:\n"
 "    The exit status is 0 unless N is not greater than or equal to 1."
 msgstr ""
+"Continúa iteracións for, while o until\n"
+"    \n"
+"    Continúa a seguinte iteración do ciclo FOR, WHILE ou UNTIL\n"
+"    circundante.  Se se especifica N, retoma no N-ésimo ciclo circundante.\n"
+"    \n"
+"    Estado de Saída:\n"
+"    O estado de salida é 0 a menos que N non sexa maior ou igual a 1."
 
 #: builtins.c:350
 msgid ""
@@ -2294,6 +2439,16 @@ msgid ""
 "    Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n"
 "    not a shell builtin.."
 msgstr ""
+"Executa ordes internas do shell\n"
+"    \n"
+"    Executa a ORDEN-INTERNA-SHELL cos argumentos ARGs sen realizar\n"
+"    a busca interna de ordes.  Isto é útil cando desexa reimplementar\n"
+"    unha orde interna do shell como unha función de shell, pero necesita\n"
+"    executar a orde interna dentro da función.\n"
+"    \n"
+"    Estado de Saída:\n"
+"    Devolve o estado de saída da ORDE-INTERNA-SHELL, ou falso se a\n"
+"    ORDE-INTERNA-SHELL non é unha orde interna de shell."
 
 #: builtins.c:365
 msgid ""
@@ -2310,6 +2465,18 @@ msgid ""
 "    Returns 0 unless the shell is not executing a shell function or EXPR\n"
 "    is invalid."
 msgstr ""
+"Devolve o contexto da chamada a subrutina actual.\n"
+"    \n"
+"    Sen EXPR, devolve \"$liña $nomeficheiro\".  Con EXPR, devolve\n"
+"    \"$liña $subrutina $nomeficheiro\"; esta información adicional\n"
+"    pódese usar para fornecer un volcado de pila.\n"
+"    \n"
+"    O valor de EXPR indica cantos marcos de chamada se debe retroceder\n"
+"    antes do actual; o marco inicial é o marco 0.\n"
+"    \n"
+"    Estado de Saída:\n"
+"    Devolve 0 a menos que o shell non estea executando unha función de shell\n"
+"    ou EXPR sexa non válida."
 
 #: builtins.c:383
 msgid ""
@@ -2356,6 +2523,18 @@ msgid ""
 "    Returns 0 unless an invalid option is given or the current directory\n"
 "    cannot be read."
 msgstr ""
+"Mostra o nome do directorio de traballo actual.\n"
+"    \n"
+"    Opcións:\n"
+"      -L\tmostra o valor de $PWD se nomea ao directorio de\n"
+"    \ttraballo actual\n"
+"      -P\tmostra o directorio físico, sen ligazóns simbólicas\n"
+"    \n"
+"    Por defecto, `pwd' comportase como se se especificara `-L'.\n"
+"    \n"
+"    Estado de Saída:\n"
+"    Devolve 0 a menos que se dea unha opción non válida ou non se poida leer\n"
+"    o directorio actual."
 
 #: builtins.c:431
 msgid ""
@@ -2366,6 +2545,12 @@ msgid ""
 "    Exit Status:\n"
 "    Always succeeds."
 msgstr ""
+"Orde nula.\n"
+"    \n"
+"    Sen efecto; a orde non fai nada.\n"
+"    \n"
+"    Estado de Saída:\n"
+"    Sempre con éxito."
 
 #: builtins.c:442
 msgid ""
@@ -2374,6 +2559,10 @@ msgid ""
 "    Exit Status:\n"
 "    Always succeeds."
 msgstr ""
+"Devolve un resultado con éxito.\n"
+"    \n"
+"    Estado de salida:\n"
+"    Sempre con éxito."
 
 #: builtins.c:451
 msgid ""
@@ -2382,6 +2571,10 @@ msgid ""
 "    Exit Status:\n"
 "    Always fails."
 msgstr ""
+"Devolve un resultado sen éxito.\n"
+"    \n"
+"    Estado de saída:\n"
+"    Sempre falla."
 
 #: builtins.c:460
 msgid ""
@@ -2444,6 +2637,9 @@ msgid ""
 "    \n"
 "    Obsolete.  See `help declare'."
 msgstr ""
+"Estabelece valores de variábeis e atributos.\n"
+"    \n"
+"    Obsoleto.  Consulte `help declare'."
 
 #: builtins.c:525
 msgid ""
@@ -2459,6 +2655,17 @@ msgid ""
 "    Returns success unless an invalid option is supplied, an error occurs,\n"
 "    or the shell is not executing a function."
 msgstr ""
+"Define variábeis locais.\n"
+"    \n"
+"    Crea unha variábel local chamada NOME, e dalle un VALOR.  OPCIÓN pode\n"
+"    ser calquera opción aceptada por `declare'.\n"
+"    \n"
+"    As variábeis locais só se pueden usar nunha función; son visibles\n"
+"    só na función onde se definen e os seus fillos.\n"
+"    \n"
+"    Estado de Saída:\n"
+"    Devolve con éxito a menos que se dea unha opción non válida, se produza\n"
+"    un erro, ou o shell non estea executando unha función."
 
 #: builtins.c:542
 msgid ""
@@ -2541,6 +2748,13 @@ msgid ""
 "    Exit Status:\n"
 "    Returns exit status of command or success if command is null."
 msgstr ""
+"Executa argumentos como unha orde de shell.\n"
+"    \n"
+"    Combina os ARGumentos nunha soa cadena, usa o resultado como entrada\n"
+"    para o shell, e executa as órdenes resultantes.\n"
+"    \n"
+"    Estado de saída:\n"
+"    Devolve o estado de saida da orde ou éxito se a orde é nula."
 
 #: builtins.c:631
 msgid ""
@@ -2610,6 +2824,10 @@ msgid ""
 "    Exits the shell with a status of N.  If N is omitted, the exit status\n"
 "    is that of the last command executed."
 msgstr ""
+"Remata a shell.\n"
+"    \n"
+"    Termina o shell cun estado de N.  Se se omite N, o estado de saída\n"
+"    é o mismo da última orde executada."
 
 #: builtins.c:703
 msgid ""
@@ -2618,6 +2836,10 @@ msgid ""
 "    Exits a login shell with exit status N.  Returns an error if not executed\n"
 "    in a login shell."
 msgstr ""
+"Termina un shell de entrada.\n"
+"    \n"
+"    Termina un shell de entrada cun estado de saída de N. Devolve un\n"
+"    erro se non se executa nunha shell de entrada."
 
 #: builtins.c:713
 msgid ""
@@ -2657,6 +2879,14 @@ msgid ""
 "    Exit Status:\n"
 "    Status of command placed in foreground, or failure if an error occurs."
 msgstr ""
+"Move o trabañño ao primeiro plano.\n"
+"    \n"
+"    Localiza o traballo identificado con IDTRABALLO no primeiro plano, e\n"
+"    faino o traballo actual.  Se IDTRABALLO non está presente, úsase\n"
+"    a noción do shell do traballo actual.\n"
+"    \n"
+"    Estado de Saída:\n"
+"    O estado da orde localizada en primeiro plano, ou falla se sucede un erro."
 
 #: builtins.c:758
 msgid ""
@@ -3087,6 +3317,17 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
+"Suspende a execución do shell.\n"
+"    \n"
+"    Suspende a execución deste shell até que recibe un sinal SIGCONT.\n"
+"    Os shells de entrada non se poden suspender, a menos que sexan forzados.\n"
+"    \n"
+"    Opcións:\n"
+"      -f\tforza a suspensión, aínda se o shell é un shell de entrada\n"
+"    \n"
+"    Estado de Saída:\n"
+"    Devolve con éxito a menos que non estea activo o control de traballos o\n"
+"    se produza un erro."
 
 #: builtins.c:1231
 msgid ""
@@ -3174,6 +3415,10 @@ msgid ""
 "    This is a synonym for the \"test\" builtin, but the last argument must\n"
 "    be a literal `]', to match the opening `['."
 msgstr ""
+"Evalúa unha expresión condicional.\n"
+"    \n"
+"    Este é un sinónimo para a orde interna \"test\", pero o último\n"
+"    argumento debe ser un `]' literal, que coincida co `[' inicial."
 
 #: builtins.c:1320
 msgid ""
@@ -3185,6 +3430,13 @@ msgid ""
 "    Exit Status:\n"
 "    Always succeeds."
 msgstr ""
+"Mostra os tempos de proceso.\n"
+"    \n"
+"    Mostra os tempos de usuario e sistema acumulados polo shell e todos\n"
+"    os seus procesos fillos.\n"
+"    \n"
+"    Estado de saída:\n"
+"    Sempre con éxito."
 
 #: builtins.c:1332
 msgid ""
@@ -3338,6 +3590,15 @@ msgid ""
 "    Returns the status of ID; fails if ID is invalid or an invalid option is\n"
 "    given."
 msgstr ""
+"Agarda a terminación do traballo e devolve o estado de saída.\n"
+"    \n"
+"    Espera ao proceso especificado e reporta o seu estado de saída.  Se\n"
+"    non se fornece un PID, agarda a todos os procesos fillo activos,\n"
+"    e o código de devolución é cero.  PID debe ser un ID de proceso.\n"
+"    \n"
+"    Estado de Saída:\n"
+"    Devolve o estado de ID; falla se ID non é válido ou se se fornece unha\n"
+"    opción non válida."
 
 #: builtins.c:1497
 msgid ""
@@ -3351,6 +3612,15 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"Executa ordes por cada membro nunha lista.\n"
+"    \n"
+"    O ciclo `for' executa unha secuencia de ordes para cada membro nunha\n"
+"    lista de elementos.  Se `in PALABRAS ...;' non está presente,\n"
+"    entón asúmese `in \"$@\"'.  Para cada elemento en PALABRAS,\n"
+"    defínese NOME como ese elemento, e execútanse as ÓRDENES.\n"
+"    \n"
+"    Estado de Saída:\n"
+"    Devuelve o estado da última orden executada."
 
 #: builtins.c:1511
 msgid ""
@@ -3368,6 +3638,19 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"Aritmética para un ciclo.\n"
+"    \n"
+"    Equivalente a\n"
+"    \t(( EXP1 ))\n"
+"    \twhile (( EXP2 )); do\n"
+"    \t\tORDES\n"
+"    \t\t(( EXP3 ))\n"
+"    \tdone\n"
+"    EXP1, EXP2, e EXP3 son expresións aritméticas.  Se se omite\n"
+"    calquera expresión, compórtase como se se evaluara a 1.\n"
+"    \n"
+"    Estado de saída:\n"
+"    Devolve o estado da última orde executada."
 
 #: builtins.c:1529
 msgid ""
@@ -3415,6 +3698,13 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"Executa ordes en base á coincidencia de patróns.\n"
+"    \n"
+"    Executa ÓRDENES selectivamente baseado en coincidencias da PALABRA\n"
+"    co PATRÓN. Emprégase `|' para separar patróns múltiples.\n"
+"    \n"
+"    Estado de Saída:\n"
+"    Devolve o estado da última orde executada."
 
 #: builtins.c:1579
 msgid ""
@@ -3442,6 +3732,13 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"Ejecuta ordes mentres unha proba teña éxito.\n"
+"    \n"
+"    Expande e executa ORDES mentres a orde final nas ÓRDENES\n"
+"    `while' teña un estado de saída de cero.\n"
+"    \n"
+"    Estado de Saída:\n"
+"    Devolve o estado da última orde executada."
 
 #: builtins.c:1608
 msgid ""
@@ -3453,6 +3750,13 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"Executa ordes mentres unha proba non teña éxito.\n"
+"    \n"
+"    Expande e executa ORDES mentres a orde final nas ORDES\n"
+"    `until' teña un estado de saída que non sexa cero.\n"
+"    \n"
+"    Estado de Saída:\n"
+"    Devolve o estado da última orde executada."
 
 #: builtins.c:1620
 msgid ""
@@ -3466,6 +3770,15 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the exit status of COMMAND."
 msgstr ""
+"Crea un coproceso chamado NOME.\n"
+"    \n"
+"    Executa a ORDE asíncronamente, coa saída estándar e a entrada\n"
+"    estándar da orde contectada a través dunha tubería aos descritores\n"
+"    de ficheiro asignados aos índices 0 e 1 dunha variábel de matriz NOME\n"
+"    no shell en execución.  O nome por omisión é \"COPROC\".\n"
+"    \n"
+"    Estado de Saída:\n"
+"    Devolve o estado de saída da ORDE."
 
 #: builtins.c:1634
 msgid ""
@@ -3490,6 +3803,13 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"Agrupa ordes como unha unidade.\n"
+"    \n"
+"    Executa un conxunto de ordes nun grupo.  Esta é unha forma de\n"
+"    redirixir un conxunto completo de ordes.\n"
+"    \n"
+"    Estado de Saída:\n"
+"    Devolve o estado da última orde executada."
 
 #: builtins.c:1660
 msgid ""
@@ -3515,6 +3835,13 @@ msgid ""
 "    Exit Status:\n"
 "    Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise."
 msgstr ""
+"Avalí unha expresión aritmética.\n"
+"    \n"
+"    Avalíase a EXPRESIÓN de acordo ás regras de evaluación\n"
+"    aritmética.  Equivalente a \"let EXPRESIÓN\".\n"
+"    \n"
+"    Estado de Saída:\n"
+"    Devolve 1 se a EXPRESIÓN avalía a 0; devovle 0 de outra maneira."
 
 #: builtins.c:1687
 msgid ""
@@ -3699,6 +4026,22 @@ msgid ""
 "    Returns success if OPTNAME is enabled; fails if an invalid option is\n"
 "    given or OPTNAME is disabled."
 msgstr ""
+"Activa e desactiva opcións de shell.\n"
+"    \n"
+"    Cambia a configuración de cada opción de shell NOME_OPCIÓN. Sen\n"
+"    algunha opción como argumento, mostra todas as opcións de shell cunha\n"
+"    indicación se está activa ou non.\n"
+"    \n"
+"    Opcións:\n"
+"      -o\trestrinxe NOME_OPCIÓN a aqueles definidos con `set -o'\n"
+"      -p\tmostra cada opción de shell cun indicador do seu estado\n"
+"      -q\tsuprime a saída\n"
+"      -s\tactiva (estabelece) cada NOME_OPCIÓN\n"
+"      -u\tdesactiva (borra) cada NOME_OPCIÓN\n"
+"    \n"
+"    Estado de Saída:\n"
+"    Devolve con éxito se se activa NOME_OPCIÓN; falla se se fornece\n"
+"    unha opción non válida ou NOME_OPCIÓN está desactivado."
 
 #: builtins.c:1884
 msgid ""
@@ -3763,6 +4106,15 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
+"Mostra os posíbeis completados dependendo das opcións.\n"
+"    \n"
+"    Serve para usarse desde unha función de shell que xere completados\n"
+"    posíbeis.  Se se fornece o argumento opcional PALABRA, xéranse\n"
+"    as coincidencias contra PALABRA.\n"
+"    \n"
+"    Estado de Saída:\n"
+"    Devolve con éxito a menos que se forneza unha opción non válida o\n"
+"    se produza un erro."
 
 #: builtins.c:1956
 msgid ""
@@ -3831,3 +4183,6 @@ msgid ""
 "    \n"
 "    A synonym for `mapfile'."
 msgstr ""
+"Lee liñas dun fichero nunha variábel de matriz.\n"
+"    \n"
+"    Un sinónimo de `mapfile'."
index ef09a80de44d5e710d882371b0cd39f46e6c3037..13fccbd2d392c378b506923acff89520f2293555 100644 (file)
@@ -4666,12 +4666,18 @@ sv_locale (name)
      char *name;
 {
   char *v;
+  int r;
 
   v = get_string_value (name);
   if (name[0] == 'L' && name[1] == 'A')        /* LANG */
-    set_lang (name, v);
+    r = set_lang (name, v);
   else
-    set_locale_var (name, v);          /* LC_*, TEXTDOMAIN* */
+    r = set_locale_var (name, v);              /* LC_*, TEXTDOMAIN* */
+
+#if 1
+  if (r == 0 && posixly_correct)
+    last_command_exit_value = 1;
+#endif
 }
 
 #if defined (ARRAY_VARS)