diff --git a/CWRU/CWRU.chlog b/CWRU/CWRU.chlog
index ad5d27d9..3ae3d66b 100644
--- a/CWRU/CWRU.chlog
+++ b/CWRU/CWRU.chlog
@@ -9294,3 +9294,11 @@ sig.c
the return value from sigaction; a minor optimization that saves a
system call or two
+ 1/5/2021
+ --------
+builtins/declare.def
+ - declare_internal: make some option combinations that don't make
+ sense errors (e.g., -f and -a/-A/-i/-n)
+ - declare_internal: if we build a new variable name by expanding the
+ value of a nameref variable, make sure to chop the `+' in a `+='
+ off before going on
diff --git a/MANIFEST b/MANIFEST
index 851bbda2..7a73554f 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1214,6 +1214,7 @@ tests/nameref18.sub f
tests/nameref19.sub f
tests/nameref20.sub f
tests/nameref21.sub f
+tests/nameref22.sub f
tests/nameref.right f
tests/new-exp.tests f
tests/new-exp1.sub f
diff --git a/builtins/declare.def b/builtins/declare.def
index 21e4516d..5a0fc615 100644
--- a/builtins/declare.def
+++ b/builtins/declare.def
@@ -1,7 +1,7 @@
This file is declare.def, from which is created declare.c.
It implements the builtins "declare" and "local" in Bash.
-Copyright (C) 1987-2020 Free Software Foundation, Inc.
+Copyright (C) 1987-2021 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
@@ -306,6 +306,24 @@ declare_internal (list, local_var)
return (sh_chkwrite (any_failed ? EXECUTION_FAILURE : EXECUTION_SUCCESS));
}
+ /* Some option combinations that don't make any sense */
+ if ((flags_on & att_function) && (flags_on & (att_array|att_assoc|att_integer|att_nameref)))
+ {
+ char *optchar;
+
+ if (flags_on & att_nameref)
+ optchar = "-n";
+ else if (flags_on & att_integer)
+ optchar = "-i";
+ else if (flags_on & att_assoc)
+ optchar = "-A";
+ else if (flags_on & att_array)
+ optchar = "-a";
+
+ sh_invalidopt (optchar);
+ return (EXECUTION_FAILURE);
+ }
+
#define NEXT_VARIABLE() free (name); list = list->next; continue
/* There are arguments left, so we are making variables. */
@@ -698,8 +716,8 @@ restart_new_var_name:
assign_error++;
NEXT_VARIABLE ();
}
- name[offset] = '\0';
- value = name + namelen;
+ name[(aflags & ASS_APPEND) ? offset - 1 : offset] = '\0';
+ value = name + namelen; /* XXX name + offset + 1? */
}
free (oldname);
diff --git a/builtins/declare.def.1 b/builtins/declare.def.1
new file mode 100644
index 00000000..afe37e9e
--- /dev/null
+++ b/builtins/declare.def.1
@@ -0,0 +1,1040 @@
+This file is declare.def, from which is created declare.c.
+It implements the builtins "declare" and "local" in Bash.
+
+Copyright (C) 1987-2021 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 .
+
+$PRODUCES declare.c
+
+$BUILTIN declare
+$FUNCTION declare_builtin
+$SHORT_DOC declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]
+Set variable values and attributes.
+
+Declare variables and give them attributes. If no NAMEs are given,
+display the attributes and values of all variables.
+
+Options:
+ -f restrict action or display to function names and definitions
+ -F restrict display to function names only (plus line number and
+ source file when debugging)
+ -g create global variables when used in a shell function; otherwise
+ ignored
+ -I if creating a local variable, inherit the attributes and value
+ of a variable with the same name at a previous scope
+ -p display the attributes and value of each NAME
+
+Options which set attributes:
+ -a to make NAMEs indexed arrays (if supported)
+ -A to make NAMEs associative arrays (if supported)
+ -i to make NAMEs have the `integer' attribute
+ -l to convert the value of each NAME to lower case on assignment
+ -n make NAME a reference to the variable named by its value
+ -r to make NAMEs readonly
+ -t to make NAMEs have the `trace' attribute
+ -u to convert the value of each NAME to upper case on assignment
+ -x to make NAMEs export
+
+Using `+' instead of `-' turns off the given attribute.
+
+Variables with the integer attribute have arithmetic evaluation (see
+the `let' command) performed when the variable is assigned a value.
+
+When used in a function, `declare' makes NAMEs local, as with the `local'
+command. The `-g' option suppresses this behavior.
+
+Exit Status:
+Returns success unless an invalid option is supplied or a variable
+assignment error occurs.
+$END
+
+$BUILTIN typeset
+$FUNCTION declare_builtin
+$SHORT_DOC typeset [-aAfFgiIlnrtux] [-p] name[=value] ...
+Set variable values and attributes.
+
+A synonym for `declare'. See `help declare'.
+$END
+
+#include
+
+#if defined (HAVE_UNISTD_H)
+# ifdef _MINIX
+# include
+# endif
+# include
+#endif
+
+#include
+
+#include "../bashansi.h"
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "../flags.h"
+#include "common.h"
+#include "builtext.h"
+#include "bashgetopt.h"
+
+static SHELL_VAR *declare_find_variable PARAMS((const char *, int, int));
+static int declare_internal PARAMS((register WORD_LIST *, int));
+
+/* Declare or change variable attributes. */
+int
+declare_builtin (list)
+ register WORD_LIST *list;
+{
+ return (declare_internal (list, 0));
+}
+
+$BUILTIN local
+$FUNCTION local_builtin
+$SHORT_DOC local [option] name[=value] ...
+Define local variables.
+
+Create a local variable called NAME, and give it VALUE. OPTION can
+be any option accepted by `declare'.
+
+Local variables can only be used within a function; they are visible
+only to the function where they are defined and its children.
+
+Exit Status:
+Returns success unless an invalid option is supplied, a variable
+assignment error occurs, or the shell is not executing a function.
+$END
+int
+local_builtin (list)
+ register WORD_LIST *list;
+{
+ /* Catch a straight `local --help' before checking function context */
+ if (list && list->word && STREQ (list->word->word, "--help"))
+ {
+ builtin_help ();
+ return (EX_USAGE);
+ }
+
+ if (variable_context)
+ return (declare_internal (list, 1));
+ else
+ {
+ builtin_error (_("can only be used in a function"));
+ return (EXECUTION_FAILURE);
+ }
+}
+
+#if defined (ARRAY_VARS)
+# define DECLARE_OPTS "+acfgilnprtuxAFGI"
+#else
+# define DECLARE_OPTS "+cfgilnprtuxFGI"
+#endif
+
+static SHELL_VAR *
+declare_find_variable (name, mkglobal, chklocal)
+ const char *name;
+ int mkglobal, chklocal;
+{
+ SHELL_VAR *var;
+
+ if (mkglobal == 0)
+ return (find_variable (name));
+ else if (chklocal)
+ {
+ var = find_variable (name);
+ if (var && local_p (var) && var->context == variable_context)
+ return var;
+ return (find_global_variable (name));
+ }
+ else
+ return (find_global_variable (name));
+}
+
+/* Build a new string
+ NAME[SUBSCRIPT][[+]=VALUE]
+ from expanding a nameref into NAME */
+static char *
+declare_build_newname (name, subscript_start, value, offset, aflags)
+ char *name, *subscript_start, *value;
+ int offset, aflags;
+{
+ size_t namelen, savelen;
+ char *ret;
+
+ savelen = namelen = strlen (name);
+ if (subscript_start)
+ {
+ *subscript_start = '['; /* ] */
+ namelen += strlen (subscript_start);
+ }
+ ret = xmalloc (namelen + 2 + strlen (value) + 1);
+ strcpy (ret, name);
+ if (subscript_start)
+ strcpy (ret + savelen, subscript_start);
+ if (offset)
+ {
+ if (aflags & ASS_APPEND)
+ ret[namelen++] = '+';
+ ret[namelen++] = '=';
+ if (value && *value)
+ strcpy (ret + namelen, value);
+ else
+ ret[namelen] = '\0';
+ }
+
+ return (ret);
+}
+
+/* The workhorse function. */
+static int
+declare_internal (list, local_var)
+ register WORD_LIST *list;
+ int local_var;
+{
+ int flags_on, flags_off, *flags;
+ int any_failed, assign_error, pflag, nodefs, opt, onref, offref;
+ int mkglobal, chklocal, inherit_flag;
+ char *t, *subscript_start;
+ SHELL_VAR *var, *refvar, *v;
+ FUNCTION_DEF *shell_fn;
+
+ flags_on = flags_off = any_failed = assign_error = pflag = nodefs = 0;
+ mkglobal = chklocal = inherit_flag = 0;
+ refvar = (SHELL_VAR *)NULL;
+ reset_internal_getopt ();
+ while ((opt = internal_getopt (list, DECLARE_OPTS)) != -1)
+ {
+ flags = list_opttype == '+' ? &flags_off : &flags_on;
+
+ /* If you add options here, see whether or not they need to be added to
+ the loop in subst.c:shell_expand_word_list() */
+ switch (opt)
+ {
+ case 'a':
+#if defined (ARRAY_VARS)
+ *flags |= att_array;
+ break;
+#else
+ builtin_usage ();
+ return (EX_USAGE);
+#endif
+ case 'A':
+#if defined (ARRAY_VARS)
+ *flags |= att_assoc;
+ break;
+#else
+ builtin_usage ();
+ return (EX_USAGE);
+#endif
+ case 'p':
+/* if (local_var == 0) */
+ pflag++;
+ break;
+ case 'F':
+ nodefs++;
+ *flags |= att_function;
+ break;
+ case 'f':
+ *flags |= att_function;
+ break;
+ case 'G':
+ if (flags == &flags_on)
+ chklocal = 1;
+ /*FALLTHROUGH*/
+ case 'g':
+ if (flags == &flags_on)
+ mkglobal = 1;
+ break;
+ case 'i':
+ *flags |= att_integer;
+ break;
+ case 'n':
+ *flags |= att_nameref;
+ break;
+ case 'r':
+ *flags |= att_readonly;
+ break;
+ case 't':
+ *flags |= att_trace;
+ break;
+ case 'x':
+ *flags |= att_exported;
+ array_needs_making = 1;
+ break;
+#if defined (CASEMOD_ATTRS)
+# if defined (CASEMOD_CAPCASE)
+ case 'c':
+ *flags |= att_capcase;
+ if (flags == &flags_on)
+ flags_off |= att_uppercase|att_lowercase;
+ break;
+# endif
+ case 'l':
+ *flags |= att_lowercase;
+ if (flags == &flags_on)
+ flags_off |= att_capcase|att_uppercase;
+ break;
+ case 'u':
+ *flags |= att_uppercase;
+ if (flags == &flags_on)
+ flags_off |= att_capcase|att_lowercase;
+ break;
+#endif /* CASEMOD_ATTRS */
+ case 'I':
+ inherit_flag = MKLOC_INHERIT;
+ break;
+ CASE_HELPOPT;
+ default:
+ builtin_usage ();
+ return (EX_USAGE);
+ }
+ }
+
+ list = loptend;
+
+ /* If there are no more arguments left, then we just want to show
+ some variables. */
+ if (list == 0) /* declare -[aAfFirtx] */
+ {
+ /* Show local variables defined at this context level if this is
+ the `local' builtin. */
+ if (local_var)
+ show_local_var_attributes (0, nodefs); /* XXX - fix up args later */
+ else if (pflag && (flags_on == 0 || flags_on == att_function))
+ show_all_var_attributes (flags_on == 0, nodefs);
+ else if (flags_on == 0)
+ return (set_builtin ((WORD_LIST *)NULL));
+ else
+ set_or_show_attributes ((WORD_LIST *)NULL, flags_on, nodefs);
+
+ return (sh_chkwrite (EXECUTION_SUCCESS));
+ }
+
+ if (pflag) /* declare -p [-aAfFirtx] name [name...] */
+ {
+ for (any_failed = 0; list; list = list->next)
+ {
+ if (flags_on & att_function)
+ pflag = show_func_attributes (list->word->word, nodefs);
+ else if (local_var)
+ pflag = show_localname_attributes (list->word->word, nodefs);
+ else
+ pflag = show_name_attributes (list->word->word, nodefs);
+ if (pflag)
+ {
+ sh_notfound (list->word->word);
+ any_failed++;
+ }
+ }
+ return (sh_chkwrite (any_failed ? EXECUTION_FAILURE : EXECUTION_SUCCESS));
+ }
+
+ /* Some option combinations that don't make any sense */
+ if ((flags_on & att_function) && (flags_on & (att_array|att_assoc|att_integer|att_nameref)))
+ {
+ char *optchar;
+
+ if (flags_on & att_nameref)
+ optchar = "-n";
+ else if (flags_on & att_integer)
+ optchar = "-i";
+ else if (flags_on & att_assoc)
+ optchar = "-A";
+ else if (flags_on & att_array)
+ optchar = "-a";
+
+ sh_invalidopt (optchar);
+ return (EXECUTION_FAILURE);
+ }
+
+#define NEXT_VARIABLE() free (name); list = list->next; continue
+
+ /* There are arguments left, so we are making variables. */
+ while (list) /* declare [-aAfFirx] name [name ...] */
+ {
+ char *value, *name, *oldname;
+ int offset, aflags, wflags, created_var;
+ int assoc_noexpand;
+#if defined (ARRAY_VARS)
+ int making_array_special, compound_array_assign, simple_array_assign;
+ int var_exists, array_exists, creating_array, array_subscript_assignment;
+#endif
+
+ name = savestring (list->word->word);
+ wflags = list->word->flags;
+#if defined (ARRAY_VARS)
+ assoc_noexpand = assoc_expand_once && (wflags & W_ASSIGNMENT);
+#else
+ assoc_noexpand = 0;
+#endif
+ offset = assignment (name, assoc_noexpand ? 2 : 0);
+ aflags = 0;
+ created_var = 0;
+
+ if (local_var && variable_context && STREQ (name, "-"))
+ {
+ var = make_local_variable ("-", 0);
+ FREE (value_cell (var)); /* just in case */
+ value = get_current_options ();
+ var_setvalue (var, value);
+ VSETATTR (var, att_invisible);
+ NEXT_VARIABLE ();
+ }
+
+ /* Can't define functions using assignment statements */
+ if (offset && (flags_on & att_function)) /* declare -f [-rix] foo=bar */
+ {
+ builtin_error (_("cannot use `-f' to make functions"));
+ free (name);
+ return (EXECUTION_FAILURE);
+ }
+
+ /* If we are declaring a function, then complain about it in some way.
+ We don't let people make functions by saying `typeset -f foo=bar'. */
+
+ /* There should be a way, however, to let people look at a particular
+ function definition by saying `typeset -f foo'. This is the only
+ place we deal with functions. */
+
+ if (flags_on & att_function)
+ {
+ /* Should we restrict this when the shell is in posix mode even if
+ the function was created before the shell entered posix mode?
+ Previous versions of the shell enforced the restriction. */
+ if (posixly_correct && legal_identifier (name) == 0)
+ {
+ sh_invalidid (name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+
+ var = find_function (name);
+
+ if (var)
+ {
+ if (readonly_p (var) && (flags_off & att_readonly))
+ {
+ builtin_error (_("%s: readonly function"), name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ /* declare -[Ff] name [name...] */
+ if (flags_on == att_function && flags_off == 0)
+ {
+#if defined (DEBUGGER)
+ if (nodefs && debugging_mode)
+ {
+ shell_fn = find_function_def (var->name);
+ if (shell_fn)
+ printf ("%s %d %s\n", var->name, shell_fn->line, shell_fn->source_file);
+ else
+ printf ("%s\n", var->name);
+ }
+ else
+#endif /* DEBUGGER */
+ {
+ t = nodefs ? var->name : named_function_string (name, function_cell (var), FUNC_MULTILINE|FUNC_EXTERNAL);
+ printf ("%s\n", t);
+ any_failed = sh_chkwrite (any_failed);
+ }
+ }
+ else /* declare -[fF] -[rx] name [name...] */
+ {
+ VSETATTR (var, flags_on);
+ flags_off &= ~att_function; /* makes no sense */
+ VUNSETATTR (var, flags_off);
+ }
+ }
+ else
+ any_failed++;
+
+ NEXT_VARIABLE ();
+ }
+
+ if (offset) /* declare [-aAfFirx] name=value */
+ {
+ name[offset] = '\0';
+ value = name + offset + 1;
+ if (name[offset - 1] == '+')
+ {
+ aflags |= ASS_APPEND;
+ name[offset - 1] = '\0';
+ }
+ }
+ else
+ value = "";
+
+ /* Do some lexical error checking on the LHS and RHS of the assignment
+ that is specific to nameref variables. */
+ if (flags_on & att_nameref)
+ {
+#if defined (ARRAY_VARS)
+ if (valid_array_reference (name, 0))
+ {
+ builtin_error (_("%s: reference variable cannot be an array"), name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+ else
+#endif
+ /* disallow self references at global scope, warn at function scope */
+ if (check_selfref (name, value, 0))
+ {
+ if (variable_context == 0)
+ {
+ builtin_error (_("%s: nameref variable self references not allowed"), name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+ else
+ builtin_warning (_("%s: circular name reference"), name);
+ }
+ if (value && *value && (aflags & ASS_APPEND) == 0 && valid_nameref_value (value, 1) == 0)
+ {
+ builtin_error (_("`%s': invalid variable name for name reference"), value);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+ }
+
+restart_new_var_name:
+
+ /* The rest of the loop body deals with declare -[aAinrx] name [name...] */
+
+ subscript_start = (char *)NULL; /* used below */
+#if defined (ARRAY_VARS)
+ /* Determine whether we are creating or assigning an array variable */
+ var_exists = array_exists = creating_array = 0;
+ compound_array_assign = simple_array_assign = 0;
+ array_subscript_assignment = 0;
+ if (t = strchr (name, '[')) /* ] */
+ {
+ /* If offset != 0 we have already validated any array reference
+ because assignment() calls skipsubscript() */
+ if (offset == 0 && valid_array_reference (name, 0) == 0)
+ {
+ sh_invalidid (name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+ subscript_start = t;
+ *t = '\0';
+ making_array_special = 1; /* XXX - should this check offset? */
+ array_subscript_assignment = offset != 0;
+ }
+ else
+ making_array_special = 0;
+#endif
+
+ /* Ensure the argument is a valid, well-formed shell identifier. */
+ if (legal_identifier (name) == 0)
+ {
+ sh_invalidid (name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+
+ /* If VARIABLE_CONTEXT has a non-zero value, then we are executing
+ inside of a function. This means we should make local variables,
+ not global ones. */
+
+ /* XXX - this has consequences when we're making a local copy of a
+ variable that was in the temporary environment. Watch out
+ for this. */
+ refvar = (SHELL_VAR *)NULL;
+ if (variable_context && mkglobal == 0)
+ {
+ char *newname;
+
+ /* We don't check newname for validity here. We should not have an
+ invalid name assigned as the value of a nameref, but this could
+ cause problems. */
+ var = find_variable (name);
+ if (var == 0)
+ newname = nameref_transform_name (name, ASS_MKLOCAL);
+ else if ((flags_on & att_nameref) == 0 && (flags_off & att_nameref) == 0)
+ {
+ /* Ok, we're following namerefs here, so let's make sure that if
+ we followed one, it was at the same context (see below for
+ more details). */
+ refvar = find_variable_last_nameref (name, 1);
+ newname = (refvar && refvar->context != variable_context) ? name : var->name;
+ refvar = (SHELL_VAR *)NULL;
+ }
+ else
+ newname = name; /* dealing with nameref attribute */
+
+#if defined (ARRAY_VARS)
+ /* Pass 1 as second argument to make_local_{assoc,array}_variable
+ return an existing {array,assoc} variable to be flagged as an
+ error below. */
+ if (flags_on & att_assoc)
+ var = make_local_assoc_variable (newname, MKLOC_ARRAYOK|inherit_flag);
+ else if ((flags_on & att_array) || making_array_special)
+ var = make_local_array_variable (newname, MKLOC_ASSOCOK|inherit_flag);
+ else
+#endif
+ if (offset == 0 && (flags_on & att_nameref))
+ {
+ /* First look for refvar at current scope */
+ refvar = find_variable_last_nameref (name, 1);
+ /* VARIABLE_CONTEXT != 0, so we are attempting to create or modify
+ the attributes for a local variable at the same scope. If we've
+ used a reference from a previous context to resolve VAR, we
+ want to throw REFVAR and VAR away and create a new local var. */
+ if (refvar && refvar->context != variable_context)
+ {
+ refvar = 0;
+ var = make_local_variable (name, inherit_flag);
+ }
+ else if (refvar && refvar->context == variable_context)
+ var = refvar;
+ /* Maybe we just want to create a new local variable */
+ else if (var == 0 || var->context != variable_context)
+ var = make_local_variable (name, inherit_flag);
+ /* otherwise we have a var at the right context */
+ }
+ else
+ /* XXX - check name for validity here with valid_nameref_value? */
+ var = make_local_variable ((flags_on & att_nameref) ? name : newname, inherit_flag); /* sets att_invisible for new vars */
+
+ if (var == 0)
+ {
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ if (var && nameref_p (var) && readonly_p (var) && nameref_cell (var) && (flags_off & att_nameref))
+ {
+ sh_readonly (name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ }
+ else
+ var = (SHELL_VAR *)NULL;
+
+ /* VAR is non-null if we just created or fetched a local variable. */
+
+ /* Here's what ksh93 seems to do as of the 2012 version: if we are
+ using declare -n to modify the value of an existing nameref
+ variable, don't follow the nameref chain at all and just search
+ for a nameref at the current context. If we have a nameref,
+ modify its value (changing which variable it references). */
+ if (var == 0 && (flags_on & att_nameref))
+ {
+ /* See if we are trying to modify an existing nameref variable,
+ but don't follow the nameref chain. */
+ var = mkglobal ? find_global_variable_noref (name) : find_variable_noref (name);
+ if (var && nameref_p (var) == 0)
+ var = 0;
+ }
+
+ /* However, if we're turning off the nameref attribute on an existing
+ nameref variable, we first follow the nameref chain to the end,
+ modify the value of the variable this nameref variable references
+ if there is an assignment statement argument,
+ *CHANGING ITS VALUE AS A SIDE EFFECT*, then turn off the nameref
+ flag *LEAVING THE NAMEREF VARIABLE'S VALUE UNCHANGED* */
+ else if (var == 0 && (flags_off & att_nameref))
+ {
+ /* See if we are trying to modify an existing nameref variable */
+ refvar = mkglobal ? find_global_variable_last_nameref (name, 0) : find_variable_last_nameref (name, 0);
+ if (refvar && nameref_p (refvar) == 0)
+ refvar = 0;
+ /* If the nameref is readonly but doesn't have a value, ksh93
+ allows the nameref attribute to be removed. If it's readonly
+ and has a value, even if the value doesn't reference an
+ existing variable, we disallow the modification */
+ if (refvar && nameref_cell (refvar) && readonly_p (refvar))
+ {
+ sh_readonly (name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+
+ /* If all we're doing is turning off the nameref attribute, don't
+ bother with VAR at all, whether it exists or not. Just turn it
+ off and go on. */
+ if (refvar && flags_on == 0 && offset == 0 && (flags_off & ~att_nameref) == 0)
+ {
+ VUNSETATTR (refvar, att_nameref);
+ NEXT_VARIABLE ();
+ }
+
+ if (refvar)
+ var = declare_find_variable (nameref_cell (refvar), mkglobal, 0);
+ }
+#if defined (ARRAY_VARS)
+ /* If we have an array assignment to a nameref, remove the nameref
+ attribute and go on. This handles
+ declare -n xref[=value]; declare -a xref[1]=one */
+ else if (var == 0 && offset && array_subscript_assignment)
+ {
+ var = mkglobal ? find_global_variable_noref (name) : find_variable_noref (name);
+ if (var && nameref_p (var))
+ {
+ internal_warning (_("%s: removing nameref attribute"), name);
+ FREE (value_cell (var)); /* XXX - bash-4.3 compat */
+ var_setvalue (var, (char *)NULL);
+ VUNSETATTR (var, att_nameref);
+ }
+ }
+#endif
+
+ /* See if we are trying to set flags or value (or create) for an
+ existing nameref that points to a non-existent variable: e.g.,
+ declare -n foo=bar
+ unset foo # unsets bar
+ declare -i foo
+ foo=4+4
+ declare -p foo
+ */
+ if (var == 0 && (mkglobal || flags_on || flags_off || offset))
+ {
+ refvar = mkglobal ? find_global_variable_last_nameref (name, 0) : find_variable_last_nameref (name, 0);
+ if (refvar && nameref_p (refvar) == 0)
+ refvar = 0;
+ if (refvar)
+ var = declare_find_variable (nameref_cell (refvar), mkglobal, 0);
+ if (refvar && var == 0)
+ {
+ oldname = name; /* need to free this */
+
+ /* I'm not sure subscript_start is ever non-null here. In any
+ event, build a new name from the nameref value, including any
+ subscript, and add the [[+]=value] if offset != 0 */
+ name = declare_build_newname (nameref_cell (refvar), subscript_start, value, offset, aflags);
+
+ if (offset)
+ {
+ offset = assignment (name, 0);
+ /* If offset was valid previously, but substituting the
+ the nameref value results in an invalid assignment,
+ throw an invalid identifier error */
+ if (offset == 0)
+ {
+ free (oldname);
+ sh_invalidid (name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+ name[(aflags & ASS_APPEND) ? offset - 1 : offset] = '\0';
+ value = name + offset + 1;
+ }
+ free (oldname);
+
+ /* OK, let's turn off the nameref attribute.
+ Now everything else applies to VAR. */
+ if (flags_off & att_nameref)
+ VUNSETATTR (refvar, att_nameref);
+
+ goto restart_new_var_name;
+ /* NOTREACHED */
+ }
+ }
+ if (var == 0)
+ var = declare_find_variable (name, mkglobal, chklocal);
+
+ /* At this point, VAR is the variable we are dealing with; REFVAR is the
+ nameref variable we dereferenced to get VAR, if any. */
+#if defined (ARRAY_VARS)
+ var_exists = var != 0;
+ array_exists = var && (array_p (var) || assoc_p (var));
+ creating_array = flags_on & (att_array|att_assoc);
+#endif
+
+ /* Make a new variable if we need to. */
+ if (var == 0)
+ {
+#if defined (ARRAY_VARS)
+ if (flags_on & att_assoc)
+ {
+ var = make_new_assoc_variable (name);
+ if (var && offset == 0)
+ VSETATTR (var, att_invisible);
+ }
+ else if ((flags_on & att_array) || making_array_special)
+ {
+ var = make_new_array_variable (name);
+ if (var && offset == 0)
+ VSETATTR (var, att_invisible);
+ }
+ else
+#endif
+ {
+ var = mkglobal ? bind_global_variable (name, (char *)NULL, ASS_FORCE) : bind_variable (name, (char *)NULL, ASS_FORCE);
+ if (var && offset == 0)
+ VSETATTR (var, att_invisible);
+ }
+ if (var == 0)
+ {
+ /* Has to appear in brackets */
+ NEXT_VARIABLE ();
+ }
+ created_var = 1;
+ }
+ /* Nameref variable error checking. */
+
+ /* Can't take an existing array variable and make it a nameref */
+ else if ((array_p (var) || assoc_p (var)) && (flags_on & att_nameref))
+ {
+ builtin_error (_("%s: reference variable cannot be an array"), name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+ /* Can't have an invalid identifier as nameref value */
+ else if (nameref_p (var) && (flags_on & att_nameref) == 0 && (flags_off & att_nameref) == 0 && offset && valid_nameref_value (value, 1) == 0)
+ {
+ builtin_error (_("`%s': invalid variable name for name reference"), value);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ /* Can't make an existing variable a nameref if its current value is not
+ a valid identifier. Check of offset is to allow an assignment to a
+ nameref var as part of the declare word to override existing value. */
+ else if ((flags_on & att_nameref) && nameref_p (var) == 0 && var_isset (var) && offset == 0 && valid_nameref_value (value_cell (var), 0) == 0)
+ {
+ builtin_error (_("`%s': invalid variable name for name reference"), value_cell (var));
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ /* Can't make an existing readonly variable a nameref. */
+ else if ((flags_on & att_nameref) && readonly_p (var))
+ {
+ sh_readonly (name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+
+ /* ksh93 compat: turning on nameref attribute turns off -ilu */
+ if (flags_on & att_nameref)
+ VUNSETATTR (var, att_integer|att_uppercase|att_lowercase|att_capcase);
+
+ /* Readonly variable error checking. */
+
+ /* Cannot use declare +r to turn off readonly attribute. */
+ if (readonly_p (var) && (flags_off & att_readonly))
+ {
+ sh_readonly (name_cell (var));
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ /* Cannot use declare to assign value to readonly or noassign variable. */
+ else if ((readonly_p (var) || noassign_p (var)) && offset)
+ {
+ if (readonly_p (var))
+ sh_readonly (name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+
+#if defined (ARRAY_VARS)
+ /* make declare a[2]=foo as similar to a[2]=foo as possible if a is
+ already an array or assoc variable. */
+ if (array_subscript_assignment && array_exists && creating_array == 0)
+ simple_array_assign = 1;
+ else if ((making_array_special || creating_array || array_exists) && offset)
+ {
+ int vlen;
+ vlen = STRLEN (value);
+/*itrace("declare_builtin: name = %s value = %s flags = %d", name, value, wflags);*/
+
+ /* Print a warning for a construct like
+ declare -a array='(quoted compound value)'
+ if the array variable doesn't already exist. */
+ if (shell_compatibility_level > 43 && (wflags & W_COMPASSIGN) == 0 &&
+ value[0] == '(' && value[vlen-1] == ')')
+ {
+ /* The warning is only printed when using compound assignment
+ to an array variable that doesn't already exist. We use
+ creating_array to allow things like
+ declare -a foo$bar='(abc)' to work. */
+ if (array_exists == 0 && creating_array == 0)
+ internal_warning (_("%s: quoted compound array assignment deprecated"), list->word->word);
+ compound_array_assign = array_exists || creating_array;
+ simple_array_assign = making_array_special;
+ }
+ else if (value[0] == '(' && value[vlen-1] == ')' && (shell_compatibility_level < 44 || (wflags & W_COMPASSIGN)))
+ compound_array_assign = 1;
+ else
+ simple_array_assign = 1;
+ }
+
+ /* Array variable error checking. */
+
+ /* Cannot use declare +a name or declare +A name to remove an array variable. */
+ if (((flags_off & att_array) && array_p (var)) || ((flags_off & att_assoc) && assoc_p (var)))
+ {
+ builtin_error (_("%s: cannot destroy array variables in this way"), name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ else if ((flags_on & att_array) && assoc_p (var))
+ {
+ builtin_error (_("%s: cannot convert associative to indexed array"), name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ else if ((flags_on & att_assoc) && array_p (var))
+ {
+ builtin_error (_("%s: cannot convert indexed to associative array"), name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+
+ /* declare -A name[[n]] makes name an associative array variable. */
+ if (flags_on & att_assoc)
+ {
+ if (assoc_p (var) == 0)
+ var = convert_var_to_assoc (var);
+ }
+ /* declare -a name[[n]] or declare name[n] makes NAME an indexed
+ array variable. */
+ else if ((making_array_special || (flags_on & att_array)) && array_p (var) == 0 && assoc_p (var) == 0)
+ var = convert_var_to_array (var);
+#endif /* ARRAY_VARS */
+
+ /* XXX - we note that we are turning on nameref attribute and defer
+ setting it until the assignment has been made so we don't do an
+ inadvertent nameref lookup. Might have to do the same thing for
+ flags_off&att_nameref. */
+ /* XXX - ksh93 makes it an error to set a readonly nameref variable
+ using a single typeset command. */
+ onref = (flags_on & att_nameref);
+ flags_on &= ~att_nameref;
+#if defined (ARRAY_VARS)
+ /* I don't believe this condition ever tests true, but array variables
+ may not be namerefs */
+ if (array_p (var) || assoc_p (var) || (offset && compound_array_assign)
+ || simple_array_assign)
+ onref = 0;
+#endif
+
+ /* ksh93 seems to do this */
+ offref = (flags_off & att_nameref);
+ flags_off &= ~att_nameref;
+
+ VSETATTR (var, flags_on);
+ VUNSETATTR (var, flags_off);
+
+#if defined (ARRAY_VARS)
+ if (offset && compound_array_assign)
+ assign_array_var_from_string (var, value, aflags|ASS_FORCE);
+ else if (simple_array_assign && subscript_start)
+ {
+ int local_aflags;
+ /* declare [-aA] name[N]=value */
+ *subscript_start = '['; /* ] */
+ /* XXX - problem here with appending */
+ local_aflags = aflags&ASS_APPEND;
+ local_aflags |= assoc_noexpand ? ASS_NOEXPAND : 0;
+ var = assign_array_element (name, value, local_aflags); /* XXX - not aflags */
+ *subscript_start = '\0';
+ if (var == 0) /* some kind of assignment error */
+ {
+ assign_error++;
+ flags_on |= onref;
+ flags_off |= offref;
+ NEXT_VARIABLE ();
+ }
+ }
+ else if (simple_array_assign)
+ {
+ /* let bind_{array,assoc}_variable take care of this. */
+ if (assoc_p (var))
+ bind_assoc_variable (var, name, savestring ("0"), value, aflags|ASS_FORCE);
+ else
+ bind_array_variable (name, 0, value, aflags|ASS_FORCE);
+ }
+ else
+#endif
+ /* XXX - no ASS_FORCE here */
+ /* bind_variable_value duplicates the essential internals of bind_variable() */
+ if (offset)
+ {
+ if (onref || nameref_p (var))
+ aflags |= ASS_NAMEREF;
+ v = bind_variable_value (var, value, aflags);
+ if (v == 0 && (onref || nameref_p (var)))
+ {
+ if (valid_nameref_value (value, 1) == 0)
+ sh_invalidid (value);
+ assign_error++;
+ /* XXX - unset this variable? or leave it as normal var? */
+ if (created_var)
+ delete_var (var->name, mkglobal ? global_variables : shell_variables);
+ flags_on |= onref; /* undo change from above */
+ flags_off |= offref;
+ NEXT_VARIABLE ();
+ }
+ }
+
+ /* If we found this variable in the temporary environment, as with
+ `var=value declare -x var', make sure it is treated identically
+ to `var=value export var'. Do the same for `declare -r' and
+ `readonly'. Preserve the attributes, except for att_tempvar. */
+ /* XXX -- should this create a variable in the global scope, or
+ modify the local variable flags? ksh93 has it modify the
+ global scope.
+ Need to handle case like in set_var_attribute where a temporary
+ variable is in the same table as the function local vars. */
+ if ((flags_on & (att_exported|att_readonly)) && tempvar_p (var))
+ {
+ SHELL_VAR *tv;
+ char *tvalue;
+
+ tv = find_tempenv_variable (var->name);
+ if (tv)
+ {
+ tvalue = var_isset (var) ? savestring (value_cell (var)) : savestring ("");
+ tv = bind_variable (var->name, tvalue, 0);
+ if (tv)
+ {
+ tv->attributes |= var->attributes & ~att_tempvar;
+ if (tv->context > 0)
+ VSETATTR (tv, att_propagate);
+ }
+ free (tvalue);
+ }
+ VSETATTR (var, att_propagate);
+ }
+
+ /* Turn on nameref attribute we deferred above. */
+ /* XXX - should we turn on the noassign attribute for consistency with
+ ksh93 when we turn on the nameref attribute? */
+ VSETATTR (var, onref);
+ flags_on |= onref;
+ VUNSETATTR (var, offref);
+ flags_off |= offref;
+ /* Yuck. ksh93 compatibility. XXX - need to investigate more but
+ definitely happens when turning off nameref attribute on nameref
+ (see comments above). Under no circumstances allow this to turn
+ off readonly attribute on readonly nameref variable. */
+ if (refvar)
+ {
+ if (flags_off & att_readonly)
+ flags_off &= ~att_readonly;
+ VUNSETATTR (refvar, flags_off);
+ }
+
+ stupidly_hack_special_variables (name);
+
+ NEXT_VARIABLE ();
+ }
+
+ return (assign_error ? EX_BADASSIGN
+ : ((any_failed == 0) ? EXECUTION_SUCCESS
+ : EXECUTION_FAILURE));
+}
diff --git a/builtins/declare.def.2 b/builtins/declare.def.2
new file mode 100644
index 00000000..014bec9c
--- /dev/null
+++ b/builtins/declare.def.2
@@ -0,0 +1,1039 @@
+This file is declare.def, from which is created declare.c.
+It implements the builtins "declare" and "local" in Bash.
+
+Copyright (C) 1987-2021 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 .
+
+$PRODUCES declare.c
+
+$BUILTIN declare
+$FUNCTION declare_builtin
+$SHORT_DOC declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]
+Set variable values and attributes.
+
+Declare variables and give them attributes. If no NAMEs are given,
+display the attributes and values of all variables.
+
+Options:
+ -f restrict action or display to function names and definitions
+ -F restrict display to function names only (plus line number and
+ source file when debugging)
+ -g create global variables when used in a shell function; otherwise
+ ignored
+ -I if creating a local variable, inherit the attributes and value
+ of a variable with the same name at a previous scope
+ -p display the attributes and value of each NAME
+
+Options which set attributes:
+ -a to make NAMEs indexed arrays (if supported)
+ -A to make NAMEs associative arrays (if supported)
+ -i to make NAMEs have the `integer' attribute
+ -l to convert the value of each NAME to lower case on assignment
+ -n make NAME a reference to the variable named by its value
+ -r to make NAMEs readonly
+ -t to make NAMEs have the `trace' attribute
+ -u to convert the value of each NAME to upper case on assignment
+ -x to make NAMEs export
+
+Using `+' instead of `-' turns off the given attribute.
+
+Variables with the integer attribute have arithmetic evaluation (see
+the `let' command) performed when the variable is assigned a value.
+
+When used in a function, `declare' makes NAMEs local, as with the `local'
+command. The `-g' option suppresses this behavior.
+
+Exit Status:
+Returns success unless an invalid option is supplied or a variable
+assignment error occurs.
+$END
+
+$BUILTIN typeset
+$FUNCTION declare_builtin
+$SHORT_DOC typeset [-aAfFgiIlnrtux] [-p] name[=value] ...
+Set variable values and attributes.
+
+A synonym for `declare'. See `help declare'.
+$END
+
+#include
+
+#if defined (HAVE_UNISTD_H)
+# ifdef _MINIX
+# include
+# endif
+# include
+#endif
+
+#include
+
+#include "../bashansi.h"
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "../flags.h"
+#include "common.h"
+#include "builtext.h"
+#include "bashgetopt.h"
+
+static SHELL_VAR *declare_find_variable PARAMS((const char *, int, int));
+static int declare_internal PARAMS((register WORD_LIST *, int));
+
+/* Declare or change variable attributes. */
+int
+declare_builtin (list)
+ register WORD_LIST *list;
+{
+ return (declare_internal (list, 0));
+}
+
+$BUILTIN local
+$FUNCTION local_builtin
+$SHORT_DOC local [option] name[=value] ...
+Define local variables.
+
+Create a local variable called NAME, and give it VALUE. OPTION can
+be any option accepted by `declare'.
+
+Local variables can only be used within a function; they are visible
+only to the function where they are defined and its children.
+
+Exit Status:
+Returns success unless an invalid option is supplied, a variable
+assignment error occurs, or the shell is not executing a function.
+$END
+int
+local_builtin (list)
+ register WORD_LIST *list;
+{
+ /* Catch a straight `local --help' before checking function context */
+ if (list && list->word && STREQ (list->word->word, "--help"))
+ {
+ builtin_help ();
+ return (EX_USAGE);
+ }
+
+ if (variable_context)
+ return (declare_internal (list, 1));
+ else
+ {
+ builtin_error (_("can only be used in a function"));
+ return (EXECUTION_FAILURE);
+ }
+}
+
+#if defined (ARRAY_VARS)
+# define DECLARE_OPTS "+acfgilnprtuxAFGI"
+#else
+# define DECLARE_OPTS "+cfgilnprtuxFGI"
+#endif
+
+static SHELL_VAR *
+declare_find_variable (name, mkglobal, chklocal)
+ const char *name;
+ int mkglobal, chklocal;
+{
+ SHELL_VAR *var;
+
+ if (mkglobal == 0)
+ return (find_variable (name));
+ else if (chklocal)
+ {
+ var = find_variable (name);
+ if (var && local_p (var) && var->context == variable_context)
+ return var;
+ return (find_global_variable (name));
+ }
+ else
+ return (find_global_variable (name));
+}
+
+/* Build a new string
+ NAME[SUBSCRIPT][[+]=VALUE]
+ from expanding a nameref into NAME */
+static char *
+declare_build_newname (name, subscript_start, offset, value, aflags)
+ char *name, *subscript_start, *value;
+ int offset, aflags;
+{
+ size_t namelen, savelen;
+ char *ret;
+
+ savelen = namelen = strlen (name);
+ if (subscript_start)
+ {
+ *subscript_start = '['; /* ] */
+ namelen += strlen (subscript_start);
+ }
+ ret = xmalloc (namelen + 2 + strlen (value) + 1);
+ strcpy (ret, name);
+ if (subscript_start)
+ strcpy (ret + savelen, subscript_start);
+ if (offset)
+ {
+ if (aflags & ASS_APPEND)
+ ret[namelen++] = '+';
+ ret[namelen++] = '=';
+ if (value && *value)
+ strcpy (ret + namelen, value);
+ else
+ ret[namelen] = '\0';
+ }
+
+ return (ret);
+}
+
+/* The workhorse function. */
+static int
+declare_internal (list, local_var)
+ register WORD_LIST *list;
+ int local_var;
+{
+ int flags_on, flags_off, *flags;
+ int any_failed, assign_error, pflag, nodefs, opt, onref, offref;
+ int mkglobal, chklocal, inherit_flag;
+ char *t, *subscript_start;
+ SHELL_VAR *var, *refvar, *v;
+ FUNCTION_DEF *shell_fn;
+
+ flags_on = flags_off = any_failed = assign_error = pflag = nodefs = 0;
+ mkglobal = chklocal = inherit_flag = 0;
+ refvar = (SHELL_VAR *)NULL;
+ reset_internal_getopt ();
+ while ((opt = internal_getopt (list, DECLARE_OPTS)) != -1)
+ {
+ flags = list_opttype == '+' ? &flags_off : &flags_on;
+
+ /* If you add options here, see whether or not they need to be added to
+ the loop in subst.c:shell_expand_word_list() */
+ switch (opt)
+ {
+ case 'a':
+#if defined (ARRAY_VARS)
+ *flags |= att_array;
+ break;
+#else
+ builtin_usage ();
+ return (EX_USAGE);
+#endif
+ case 'A':
+#if defined (ARRAY_VARS)
+ *flags |= att_assoc;
+ break;
+#else
+ builtin_usage ();
+ return (EX_USAGE);
+#endif
+ case 'p':
+ pflag++;
+ break;
+ case 'F':
+ nodefs++;
+ *flags |= att_function;
+ break;
+ case 'f':
+ *flags |= att_function;
+ break;
+ case 'G':
+ if (flags == &flags_on)
+ chklocal = 1;
+ /*FALLTHROUGH*/
+ case 'g':
+ if (flags == &flags_on)
+ mkglobal = 1;
+ break;
+ case 'i':
+ *flags |= att_integer;
+ break;
+ case 'n':
+ *flags |= att_nameref;
+ break;
+ case 'r':
+ *flags |= att_readonly;
+ break;
+ case 't':
+ *flags |= att_trace;
+ break;
+ case 'x':
+ *flags |= att_exported;
+ array_needs_making = 1;
+ break;
+#if defined (CASEMOD_ATTRS)
+# if defined (CASEMOD_CAPCASE)
+ case 'c':
+ *flags |= att_capcase;
+ if (flags == &flags_on)
+ flags_off |= att_uppercase|att_lowercase;
+ break;
+# endif
+ case 'l':
+ *flags |= att_lowercase;
+ if (flags == &flags_on)
+ flags_off |= att_capcase|att_uppercase;
+ break;
+ case 'u':
+ *flags |= att_uppercase;
+ if (flags == &flags_on)
+ flags_off |= att_capcase|att_lowercase;
+ break;
+#endif /* CASEMOD_ATTRS */
+ case 'I':
+ inherit_flag = MKLOC_INHERIT;
+ break;
+ CASE_HELPOPT;
+ default:
+ builtin_usage ();
+ return (EX_USAGE);
+ }
+ }
+
+ list = loptend;
+
+ /* If there are no more arguments left, then we just want to show
+ some variables. */
+ if (list == 0) /* declare -[aAfFirtx] */
+ {
+ /* Show local variables defined at this context level if this is
+ the `local' builtin. */
+ if (local_var)
+ show_local_var_attributes (0, nodefs); /* XXX - fix up args later */
+ else if (pflag && (flags_on == 0 || flags_on == att_function))
+ show_all_var_attributes (flags_on == 0, nodefs);
+ else if (flags_on == 0)
+ return (set_builtin ((WORD_LIST *)NULL));
+ else
+ set_or_show_attributes ((WORD_LIST *)NULL, flags_on, nodefs);
+
+ return (sh_chkwrite (EXECUTION_SUCCESS));
+ }
+
+ if (pflag) /* declare -p [-aAfFirtx] name [name...] */
+ {
+ for (any_failed = 0; list; list = list->next)
+ {
+ if (flags_on & att_function)
+ pflag = show_func_attributes (list->word->word, nodefs);
+ else if (local_var)
+ pflag = show_localname_attributes (list->word->word, nodefs);
+ else
+ pflag = show_name_attributes (list->word->word, nodefs);
+ if (pflag)
+ {
+ sh_notfound (list->word->word);
+ any_failed++;
+ }
+ }
+ return (sh_chkwrite (any_failed ? EXECUTION_FAILURE : EXECUTION_SUCCESS));
+ }
+
+ /* Some option combinations that don't make any sense */
+ if ((flags_on & att_function) && (flags_on & (att_array|att_assoc|att_integer|att_nameref)))
+ {
+ char *optchar;
+
+ if (flags_on & att_nameref)
+ optchar = "-n";
+ else if (flags_on & att_integer)
+ optchar = "-i";
+ else if (flags_on & att_assoc)
+ optchar = "-A";
+ else if (flags_on & att_array)
+ optchar = "-a";
+
+ sh_invalidopt (optchar);
+ return (EXECUTION_FAILURE);
+ }
+
+#define NEXT_VARIABLE() free (name); list = list->next; continue
+
+ /* There are arguments left, so we are making variables. */
+ while (list) /* declare [-aAfFirx] name [name ...] */
+ {
+ char *value, *name, *oldname;
+ int offset, aflags, wflags, created_var;
+ int assoc_noexpand;
+#if defined (ARRAY_VARS)
+ int making_array_special, compound_array_assign, simple_array_assign;
+ int var_exists, array_exists, creating_array, array_subscript_assignment;
+#endif
+
+ name = savestring (list->word->word);
+ wflags = list->word->flags;
+#if defined (ARRAY_VARS)
+ assoc_noexpand = assoc_expand_once && (wflags & W_ASSIGNMENT);
+#else
+ assoc_noexpand = 0;
+#endif
+ offset = assignment (name, assoc_noexpand ? 2 : 0);
+ aflags = 0;
+ created_var = 0;
+
+ if (local_var && variable_context && STREQ (name, "-"))
+ {
+ var = make_local_variable ("-", 0);
+ FREE (value_cell (var)); /* just in case */
+ value = get_current_options ();
+ var_setvalue (var, value);
+ VSETATTR (var, att_invisible);
+ NEXT_VARIABLE ();
+ }
+
+ /* If we are declaring a function, then complain about it in some way.
+ We don't let people make functions by saying `typeset -f foo=bar'. */
+
+ /* Can't define functions using assignment statements */
+ if (offset && (flags_on & att_function)) /* declare -f [-rix] foo=bar */
+ {
+ builtin_error (_("cannot use `-f' to make functions"));
+ free (name);
+ return (EXECUTION_FAILURE);
+ }
+
+ /* There should be a way, however, to let people look at a particular
+ function definition by saying `typeset -f foo'. This is the only
+ place in this builtin where we deal with functions. */
+
+ if (flags_on & att_function)
+ {
+ /* Should we restrict this when the shell is in posix mode even if
+ the function was created before the shell entered posix mode?
+ Previous versions of the shell enforced the restriction. */
+ if (posixly_correct && legal_identifier (name) == 0)
+ {
+ sh_invalidid (name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+
+ var = find_function (name);
+
+ if (var)
+ {
+ if (readonly_p (var) && (flags_off & att_readonly))
+ {
+ builtin_error (_("%s: readonly function"), name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ /* declare -[Ff] name [name...] */
+ if (flags_on == att_function && flags_off == 0)
+ {
+#if defined (DEBUGGER)
+ if (nodefs && debugging_mode)
+ {
+ shell_fn = find_function_def (var->name);
+ if (shell_fn)
+ printf ("%s %d %s\n", var->name, shell_fn->line, shell_fn->source_file);
+ else
+ printf ("%s\n", var->name);
+ }
+ else
+#endif /* DEBUGGER */
+ {
+ t = nodefs ? var->name : named_function_string (name, function_cell (var), FUNC_MULTILINE|FUNC_EXTERNAL);
+ printf ("%s\n", t);
+ any_failed = sh_chkwrite (any_failed);
+ }
+ }
+ else /* declare -[fF] -[rx] name [name...] */
+ {
+ VSETATTR (var, flags_on);
+ flags_off &= ~att_function; /* makes no sense */
+ VUNSETATTR (var, flags_off);
+ }
+ }
+ else
+ any_failed++;
+
+ NEXT_VARIABLE ();
+ }
+
+ if (offset) /* declare [-aAfFirx] name=value */
+ {
+ name[offset] = '\0';
+ value = name + offset + 1;
+ if (name[offset - 1] == '+')
+ {
+ aflags |= ASS_APPEND;
+ name[offset - 1] = '\0';
+ }
+ }
+ else
+ value = "";
+
+ /* Do some lexical error checking on the LHS and RHS of the assignment
+ that is specific to nameref variables. */
+ if (flags_on & att_nameref)
+ {
+#if defined (ARRAY_VARS)
+ if (valid_array_reference (name, 0))
+ {
+ builtin_error (_("%s: reference variable cannot be an array"), name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ else
+#endif
+ /* disallow self references at global scope, warn at function scope */
+ if (check_selfref (name, value, 0))
+ {
+ if (variable_context == 0)
+ {
+ builtin_error (_("%s: nameref variable self references not allowed"), name);
+ assign_error++; /* XXX any_failed++ instead? */
+ NEXT_VARIABLE ();
+ }
+ else
+ builtin_warning (_("%s: circular name reference"), name);
+ }
+ if (value && *value && (aflags & ASS_APPEND) == 0 && valid_nameref_value (value, 1) == 0)
+ {
+ builtin_error (_("`%s': invalid variable name for name reference"), value);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+ }
+
+restart_new_var_name:
+
+ /* The rest of the loop body deals with declare -[aAinrx] name [name...] */
+
+ subscript_start = (char *)NULL; /* used below */
+#if defined (ARRAY_VARS)
+ /* Determine whether we are creating or assigning an array variable */
+ var_exists = array_exists = creating_array = 0;
+ compound_array_assign = simple_array_assign = 0;
+ array_subscript_assignment = 0;
+ if (t = strchr (name, '[')) /* ] */
+ {
+ /* If offset != 0 we have already validated any array reference
+ because assignment() calls skipsubscript() */
+ if (offset == 0 && valid_array_reference (name, 0) == 0)
+ {
+ sh_invalidid (name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+ subscript_start = t;
+ *t = '\0';
+ making_array_special = 1; /* XXX - should this check offset? */
+ array_subscript_assignment = offset != 0;
+ }
+ else
+ making_array_special = 0;
+#endif
+
+ /* Ensure the argument is a valid, well-formed shell identifier. */
+ if (legal_identifier (name) == 0)
+ {
+ sh_invalidid (name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+
+ /* If VARIABLE_CONTEXT has a non-zero value, then we are executing
+ inside of a function. This means we should make local variables,
+ not global ones. */
+
+ /* XXX - this has consequences when we're making a local copy of a
+ variable that was in the temporary environment. Watch out
+ for this. */
+ refvar = (SHELL_VAR *)NULL;
+ if (variable_context && mkglobal == 0)
+ {
+ char *newname;
+
+ /* We don't check newname for validity here. We should not have an
+ invalid name assigned as the value of a nameref, but this could
+ cause problems. */
+ var = find_variable (name);
+ if (var == 0)
+ newname = nameref_transform_name (name, ASS_MKLOCAL);
+ else if ((flags_on & att_nameref) == 0 && (flags_off & att_nameref) == 0)
+ {
+ /* Ok, we're following namerefs here, so let's make sure that if
+ we followed one, it was at the same context (see below for
+ more details). */
+ refvar = find_variable_last_nameref (name, 1);
+ newname = (refvar && refvar->context != variable_context) ? name : var->name;
+ refvar = (SHELL_VAR *)NULL;
+ }
+ else
+ newname = name; /* dealing with nameref attribute */
+
+#if defined (ARRAY_VARS)
+ /* Pass 1 as second argument to make_local_{assoc,array}_variable
+ return an existing {array,assoc} variable to be flagged as an
+ error below. */
+ if (flags_on & att_assoc)
+ var = make_local_assoc_variable (newname, MKLOC_ARRAYOK|inherit_flag);
+ else if ((flags_on & att_array) || making_array_special)
+ var = make_local_array_variable (newname, MKLOC_ASSOCOK|inherit_flag);
+ else
+#endif
+ if (offset == 0 && (flags_on & att_nameref))
+ {
+ /* First look for refvar at current scope */
+ refvar = find_variable_last_nameref (name, 1);
+ /* VARIABLE_CONTEXT != 0, so we are attempting to create or modify
+ the attributes for a local variable at the same scope. If we've
+ used a reference from a previous context to resolve VAR, we
+ want to throw REFVAR and VAR away and create a new local var. */
+ if (refvar && refvar->context != variable_context)
+ {
+ refvar = 0;
+ var = make_local_variable (name, inherit_flag);
+ }
+ else if (refvar && refvar->context == variable_context)
+ var = refvar;
+ /* Maybe we just want to create a new local variable */
+ else if (var == 0 || var->context != variable_context)
+ var = make_local_variable (name, inherit_flag);
+ /* otherwise we have a var at the right context */
+ }
+ else
+ /* XXX - check name for validity here with valid_nameref_value? */
+ var = make_local_variable ((flags_on & att_nameref) ? name : newname, inherit_flag); /* sets att_invisible for new vars */
+
+ if (var == 0)
+ {
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ if (var && nameref_p (var) && readonly_p (var) && nameref_cell (var) && (flags_off & att_nameref))
+ {
+ sh_readonly (name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ }
+ else
+ var = (SHELL_VAR *)NULL;
+
+ /* VAR is non-null if we just created or fetched a local variable. */
+
+ /* Here's what ksh93 seems to do as of the 2012 version: if we are
+ using declare -n to modify the value of an existing nameref
+ variable, don't follow the nameref chain at all and just search
+ for a nameref at the current context. If we have a nameref,
+ modify its value (changing which variable it references). */
+ if (var == 0 && (flags_on & att_nameref))
+ {
+ /* See if we are trying to modify an existing nameref variable,
+ but don't follow the nameref chain. */
+ var = mkglobal ? find_global_variable_noref (name) : find_variable_noref (name);
+ if (var && nameref_p (var) == 0)
+ var = 0;
+ }
+
+ /* However, if we're turning off the nameref attribute on an existing
+ nameref variable, we first follow the nameref chain to the end,
+ modify the value of the variable this nameref variable references
+ if there is an assignment statement argument,
+ *CHANGING ITS VALUE AS A SIDE EFFECT*, then turn off the nameref
+ flag *LEAVING THE NAMEREF VARIABLE'S VALUE UNCHANGED* */
+ else if (var == 0 && (flags_off & att_nameref))
+ {
+ /* See if we are trying to modify an existing nameref variable */
+ refvar = mkglobal ? find_global_variable_last_nameref (name, 0) : find_variable_last_nameref (name, 0);
+ if (refvar && nameref_p (refvar) == 0)
+ refvar = 0;
+ /* If the nameref is readonly but doesn't have a value, ksh93
+ allows the nameref attribute to be removed. If it's readonly
+ and has a value, even if the value doesn't reference an
+ existing variable, we disallow the modification */
+ if (refvar && nameref_cell (refvar) && readonly_p (refvar))
+ {
+ sh_readonly (name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+
+ /* If all we're doing is turning off the nameref attribute, don't
+ bother with VAR at all, whether it exists or not. Just turn it
+ off and go on. */
+ if (refvar && flags_on == 0 && offset == 0 && (flags_off & ~att_nameref) == 0)
+ {
+ VUNSETATTR (refvar, att_nameref);
+ NEXT_VARIABLE ();
+ }
+
+ if (refvar)
+ var = declare_find_variable (nameref_cell (refvar), mkglobal, 0);
+ }
+#if defined (ARRAY_VARS)
+ /* If we have an array assignment to a nameref, remove the nameref
+ attribute and go on. This handles
+ declare -n xref[=value]; declare [-a] xref[1]=one */
+ else if (var == 0 && offset && array_subscript_assignment)
+ {
+ var = mkglobal ? find_global_variable_noref (name) : find_variable_noref (name);
+ if (var && nameref_p (var))
+ {
+ internal_warning (_("%s: removing nameref attribute"), name);
+ FREE (value_cell (var)); /* XXX - bash-4.3 compat */
+ var_setvalue (var, (char *)NULL);
+ VUNSETATTR (var, att_nameref);
+ }
+ }
+#endif
+
+ /* See if we are trying to set flags or value (or create) for an
+ existing nameref that points to a non-existent variable: e.g.,
+ declare -n foo=bar
+ unset foo # unsets bar
+ declare -i foo
+ foo=4+4
+ declare -p foo
+ */
+ if (var == 0 && (mkglobal || flags_on || flags_off || offset))
+ {
+ refvar = mkglobal ? find_global_variable_last_nameref (name, 0) : find_variable_last_nameref (name, 0);
+ if (refvar && nameref_p (refvar) == 0)
+ refvar = 0;
+ if (refvar)
+ var = declare_find_variable (nameref_cell (refvar), mkglobal, 0);
+ if (refvar && var == 0)
+ {
+ oldname = name; /* need to free this */
+
+ /* I'm not sure subscript_start is ever non-null here. In any
+ event, build a new name from the nameref value, including any
+ subscript, and add the [[+]=value] if offset != 0 */
+ name = declare_build_newname (nameref_cell (refvar), subscript_start, offset, value, aflags);
+
+ if (offset)
+ {
+ offset = assignment (name, 0);
+ /* If offset was valid previously, but substituting the
+ the nameref value results in an invalid assignment,
+ throw an invalid identifier error */
+ if (offset == 0)
+ {
+ free (oldname);
+ sh_invalidid (name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+ name[(aflags & ASS_APPEND) ? offset - 1 : offset] = '\0';
+ value = name + offset + 1;
+ }
+ free (oldname);
+
+ /* OK, let's turn off the nameref attribute.
+ Now everything else applies to VAR. */
+ if (flags_off & att_nameref)
+ VUNSETATTR (refvar, att_nameref);
+
+ goto restart_new_var_name;
+ /* NOTREACHED */
+ }
+ }
+ if (var == 0)
+ var = declare_find_variable (name, mkglobal, chklocal);
+
+ /* At this point, VAR is the variable we are dealing with; REFVAR is the
+ nameref variable we dereferenced to get VAR, if any. */
+#if defined (ARRAY_VARS)
+ var_exists = var != 0;
+ array_exists = var && (array_p (var) || assoc_p (var));
+ creating_array = flags_on & (att_array|att_assoc);
+#endif
+
+ /* Make a new variable if we need to. */
+ if (var == 0)
+ {
+#if defined (ARRAY_VARS)
+ if (flags_on & att_assoc)
+ {
+ var = make_new_assoc_variable (name);
+ if (var && offset == 0)
+ VSETATTR (var, att_invisible);
+ }
+ else if ((flags_on & att_array) || making_array_special)
+ {
+ var = make_new_array_variable (name);
+ if (var && offset == 0)
+ VSETATTR (var, att_invisible);
+ }
+ else
+#endif
+ {
+ var = mkglobal ? bind_global_variable (name, (char *)NULL, ASS_FORCE) : bind_variable (name, (char *)NULL, ASS_FORCE);
+ if (var && offset == 0)
+ VSETATTR (var, att_invisible);
+ }
+ if (var == 0)
+ {
+ /* Has to appear in brackets */
+ NEXT_VARIABLE ();
+ }
+ created_var = 1;
+ }
+ /* Nameref variable error checking. */
+
+ /* Can't take an existing array variable and make it a nameref */
+ else if ((array_p (var) || assoc_p (var)) && (flags_on & att_nameref))
+ {
+ builtin_error (_("%s: reference variable cannot be an array"), name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ /* Can't have an invalid identifier as nameref value */
+ else if (nameref_p (var) && (flags_on & att_nameref) == 0 && (flags_off & att_nameref) == 0 && offset && valid_nameref_value (value, 1) == 0)
+ {
+ builtin_error (_("`%s': invalid variable name for name reference"), value);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ /* Can't make an existing variable a nameref if its current value is not
+ a valid identifier. Check of offset is to allow an assignment to a
+ nameref var as part of the declare word to override existing value. */
+ else if ((flags_on & att_nameref) && nameref_p (var) == 0 && var_isset (var) && offset == 0 && valid_nameref_value (value_cell (var), 0) == 0)
+ {
+ builtin_error (_("`%s': invalid variable name for name reference"), value_cell (var));
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ /* Can't make an existing readonly variable a nameref. */
+ else if ((flags_on & att_nameref) && readonly_p (var))
+ {
+ sh_readonly (name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+
+ /* Readonly variable error checking. */
+
+ /* Cannot use declare +r to turn off readonly attribute. */
+ if (readonly_p (var) && (flags_off & att_readonly))
+ {
+ sh_readonly (name_cell (var));
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ /* Cannot use declare to assign value to readonly or noassign variable. */
+ else if ((readonly_p (var) || noassign_p (var)) && offset)
+ {
+ if (readonly_p (var))
+ sh_readonly (name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+
+#if defined (ARRAY_VARS)
+ /* make declare a[2]=foo as similar to a[2]=foo as possible if a is
+ already an array or assoc variable. */
+ if (array_subscript_assignment && array_exists && creating_array == 0)
+ simple_array_assign = 1;
+ else if ((making_array_special || creating_array || array_exists) && offset)
+ {
+ int vlen;
+ vlen = STRLEN (value);
+/*itrace("declare_builtin: name = %s value = %s flags = %d", name, value, wflags);*/
+
+ /* Print a warning for a construct like
+ declare -a array='(quoted compound value)'
+ if the array variable doesn't already exist. */
+ if (shell_compatibility_level > 43 && (wflags & W_COMPASSIGN) == 0 &&
+ value[0] == '(' && value[vlen-1] == ')')
+ {
+ /* The warning is only printed when using compound assignment
+ to an array variable that doesn't already exist. We use
+ creating_array to allow things like
+ declare -a foo$bar='(abc)' to work. */
+ if (array_exists == 0 && creating_array == 0)
+ internal_warning (_("%s: quoted compound array assignment deprecated"), list->word->word);
+ compound_array_assign = array_exists || creating_array;
+ simple_array_assign = making_array_special;
+ }
+ else if (value[0] == '(' && value[vlen-1] == ')' && (shell_compatibility_level < 44 || (wflags & W_COMPASSIGN)))
+ compound_array_assign = 1;
+ else
+ simple_array_assign = 1;
+ }
+
+ /* Array variable error checking. */
+
+ /* Cannot use declare +a name or declare +A name to remove an array variable. */
+ if (((flags_off & att_array) && array_p (var)) || ((flags_off & att_assoc) && assoc_p (var)))
+ {
+ builtin_error (_("%s: cannot destroy array variables in this way"), name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ else if ((flags_on & att_array) && assoc_p (var))
+ {
+ builtin_error (_("%s: cannot convert associative to indexed array"), name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ else if ((flags_on & att_assoc) && array_p (var))
+ {
+ builtin_error (_("%s: cannot convert indexed to associative array"), name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+
+ /* ksh93 compat: turning on nameref attribute turns off -ilu */
+ if (flags_on & att_nameref)
+ VUNSETATTR (var, att_integer|att_uppercase|att_lowercase|att_capcase);
+
+ /* declare -A name[[n]] makes name an associative array variable. */
+ if (flags_on & att_assoc)
+ {
+ if (assoc_p (var) == 0)
+ var = convert_var_to_assoc (var);
+ }
+ /* declare -a name[[n]] or declare name[n] makes NAME an indexed
+ array variable. */
+ else if ((making_array_special || (flags_on & att_array)) && array_p (var) == 0 && assoc_p (var) == 0)
+ var = convert_var_to_array (var);
+#endif /* ARRAY_VARS */
+
+ /* XXX - we note that we are turning on nameref attribute and defer
+ setting it until the assignment has been made so we don't do an
+ inadvertent nameref lookup. Might have to do the same thing for
+ flags_off&att_nameref. */
+ /* XXX - ksh93 makes it an error to set a readonly nameref variable
+ using a single typeset command. */
+ onref = (flags_on & att_nameref);
+ flags_on &= ~att_nameref;
+#if defined (ARRAY_VARS)
+ /* I don't believe this condition ever tests true, but array variables
+ may not be namerefs */
+ if (array_p (var) || assoc_p (var) || (offset && compound_array_assign)
+ || simple_array_assign)
+ onref = 0;
+#endif
+
+ /* ksh93 seems to do this */
+ offref = (flags_off & att_nameref);
+ flags_off &= ~att_nameref;
+
+ VSETATTR (var, flags_on);
+ VUNSETATTR (var, flags_off);
+
+#if defined (ARRAY_VARS)
+ if (offset && compound_array_assign)
+ assign_array_var_from_string (var, value, aflags|ASS_FORCE);
+ else if (simple_array_assign && subscript_start)
+ {
+ int local_aflags;
+ /* declare [-aA] name[N]=value */
+ *subscript_start = '['; /* ] */
+ /* XXX - problem here with appending */
+ local_aflags = aflags&ASS_APPEND;
+ local_aflags |= assoc_noexpand ? ASS_NOEXPAND : 0;
+ var = assign_array_element (name, value, local_aflags); /* XXX - not aflags */
+ *subscript_start = '\0';
+ if (var == 0) /* some kind of assignment error */
+ {
+ assign_error++;
+ flags_on |= onref;
+ flags_off |= offref;
+ NEXT_VARIABLE ();
+ }
+ }
+ else if (simple_array_assign)
+ {
+ /* let bind_{array,assoc}_variable take care of this. */
+ if (assoc_p (var))
+ bind_assoc_variable (var, name, savestring ("0"), value, aflags|ASS_FORCE);
+ else
+ bind_array_variable (name, 0, value, aflags|ASS_FORCE);
+ }
+ else
+#endif
+ /* XXX - no ASS_FORCE here */
+ /* bind_variable_value duplicates the essential internals of bind_variable() */
+ if (offset)
+ {
+ if (onref || nameref_p (var))
+ aflags |= ASS_NAMEREF;
+ v = bind_variable_value (var, value, aflags);
+ if (v == 0 && (onref || nameref_p (var)))
+ {
+ if (valid_nameref_value (value, 1) == 0)
+ sh_invalidid (value);
+ assign_error++;
+ /* XXX - unset this variable? or leave it as normal var? */
+ if (created_var)
+ delete_var (var->name, mkglobal ? global_variables : shell_variables);
+ flags_on |= onref; /* undo change from above */
+ flags_off |= offref;
+ NEXT_VARIABLE ();
+ }
+ }
+
+ /* If we found this variable in the temporary environment, as with
+ `var=value declare -x var', make sure it is treated identically
+ to `var=value export var'. Do the same for `declare -r' and
+ `readonly'. Preserve the attributes, except for att_tempvar. */
+ /* XXX -- should this create a variable in the global scope, or
+ modify the local variable flags? ksh93 has it modify the
+ global scope.
+ Need to handle case like in set_var_attribute where a temporary
+ variable is in the same table as the function local vars. */
+ if ((flags_on & (att_exported|att_readonly)) && tempvar_p (var))
+ {
+ SHELL_VAR *tv;
+ char *tvalue;
+
+ tv = find_tempenv_variable (var->name);
+ if (tv)
+ {
+ tvalue = var_isset (var) ? savestring (value_cell (var)) : savestring ("");
+ tv = bind_variable (var->name, tvalue, 0);
+ if (tv)
+ {
+ tv->attributes |= var->attributes & ~att_tempvar;
+ if (tv->context > 0)
+ VSETATTR (tv, att_propagate);
+ }
+ free (tvalue);
+ }
+ VSETATTR (var, att_propagate);
+ }
+
+ /* Turn on nameref attribute we deferred above. */
+ /* XXX - should we turn on the noassign attribute for consistency with
+ ksh93 when we turn on the nameref attribute? */
+ VSETATTR (var, onref);
+ flags_on |= onref;
+ VUNSETATTR (var, offref);
+ flags_off |= offref;
+ /* Yuck. ksh93 compatibility. XXX - need to investigate more but
+ definitely happens when turning off nameref attribute on nameref
+ (see comments above). Under no circumstances allow this to turn
+ off readonly attribute on readonly nameref variable. */
+ if (refvar)
+ {
+ if (flags_off & att_readonly)
+ flags_off &= ~att_readonly;
+ VUNSETATTR (refvar, flags_off);
+ }
+
+ stupidly_hack_special_variables (name);
+
+ NEXT_VARIABLE ();
+ }
+
+ return (assign_error ? EX_BADASSIGN
+ : ((any_failed == 0) ? EXECUTION_SUCCESS
+ : EXECUTION_FAILURE));
+}
diff --git a/builtins/declare.def.3 b/builtins/declare.def.3
new file mode 100644
index 00000000..927e4ea2
--- /dev/null
+++ b/builtins/declare.def.3
@@ -0,0 +1,1059 @@
+This file is declare.def, from which is created declare.c.
+It implements the builtins "declare" and "local" in Bash.
+
+Copyright (C) 1987-2021 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 .
+
+$PRODUCES declare.c
+
+$BUILTIN declare
+$FUNCTION declare_builtin
+$SHORT_DOC declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]
+Set variable values and attributes.
+
+Declare variables and give them attributes. If no NAMEs are given,
+display the attributes and values of all variables.
+
+Options:
+ -f restrict action or display to function names and definitions
+ -F restrict display to function names only (plus line number and
+ source file when debugging)
+ -g create global variables when used in a shell function; otherwise
+ ignored
+ -I if creating a local variable, inherit the attributes and value
+ of a variable with the same name at a previous scope
+ -p display the attributes and value of each NAME
+
+Options which set attributes:
+ -a to make NAMEs indexed arrays (if supported)
+ -A to make NAMEs associative arrays (if supported)
+ -i to make NAMEs have the `integer' attribute
+ -l to convert the value of each NAME to lower case on assignment
+ -n make NAME a reference to the variable named by its value
+ -r to make NAMEs readonly
+ -t to make NAMEs have the `trace' attribute
+ -u to convert the value of each NAME to upper case on assignment
+ -x to make NAMEs export
+
+Using `+' instead of `-' turns off the given attribute.
+
+Variables with the integer attribute have arithmetic evaluation (see
+the `let' command) performed when the variable is assigned a value.
+
+When used in a function, `declare' makes NAMEs local, as with the `local'
+command. The `-g' option suppresses this behavior.
+
+Exit Status:
+Returns success unless an invalid option is supplied or a variable
+assignment error occurs.
+$END
+
+$BUILTIN typeset
+$FUNCTION declare_builtin
+$SHORT_DOC typeset [-aAfFgiIlnrtux] [-p] name[=value] ...
+Set variable values and attributes.
+
+A synonym for `declare'. See `help declare'.
+$END
+
+#include
+
+#if defined (HAVE_UNISTD_H)
+# ifdef _MINIX
+# include
+# endif
+# include
+#endif
+
+#include
+
+#include "../bashansi.h"
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "../flags.h"
+#include "common.h"
+#include "builtext.h"
+#include "bashgetopt.h"
+
+static SHELL_VAR *declare_find_variable PARAMS((const char *, int, int));
+static char *declare_build_newname PARAMS((char *, char *, int, char *, int));
+static char *declare_transform_name PARAMS((char *, int, int));
+
+static int declare_internal PARAMS((register WORD_LIST *, int));
+
+/* Declare or change variable attributes. */
+int
+declare_builtin (list)
+ register WORD_LIST *list;
+{
+ return (declare_internal (list, 0));
+}
+
+$BUILTIN local
+$FUNCTION local_builtin
+$SHORT_DOC local [option] name[=value] ...
+Define local variables.
+
+Create a local variable called NAME, and give it VALUE. OPTION can
+be any option accepted by `declare'.
+
+Local variables can only be used within a function; they are visible
+only to the function where they are defined and its children.
+
+Exit Status:
+Returns success unless an invalid option is supplied, a variable
+assignment error occurs, or the shell is not executing a function.
+$END
+int
+local_builtin (list)
+ register WORD_LIST *list;
+{
+ /* Catch a straight `local --help' before checking function context */
+ if (list && list->word && STREQ (list->word->word, "--help"))
+ {
+ builtin_help ();
+ return (EX_USAGE);
+ }
+
+ if (variable_context)
+ return (declare_internal (list, 1));
+ else
+ {
+ builtin_error (_("can only be used in a function"));
+ return (EXECUTION_FAILURE);
+ }
+}
+
+#if defined (ARRAY_VARS)
+# define DECLARE_OPTS "+acfgilnprtuxAFGI"
+#else
+# define DECLARE_OPTS "+cfgilnprtuxFGI"
+#endif
+
+static SHELL_VAR *
+declare_find_variable (name, mkglobal, chklocal)
+ const char *name;
+ int mkglobal, chklocal;
+{
+ SHELL_VAR *var;
+
+ if (mkglobal == 0)
+ return (find_variable (name));
+ else if (chklocal)
+ {
+ var = find_variable (name);
+ if (var && local_p (var) && var->context == variable_context)
+ return var;
+ return (find_global_variable (name));
+ }
+ else
+ return (find_global_variable (name));
+}
+
+/* Build a new string
+ NAME[SUBSCRIPT][[+]=VALUE]
+ from expanding a nameref into NAME */
+static char *
+declare_build_newname (name, subscript_start, offset, value, aflags)
+ char *name, *subscript_start;
+ int offset;
+ char *value;
+ int aflags;
+{
+ size_t namelen, savelen;
+ char *ret;
+
+ savelen = namelen = strlen (name);
+ if (subscript_start)
+ {
+ *subscript_start = '['; /* ] */
+ namelen += strlen (subscript_start);
+ }
+ ret = xmalloc (namelen + 2 + strlen (value) + 1);
+ strcpy (ret, name);
+ if (subscript_start)
+ strcpy (ret + savelen, subscript_start);
+ if (offset)
+ {
+ if (aflags & ASS_APPEND)
+ ret[namelen++] = '+';
+ ret[namelen++] = '=';
+ if (value && *value)
+ strcpy (ret + namelen, value);
+ else
+ ret[namelen] = '\0';
+ }
+
+ return (ret);
+}
+
+static char *
+declare_transform_name (name, flags_on, flags_off)
+ char *name;
+ int flags_on, flags_off;
+{
+ SHELL_VAR *var, *refvar;
+ char *newname;
+
+ var = find_variable (name);
+ if (var == 0)
+ newname = nameref_transform_name (name, ASS_MKLOCAL);
+ else if ((flags_on & att_nameref) == 0 && (flags_off & att_nameref) == 0)
+ {
+ /* Ok, we're following namerefs here, so let's make sure that if
+ we followed one, it was at the same context (see below for
+ more details). */
+ refvar = find_variable_last_nameref (name, 1);
+ newname = (refvar && refvar->context != variable_context) ? name : name_cell (var);
+ refvar = (SHELL_VAR *)NULL;
+ }
+ else
+ newname = name; /* dealing with nameref attribute */
+
+ return (newname);
+}
+
+/* The workhorse function. */
+static int
+declare_internal (list, local_var)
+ register WORD_LIST *list;
+ int local_var;
+{
+ int flags_on, flags_off, *flags;
+ int any_failed, assign_error, pflag, nodefs, opt, onref, offref;
+ int mkglobal, chklocal, inherit_flag;
+ char *t, *subscript_start;
+ SHELL_VAR *var, *refvar, *v;
+ FUNCTION_DEF *shell_fn;
+
+ flags_on = flags_off = any_failed = assign_error = pflag = nodefs = 0;
+ mkglobal = chklocal = inherit_flag = 0;
+ refvar = (SHELL_VAR *)NULL;
+ reset_internal_getopt ();
+ while ((opt = internal_getopt (list, DECLARE_OPTS)) != -1)
+ {
+ flags = list_opttype == '+' ? &flags_off : &flags_on;
+
+ /* If you add options here, see whether or not they need to be added to
+ the loop in subst.c:shell_expand_word_list() */
+ switch (opt)
+ {
+ case 'a':
+#if defined (ARRAY_VARS)
+ *flags |= att_array;
+ break;
+#else
+ builtin_usage ();
+ return (EX_USAGE);
+#endif
+ case 'A':
+#if defined (ARRAY_VARS)
+ *flags |= att_assoc;
+ break;
+#else
+ builtin_usage ();
+ return (EX_USAGE);
+#endif
+ case 'p':
+ pflag++;
+ break;
+ case 'F':
+ nodefs++;
+ *flags |= att_function;
+ break;
+ case 'f':
+ *flags |= att_function;
+ break;
+ case 'G':
+ if (flags == &flags_on)
+ chklocal = 1;
+ /*FALLTHROUGH*/
+ case 'g':
+ if (flags == &flags_on)
+ mkglobal = 1;
+ break;
+ case 'i':
+ *flags |= att_integer;
+ break;
+ case 'n':
+ *flags |= att_nameref;
+ break;
+ case 'r':
+ *flags |= att_readonly;
+ break;
+ case 't':
+ *flags |= att_trace;
+ break;
+ case 'x':
+ *flags |= att_exported;
+ array_needs_making = 1;
+ break;
+#if defined (CASEMOD_ATTRS)
+# if defined (CASEMOD_CAPCASE)
+ case 'c':
+ *flags |= att_capcase;
+ if (flags == &flags_on)
+ flags_off |= att_uppercase|att_lowercase;
+ break;
+# endif
+ case 'l':
+ *flags |= att_lowercase;
+ if (flags == &flags_on)
+ flags_off |= att_capcase|att_uppercase;
+ break;
+ case 'u':
+ *flags |= att_uppercase;
+ if (flags == &flags_on)
+ flags_off |= att_capcase|att_lowercase;
+ break;
+#endif /* CASEMOD_ATTRS */
+ case 'I':
+ inherit_flag = MKLOC_INHERIT;
+ break;
+ CASE_HELPOPT;
+ default:
+ builtin_usage ();
+ return (EX_USAGE);
+ }
+ }
+
+ list = loptend;
+
+ /* If there are no more arguments left, then we just want to show
+ some variables. */
+ if (list == 0) /* declare -[aAfFirtx] */
+ {
+ /* Show local variables defined at this context level if this is
+ the `local' builtin. */
+ if (local_var)
+ show_local_var_attributes (0, nodefs); /* XXX - fix up args later */
+ else if (pflag && (flags_on == 0 || flags_on == att_function))
+ show_all_var_attributes (flags_on == 0, nodefs);
+ else if (flags_on == 0)
+ return (set_builtin ((WORD_LIST *)NULL));
+ else
+ set_or_show_attributes ((WORD_LIST *)NULL, flags_on, nodefs);
+
+ return (sh_chkwrite (EXECUTION_SUCCESS));
+ }
+
+ if (pflag) /* declare -p [-aAfFirtx] name [name...] */
+ {
+ for (any_failed = 0; list; list = list->next)
+ {
+ if (flags_on & att_function)
+ pflag = show_func_attributes (list->word->word, nodefs);
+ else if (local_var)
+ pflag = show_localname_attributes (list->word->word, nodefs);
+ else
+ pflag = show_name_attributes (list->word->word, nodefs);
+ if (pflag)
+ {
+ sh_notfound (list->word->word);
+ any_failed++;
+ }
+ }
+ return (sh_chkwrite (any_failed ? EXECUTION_FAILURE : EXECUTION_SUCCESS));
+ }
+
+ /* Some option combinations that don't make any sense */
+ if ((flags_on & att_function) && (flags_on & (att_array|att_assoc|att_integer|att_nameref)))
+ {
+ char *optchar;
+
+ if (flags_on & att_nameref)
+ optchar = "-n";
+ else if (flags_on & att_integer)
+ optchar = "-i";
+ else if (flags_on & att_assoc)
+ optchar = "-A";
+ else if (flags_on & att_array)
+ optchar = "-a";
+
+ sh_invalidopt (optchar);
+ return (EXECUTION_FAILURE);
+ }
+
+#define NEXT_VARIABLE() free (name); list = list->next; continue
+
+ /* There are arguments left, so we are making variables. */
+ while (list) /* declare [-aAfFirx] name [name ...] */
+ {
+ char *value, *name, *oldname;
+ int offset, aflags, wflags, created_var;
+ int assoc_noexpand;
+#if defined (ARRAY_VARS)
+ int making_array_special, compound_array_assign, simple_array_assign;
+ int var_exists, array_exists, creating_array, array_subscript_assignment;
+#endif
+
+ name = savestring (list->word->word);
+ wflags = list->word->flags;
+#if defined (ARRAY_VARS)
+ assoc_noexpand = assoc_expand_once && (wflags & W_ASSIGNMENT);
+#else
+ assoc_noexpand = 0;
+#endif
+ offset = assignment (name, assoc_noexpand ? 2 : 0);
+ aflags = 0;
+ created_var = 0;
+
+ if (local_var && variable_context && STREQ (name, "-"))
+ {
+ var = make_local_variable ("-", 0);
+ FREE (value_cell (var)); /* just in case */
+ value = get_current_options ();
+ var_setvalue (var, value);
+ VSETATTR (var, att_invisible);
+ NEXT_VARIABLE ();
+ }
+
+ /* If we are declaring a function, then complain about it in some way.
+ We don't let people make functions by saying `typeset -f foo=bar'. */
+
+ /* Can't define functions using assignment statements */
+ if (offset && (flags_on & att_function)) /* declare -f [-rix] foo=bar */
+ {
+ builtin_error (_("cannot use `-f' to make functions"));
+ free (name);
+ return (EXECUTION_FAILURE);
+ }
+
+ /* There should be a way, however, to let people look at a particular
+ function definition by saying `typeset -f foo'. This is the only
+ place in this builtin where we deal with functions. */
+
+ if (flags_on & att_function)
+ {
+ /* Should we restrict this when the shell is in posix mode even if
+ the function was created before the shell entered posix mode?
+ Previous versions of the shell enforced the restriction. */
+ if (posixly_correct && legal_identifier (name) == 0)
+ {
+ sh_invalidid (name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+
+ var = find_function (name);
+
+ if (var)
+ {
+ if (readonly_p (var) && (flags_off & att_readonly))
+ {
+ builtin_error (_("%s: readonly function"), name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ /* declare -[Ff] name [name...] */
+ if (flags_on == att_function && flags_off == 0)
+ {
+#if defined (DEBUGGER)
+ if (nodefs && debugging_mode)
+ {
+ shell_fn = find_function_def (name_cell (var));
+ if (shell_fn)
+ printf ("%s %d %s\n", name_cell (var), shell_fn->line, shell_fn->source_file);
+ else
+ printf ("%s\n", name_cell (var));
+ }
+ else
+#endif /* DEBUGGER */
+ {
+ t = nodefs ? name_cell (var) : named_function_string (name, function_cell (var), FUNC_MULTILINE|FUNC_EXTERNAL);
+ printf ("%s\n", t);
+ any_failed = sh_chkwrite (any_failed);
+ }
+ }
+ else /* declare -[fF] -[rx] name [name...] */
+ {
+ VSETATTR (var, flags_on);
+ flags_off &= ~att_function; /* makes no sense */
+ VUNSETATTR (var, flags_off);
+ }
+ }
+ else
+ any_failed++;
+
+ NEXT_VARIABLE ();
+ }
+
+ if (offset) /* declare [-aAfFirx] name=value */
+ {
+ name[offset] = '\0';
+ value = name + offset + 1;
+ if (name[offset - 1] == '+')
+ {
+ aflags |= ASS_APPEND;
+ name[offset - 1] = '\0';
+ }
+ }
+ else
+ value = "";
+
+ /* Do some lexical error checking on the LHS and RHS of the assignment
+ that is specific to nameref variables. */
+ if (flags_on & att_nameref)
+ {
+#if defined (ARRAY_VARS)
+ if (valid_array_reference (name, 0))
+ {
+ builtin_error (_("%s: reference variable cannot be an array"), name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ else
+#endif
+ /* disallow self references at global scope, warn at function scope */
+ if (check_selfref (name, value, 0))
+ {
+ if (variable_context == 0)
+ {
+ builtin_error (_("%s: nameref variable self references not allowed"), name);
+ assign_error++; /* XXX any_failed++ instead? */
+ NEXT_VARIABLE ();
+ }
+ else
+ builtin_warning (_("%s: circular name reference"), name);
+ }
+ if (value && *value && (aflags & ASS_APPEND) == 0 && valid_nameref_value (value, 1) == 0)
+ {
+ builtin_error (_("`%s': invalid variable name for name reference"), value);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+ }
+
+restart_new_var_name:
+
+ /* The rest of the loop body deals with declare -[aAinrx] name [name...]
+ where each NAME can be an assignment statement. */
+
+ subscript_start = (char *)NULL; /* used below */
+#if defined (ARRAY_VARS)
+ /* Determine whether we are creating or assigning an array variable */
+ var_exists = array_exists = creating_array = 0;
+ compound_array_assign = simple_array_assign = 0;
+ array_subscript_assignment = 0;
+ if (t = strchr (name, '[')) /* ] */
+ {
+ /* If offset != 0 we have already validated any array reference
+ because assignment() calls skipsubscript() */
+ if (offset == 0 && valid_array_reference (name, 0) == 0)
+ {
+ sh_invalidid (name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+ subscript_start = t;
+ *t = '\0';
+ making_array_special = 1; /* XXX - should this check offset? */
+ array_subscript_assignment = offset != 0;
+ }
+ else
+ making_array_special = 0;
+#endif
+
+ /* Ensure the argument is a valid, well-formed shell identifier. */
+ if (legal_identifier (name) == 0)
+ {
+ sh_invalidid (name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+
+ /* If VARIABLE_CONTEXT has a non-zero value, then we are executing
+ inside of a function. This means we should make local variables,
+ not global ones. */
+
+ /* XXX - this has consequences when we're making a local copy of a
+ variable that was in the temporary environment. Watch out
+ for this. */
+ refvar = (SHELL_VAR *)NULL;
+ if (variable_context && mkglobal == 0)
+ {
+ char *newname;
+
+ /* We don't check newname for validity here. We should not have an
+ invalid name assigned as the value of a nameref, but this could
+ cause problems. */
+ newname = declare_transform_name (name, flags_on, flags_off);
+
+#if defined (ARRAY_VARS)
+ /* Pass 1 as second argument to make_local_{assoc,array}_variable
+ return an existing {array,assoc} variable to be flagged as an
+ error below. */
+ if (flags_on & att_assoc)
+ var = make_local_assoc_variable (newname, MKLOC_ARRAYOK|inherit_flag);
+ else if ((flags_on & att_array) || making_array_special)
+ var = make_local_array_variable (newname, MKLOC_ASSOCOK|inherit_flag);
+ else
+#endif
+ if (offset == 0 && (flags_on & att_nameref))
+ {
+ /* First look for refvar at current scope */
+ refvar = find_variable_last_nameref (name, 1);
+ /* VARIABLE_CONTEXT != 0, so we are attempting to create or modify
+ the attributes for a local variable at the same scope. If we've
+ used a reference from a previous context to resolve VAR, we
+ want to throw REFVAR and VAR away and create a new local var. */
+ if (refvar && refvar->context != variable_context)
+ {
+ refvar = 0;
+ var = make_local_variable (name, inherit_flag);
+ }
+ else if (refvar && refvar->context == variable_context)
+ var = refvar;
+ /* Maybe we just want to create a new local variable */
+ else if (var == 0 || var->context != variable_context)
+ var = make_local_variable (name, inherit_flag);
+ /* otherwise we have a var at the right context */
+ }
+ else
+ /* XXX - check name for validity here with valid_nameref_value? */
+ var = make_local_variable ((flags_on & att_nameref) ? name : newname, inherit_flag); /* sets att_invisible for new vars */
+
+ if (var == 0)
+ {
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ if (var && nameref_p (var) && readonly_p (var) && nameref_cell (var) && (flags_off & att_nameref))
+ {
+ sh_readonly (name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ }
+ else
+ var = (SHELL_VAR *)NULL;
+
+ /* VAR is non-null if we just created or fetched a local variable. */
+
+ /* Here's what ksh93 seems to do as of the 2012 version: if we are
+ using declare -n to modify the value of an existing nameref
+ variable, don't follow the nameref chain at all and just search
+ for a nameref at the current context. If we have a nameref,
+ modify its value (changing which variable it references). */
+ if (var == 0 && (flags_on & att_nameref))
+ {
+ /* See if we are trying to modify an existing nameref variable,
+ but don't follow the nameref chain. */
+ var = mkglobal ? find_global_variable_noref (name) : find_variable_noref (name);
+ if (var && nameref_p (var) == 0)
+ var = 0;
+ }
+
+ /* However, if we're turning off the nameref attribute on an existing
+ nameref variable, we first follow the nameref chain to the end,
+ modify the value of the variable this nameref variable references
+ if there is an assignment statement argument,
+ *CHANGING ITS VALUE AS A SIDE EFFECT*, then turn off the nameref
+ flag *LEAVING THE NAMEREF VARIABLE'S VALUE UNCHANGED* */
+ else if (var == 0 && (flags_off & att_nameref))
+ {
+ /* See if we are trying to modify an existing nameref variable */
+ refvar = mkglobal ? find_global_variable_last_nameref (name, 0) : find_variable_last_nameref (name, 0);
+ if (refvar && nameref_p (refvar) == 0)
+ refvar = 0;
+ /* If the nameref is readonly but doesn't have a value, ksh93
+ allows the nameref attribute to be removed. If it's readonly
+ and has a value, even if the value doesn't reference an
+ existing variable, we disallow the modification */
+ if (refvar && nameref_cell (refvar) && readonly_p (refvar))
+ {
+ sh_readonly (name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+
+ /* If all we're doing is turning off the nameref attribute, don't
+ bother with VAR at all, whether it exists or not. Just turn it
+ off and go on. */
+ if (refvar && flags_on == 0 && offset == 0 && flags_off == att_nameref)
+ {
+ VUNSETATTR (refvar, att_nameref);
+ NEXT_VARIABLE ();
+ }
+
+ if (refvar)
+ var = declare_find_variable (nameref_cell (refvar), mkglobal, 0);
+ }
+#if defined (ARRAY_VARS)
+ /* If we have an array assignment to a nameref, remove the nameref
+ attribute and go on. This handles
+ declare -n xref[=value]; declare [-a] xref[1]=one */
+ else if (var == 0 && offset && array_subscript_assignment)
+ {
+ var = mkglobal ? find_global_variable_noref (name) : find_variable_noref (name);
+ if (var && nameref_p (var))
+ {
+ internal_warning (_("%s: removing nameref attribute"), name);
+ FREE (value_cell (var)); /* XXX - bash-4.3 compat */
+ var_setvalue (var, (char *)NULL);
+ VUNSETATTR (var, att_nameref);
+ }
+ }
+#endif
+
+ /* See if we are trying to set flags or value (or create) for an
+ existing nameref that points to a non-existent variable: e.g.,
+ declare -n foo=bar
+ unset foo # unsets bar
+ declare -i foo
+ foo=4+4
+ declare -p foo
+ */
+ if (var == 0 && (mkglobal || flags_on || flags_off || offset))
+ {
+ refvar = mkglobal ? find_global_variable_last_nameref (name, 0) : find_variable_last_nameref (name, 0);
+ if (refvar && nameref_p (refvar) == 0)
+ refvar = 0;
+ if (refvar)
+ var = declare_find_variable (nameref_cell (refvar), mkglobal, 0);
+ if (refvar && var == 0)
+ {
+ oldname = name; /* need to free this */
+
+ /* I'm not sure subscript_start is ever non-null here. In any
+ event, build a new name from the nameref value, including any
+ subscript, and add the [[+]=value] if offset != 0 */
+ name = declare_build_newname (nameref_cell (refvar), subscript_start, offset, value, aflags);
+
+ if (offset)
+ {
+ offset = assignment (name, 0);
+ /* If offset was valid previously, but substituting the
+ the nameref value results in an invalid assignment,
+ throw an invalid identifier error */
+ if (offset == 0)
+ {
+ free (oldname);
+ sh_invalidid (name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+ name[(aflags & ASS_APPEND) ? offset - 1 : offset] = '\0';
+ value = name + offset + 1;
+ }
+ free (oldname);
+
+ /* OK, let's turn off the nameref attribute.
+ Now everything else applies to VAR. */
+ if (flags_off & att_nameref)
+ VUNSETATTR (refvar, att_nameref);
+
+ goto restart_new_var_name;
+ /* NOTREACHED */
+ }
+ }
+ if (var == 0)
+ var = declare_find_variable (name, mkglobal, chklocal);
+
+ /* At this point, VAR is the variable we are dealing with; REFVAR is the
+ nameref variable we dereferenced to get VAR, if any. */
+#if defined (ARRAY_VARS)
+ var_exists = var != 0;
+ array_exists = var && (array_p (var) || assoc_p (var));
+ creating_array = flags_on & (att_array|att_assoc);
+#endif
+
+ /* Make a new variable if we need to. */
+ if (var == 0)
+ {
+#if defined (ARRAY_VARS)
+ if (flags_on & att_assoc)
+ {
+ var = make_new_assoc_variable (name);
+ if (var && offset == 0)
+ VSETATTR (var, att_invisible);
+ }
+ else if ((flags_on & att_array) || making_array_special)
+ {
+ var = make_new_array_variable (name);
+ if (var && offset == 0)
+ VSETATTR (var, att_invisible);
+ }
+ else
+#endif
+ {
+ var = mkglobal ? bind_global_variable (name, (char *)NULL, ASS_FORCE) : bind_variable (name, (char *)NULL, ASS_FORCE);
+ if (var && offset == 0)
+ VSETATTR (var, att_invisible);
+ }
+ if (var == 0)
+ {
+ /* Has to appear in brackets */
+ NEXT_VARIABLE ();
+ }
+ created_var = 1;
+ }
+
+ /* Nameref variable error checking. */
+
+ /* Can't take an existing array variable and make it a nameref */
+ else if ((array_p (var) || assoc_p (var)) && (flags_on & att_nameref))
+ {
+ builtin_error (_("%s: reference variable cannot be an array"), name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ /* Can't have an invalid identifier as nameref value */
+ else if (nameref_p (var) && (flags_on & att_nameref) == 0 && (flags_off & att_nameref) == 0 && offset && valid_nameref_value (value, 1) == 0)
+ {
+ builtin_error (_("`%s': invalid variable name for name reference"), value);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ /* Can't make an existing variable a nameref if its current value is not
+ a valid identifier. Check of offset is to allow an assignment to a
+ nameref var as part of the declare word to override existing value. */
+ else if ((flags_on & att_nameref) && nameref_p (var) == 0 && var_isset (var) && offset == 0 && valid_nameref_value (value_cell (var), 0) == 0)
+ {
+ builtin_error (_("`%s': invalid variable name for name reference"), value_cell (var));
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ /* Can't make an existing readonly variable a nameref. */
+ else if ((flags_on & att_nameref) && readonly_p (var))
+ {
+ sh_readonly (name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+
+ /* Readonly variable error checking. */
+
+ /* Cannot use declare +r to turn off readonly attribute. */
+ if (readonly_p (var) && (flags_off & att_readonly))
+ {
+ sh_readonly (name_cell (var));
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ /* Cannot use declare to assign value to readonly or noassign variable. */
+ else if ((readonly_p (var) || noassign_p (var)) && offset)
+ {
+ if (readonly_p (var))
+ sh_readonly (name);
+ assign_error++;
+ NEXT_VARIABLE ();
+ }
+
+#if defined (ARRAY_VARS)
+ /* Array variable error checking. */
+
+ /* Cannot use declare +a name or declare +A name to remove an array variable. */
+ if (((flags_off & att_array) && array_p (var)) || ((flags_off & att_assoc) && assoc_p (var)))
+ {
+ builtin_error (_("%s: cannot destroy array variables in this way"), name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ else if ((flags_on & att_array) && assoc_p (var))
+ {
+ builtin_error (_("%s: cannot convert associative to indexed array"), name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+ else if ((flags_on & att_assoc) && array_p (var))
+ {
+ builtin_error (_("%s: cannot convert indexed to associative array"), name);
+ any_failed++;
+ NEXT_VARIABLE ();
+ }
+
+ /* make declare a[2]=foo as similar to a[2]=foo as possible if a is
+ already an array or assoc variable. */
+ if (array_subscript_assignment && array_exists && creating_array == 0)
+ simple_array_assign = 1;
+ else if ((making_array_special || creating_array || array_exists) && offset)
+ {
+ int vlen;
+ vlen = STRLEN (value);
+/*itrace("declare_builtin: name = %s value = %s flags = %d", name, value, wflags);*/
+
+ /* Print a warning for a construct like
+ declare -a array='(quoted compound value)'
+ if the array variable doesn't already exist. */
+ if (shell_compatibility_level > 43 && (wflags & W_COMPASSIGN) == 0 &&
+ value[0] == '(' && value[vlen-1] == ')')
+ {
+ /* The warning is only printed when using compound assignment
+ to an array variable that doesn't already exist. We use
+ creating_array to allow things like
+ declare -a foo$bar='(abc)' to work. */
+ if (array_exists == 0 && creating_array == 0)
+ internal_warning (_("%s: quoted compound array assignment deprecated"), list->word->word);
+ compound_array_assign = array_exists || creating_array;
+ simple_array_assign = making_array_special;
+ }
+ else if (value[0] == '(' && value[vlen-1] == ')' && (shell_compatibility_level < 44 || (wflags & W_COMPASSIGN)))
+ compound_array_assign = 1;
+ else
+ simple_array_assign = 1;
+ }
+
+ /* declare -A name[[n]] makes name an associative array variable. */
+ if (flags_on & att_assoc)
+ {
+ if (assoc_p (var) == 0)
+ var = convert_var_to_assoc (var);
+ }
+ /* declare -a name[[n]] or declare name[n] makes NAME an indexed
+ array variable. */
+ else if ((making_array_special || (flags_on & att_array)) && array_p (var) == 0 && assoc_p (var) == 0)
+ var = convert_var_to_array (var);
+#endif /* ARRAY_VARS */
+
+ /* ksh93 compat: turning on nameref attribute turns off -ilu */
+ if (flags_on & att_nameref)
+ VUNSETATTR (var, att_integer|att_uppercase|att_lowercase|att_capcase);
+
+ /* XXX - we note that we are turning on nameref attribute and defer
+ setting it until the assignment has been made so we don't do an
+ inadvertent nameref lookup. Might have to do the same thing for
+ flags_off&att_nameref. */
+ /* XXX - ksh93 makes it an error to set a readonly nameref variable
+ using a single typeset command. */
+ onref = (flags_on & att_nameref);
+ flags_on &= ~att_nameref;
+#if defined (ARRAY_VARS)
+ /* I don't believe this condition ever tests true, but array variables
+ may not be namerefs */
+ if (array_p (var) || assoc_p (var) || (offset && compound_array_assign)
+ || simple_array_assign)
+ onref = 0;
+#endif
+
+ /* ksh93 seems to do this */
+ offref = (flags_off & att_nameref);
+ flags_off &= ~att_nameref;
+
+ VSETATTR (var, flags_on);
+ VUNSETATTR (var, flags_off);
+
+#if defined (ARRAY_VARS)
+ if (offset && compound_array_assign)
+ assign_array_var_from_string (var, value, aflags|ASS_FORCE);
+ else if (simple_array_assign && subscript_start)
+ {
+ int local_aflags;
+ /* declare [-aA] name[N]=value */
+ *subscript_start = '['; /* ] */
+ /* XXX - problem here with appending */
+ local_aflags = aflags&ASS_APPEND;
+ local_aflags |= assoc_noexpand ? ASS_NOEXPAND : 0;
+ var = assign_array_element (name, value, local_aflags); /* XXX - not aflags */
+ *subscript_start = '\0';
+ if (var == 0) /* some kind of assignment error */
+ {
+ assign_error++;
+ flags_on |= onref;
+ flags_off |= offref;
+ NEXT_VARIABLE ();
+ }
+ }
+ else if (simple_array_assign)
+ {
+ /* let bind_{array,assoc}_variable take care of this. */
+ if (assoc_p (var))
+ bind_assoc_variable (var, name, savestring ("0"), value, aflags|ASS_FORCE);
+ else
+ bind_array_variable (name, 0, value, aflags|ASS_FORCE);
+ }
+ else
+#endif
+ /* XXX - no ASS_FORCE here */
+ /* bind_variable_value duplicates the essential internals of bind_variable() */
+ if (offset)
+ {
+ if (onref || nameref_p (var))
+ aflags |= ASS_NAMEREF;
+ v = bind_variable_value (var, value, aflags);
+ if (v == 0 && (onref || nameref_p (var)))
+ {
+ if (valid_nameref_value (value, 1) == 0)
+ sh_invalidid (value);
+ assign_error++;
+ /* XXX - unset this variable? or leave it as normal var? */
+ if (created_var)
+ delete_var (name_cell (var), mkglobal ? global_variables : shell_variables);
+ flags_on |= onref; /* undo change from above */
+ flags_off |= offref;
+ NEXT_VARIABLE ();
+ }
+ }
+
+ /* If we found this variable in the temporary environment, as with
+ `var=value declare -x var', make sure it is treated identically
+ to `var=value export var'. Do the same for `declare -r' and
+ `readonly'. Preserve the attributes, except for att_tempvar. */
+ /* XXX -- should this create a variable in the global scope, or
+ modify the local variable flags? ksh93 has it modify the
+ global scope.
+ Need to handle case like in set_var_attribute where a temporary
+ variable is in the same table as the function local vars. */
+ if ((flags_on & (att_exported|att_readonly)) && tempvar_p (var))
+ {
+ SHELL_VAR *tv;
+ char *tvalue;
+
+ tv = find_tempenv_variable (name_cell (var));
+ if (tv)
+ {
+ tvalue = var_isset (var) ? savestring (value_cell (var)) : savestring ("");
+ tv = bind_variable (name_cell (var), tvalue, 0);
+ if (tv)
+ {
+ tv->attributes |= var->attributes & ~att_tempvar;
+ if (tv->context > 0)
+ VSETATTR (tv, att_propagate);
+ }
+ free (tvalue);
+ }
+ VSETATTR (var, att_propagate);
+ }
+
+ /* Turn on nameref attribute we deferred above. */
+ /* XXX - should we turn on the noassign attribute for consistency with
+ ksh93 when we turn on the nameref attribute? */
+ VSETATTR (var, onref);
+ flags_on |= onref;
+ VUNSETATTR (var, offref);
+ flags_off |= offref;
+ /* Yuck. ksh93 compatibility. XXX - need to investigate more but
+ definitely happens when turning off nameref attribute on nameref
+ (see comments above). Under no circumstances allow this to turn
+ off readonly attribute on readonly nameref variable. */
+ if (refvar)
+ {
+ if (flags_off & att_readonly)
+ flags_off &= ~att_readonly;
+ VUNSETATTR (refvar, flags_off);
+ }
+
+ stupidly_hack_special_variables (name);
+
+ NEXT_VARIABLE ();
+ }
+
+ return (assign_error ? EX_BADASSIGN
+ : ((any_failed == 0) ? EXECUTION_SUCCESS
+ : EXECUTION_FAILURE));
+}
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index cd1093ad..c61c0b58 100644
Binary files a/po/pt_BR.gmo and b/po/pt_BR.gmo differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 919784c3..cddc1d90 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -1,23 +1,23 @@
# Brazilian Portuguese translation for bash
-# Copyright (C) 2019 Free Software Foundation, Inc.
+# Copyright (C) 2021 Free Software Foundation, Inc.
# This file is distributed under the same license as the bash package.
# Halley Pacheco de Oliveira , 2002.
-# Rafael Fontenelle , 2015, 2016, 2018, 2019.
+# Rafael Fontenelle , 2015-2021.
+#
msgid ""
msgstr ""
-"Project-Id-Version: bash 5.0\n"
+"Project-Id-Version: bash 5.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2019-01-09 15:13-0200\n"
+"PO-Revision-Date: 2021-01-07 10:37-0300\n"
"Last-Translator: Rafael Fontenelle \n"
-"Language-Team: Brazilian Portuguese \n"
+"Language-Team: Brazilian Portuguese \n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Virtaal 1.0.0-beta1\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"X-Generator: Gtranslator 3.38.0\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
#: arrayfunc.c:66
@@ -57,8 +57,7 @@ msgstr "%s: impossível criar: %s"
#: bashline.c:4310
msgid "bash_execute_unix_command: cannot find keymap for command"
-msgstr ""
-"bash_execute_unix_command: impossível localizar mapa de teclas para comando"
+msgstr "bash_execute_unix_command: impossível localizar mapa de teclas para comando"
#: bashline.c:4459
#, c-format
@@ -76,9 +75,9 @@ msgid "%s: missing colon separator"
msgstr "%s faltando separador dois-pontos"
#: bashline.c:4555
-#, fuzzy, c-format
+#, c-format
msgid "`%s': cannot unbind in command keymap"
-msgstr "`%s': impossível desassociar (unbind)"
+msgstr "`%s': não foi desassociar no comando keymap"
#: braces.c:327
#, c-format
@@ -144,7 +143,6 @@ msgstr "significativo apenas em um loop de `for', `while' ou `until'"
# help caller
#: builtins/caller.def:136
-#, fuzzy
msgid ""
"Returns the context of the current subroutine call.\n"
" \n"
@@ -158,16 +156,11 @@ msgstr ""
"Retorna o contexto da chamada de sub-rotina atual.\n"
" \n"
" Sem EXPR, retorna \"$linha $arquivo\". Com EXPR, retorna\n"
-" \"$linha $sub-rotina $arquivo\"; essa informação extra pode ser usada "
-"para\n"
+" \"$linha $sub-rotina $arquivo\"; essa informação extra pode ser usada para\n"
" fornecer um rastro da pilha.\n"
" \n"
" O valor de EXPR indica quantos quadros de chamada deve voltar antes do\n"
-" atual; o quadro do topo é o quadro 0.\n"
-" \n"
-" Status de saída:\n"
-" Retorna 0, a menos que o shell não esteja executando uma função de\n"
-" shell ou EXPR seja inválida."
+" atual; o quadro do topo é o quadro 0."
#: builtins/cd.def:327
msgid "HOME not set"
@@ -250,9 +243,7 @@ msgstr "%s: especificação de sinal inválida"
#: builtins/common.c:259
#, c-format
msgid "`%s': not a pid or valid job spec"
-msgstr ""
-"`%s': não é um identificador de processo (pid) nem é uma especificação de "
-"trabalho válida"
+msgstr "`%s': não é um identificador de processo (pid) nem é uma especificação de trabalho válida"
#: builtins/common.c:266 error.c:510
#, c-format
@@ -427,9 +418,9 @@ msgid "cannot find %s in shared object %s: %s"
msgstr "impossível localizar %s no objeto compartilhado %s: %s"
#: builtins/enable.def:388
-#, fuzzy, c-format
+#, c-format
msgid "%s: dynamic builtin already loaded"
-msgstr "%s: não foi carregado dinamicamente"
+msgstr "%s: comando dinâmico já foi carregado"
#: builtins/enable.def:392
#, c-format
@@ -548,14 +539,13 @@ msgid ""
"'\n"
"\n"
msgstr ""
+"'\n"
+"\n"
#: builtins/help.def:185
#, c-format
-msgid ""
-"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'."
-msgstr ""
-"nenhum tópico de ajuda corresponde a `%s'. Tente `help help' ou `man -k %s' "
-"ou `info %s'."
+msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'."
+msgstr "nenhum tópico de ajuda corresponde a `%s'. Tente `help help' ou `man -k %s' ou `info %s'."
#: builtins/help.def:224
#, c-format
@@ -573,12 +563,10 @@ msgid ""
"A star (*) next to a name means that the command is disabled.\n"
"\n"
msgstr ""
-"Esses comandos shell são definidos internamente. Digite `help' para ver "
-"essa\n"
+"Esses comandos shell são definidos internamente. Digite `help' para ver essa\n"
"lista. Digite `help NOME' para descobrir mais sobre a função `NOME'.\n"
"Use `info bash' para descobrir mais sobre o shell em geral.\n"
-"Use `man -k' ou `info' para descobrir mais sobre comandos que não estão "
-"nesta\n"
+"Use `man -k' ou `info' para descobrir mais sobre comandos que não estão nesta\n"
"lista.\n"
"\n"
"Um asterisco (*) próximo ao nome significa que o comando está desabilitado.\n"
@@ -733,12 +721,10 @@ msgid ""
" \twith its position in the stack\n"
" \n"
" Arguments:\n"
-" +N\tDisplays the Nth entry counting from the left of the list shown "
-"by\n"
+" +N\tDisplays the Nth entry counting from the left of the list shown by\n"
" \tdirs when invoked without options, starting with zero.\n"
" \n"
-" -N\tDisplays the Nth entry counting from the right of the list shown "
-"by\n"
+" -N\tDisplays the Nth entry counting from the right of the list shown by\n"
"\tdirs when invoked without options, starting with zero."
msgstr ""
"Exibe a lista de diretórios atualmente memorizados. Diretórios são\n"
@@ -857,14 +843,11 @@ msgstr "erro de leitura: %d: %s"
#: builtins/return.def:68
msgid "can only `return' from a function or sourced script"
-msgstr ""
-"possível retornar (`return') apenas de uma função ou script carregado (com "
-"`source')"
+msgstr "possível retornar (`return') apenas de uma função ou script carregado (com `source')"
#: builtins/set.def:869
msgid "cannot simultaneously unset a function and a variable"
-msgstr ""
-"impossível simultaneamente remover definição de uma função e uma variável"
+msgstr "impossível simultaneamente remover definição de uma função e uma variável"
#: builtins/set.def:966
#, c-format
@@ -887,8 +870,7 @@ msgstr "número de shift"
#: builtins/shopt.def:310
msgid "cannot set and unset shell options simultaneously"
-msgstr ""
-"impossível simultaneamente definir e remover definição de opções do shell"
+msgstr "impossível simultaneamente definir e remover definição de opções do shell"
#: builtins/shopt.def:428
#, c-format
@@ -1028,9 +1010,7 @@ msgstr "%s: variável não associada"
#: eval.c:242
msgid "\atimed out waiting for input: auto-logout\n"
-msgstr ""
-"\atempo limite de espera excedido aguardando entrada: fim automático da "
-"sessão\n"
+msgstr "\atempo limite de espera excedido aguardando entrada: fim automático da sessão\n"
#: execute_cmd.c:537
#, c-format
@@ -1163,9 +1143,8 @@ msgid "invalid arithmetic base"
msgstr "base aritmética inválida"
#: expr.c:1582
-#, fuzzy
msgid "invalid integer constant"
-msgstr "%s: número de linhas inválido"
+msgstr "contante inteira inválida"
#: expr.c:1598
msgid "value too great for base"
@@ -1183,21 +1162,17 @@ msgstr "getcwd: impossível acessar os diretórios pais (anteriores)"
#: input.c:99 subst.c:6069
#, c-format
msgid "cannot reset nodelay mode for fd %d"
-msgstr ""
-"impossível redefinir modo `nodelay' para o descritor de arquivo (fd) %d"
+msgstr "impossível redefinir modo `nodelay' para o descritor de arquivo (fd) %d"
#: input.c:266
#, c-format
msgid "cannot allocate new file descriptor for bash input from fd %d"
-msgstr ""
-"impossível alocar novo descritor de arquivo (fd) para a entrada do `bash' a "
-"partir do fd %d"
+msgstr "impossível alocar novo descritor de arquivo (fd) para a entrada do `bash' a partir do fd %d"
#: input.c:274
#, c-format
msgid "save_bash_input: buffer already exists for new fd %d"
-msgstr ""
-"save_bash_input: buffer já existe para o novo descritor de arquivo (fd) %d"
+msgstr "save_bash_input: buffer já existe para o novo descritor de arquivo (fd) %d"
#: jobs.c:543
msgid "start_pipeline: pgrp pipe"
@@ -1206,19 +1181,17 @@ msgstr "start_pipeline: `pipe' de pgrp"
#: jobs.c:906
#, c-format
msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
-msgstr ""
+msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
#: jobs.c:959
#, c-format
msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
-msgstr ""
+msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
#: jobs.c:1283
#, c-format
msgid "forked pid %d appears in running job %d"
-msgstr ""
-"identificador de processo (pid) %d bifurcado (fork) aparece no trabalho em "
-"execução %d"
+msgstr "identificador de processo (pid) %d bifurcado (fork) aparece no trabalho em execução %d"
#: jobs.c:1402
#, c-format
@@ -1302,9 +1275,9 @@ msgid "wait_for_job: job %d is stopped"
msgstr "wait_for_job: trabalho %d está parado"
#: jobs.c:3564
-#, fuzzy, c-format
+#, c-format
msgid "%s: no current jobs"
-msgstr "%s: trabalho não existe"
+msgstr "%s: nenhum trabalho atual"
#: jobs.c:3571
#, c-format
@@ -1395,9 +1368,8 @@ msgid "free: underflow detected; mh_nbytes out of range"
msgstr "free: esvaziamento de pilha detectado; mh_nbytes fora do limite"
#: lib/malloc/malloc.c:1001
-#, fuzzy
msgid "free: underflow detected; magic8 corrupted"
-msgstr "free: esvaziamento de pilha detectado; mh_nbytes fora do limite"
+msgstr "free: esvaziamento de pilha detectado; magic8 corrompido"
#: lib/malloc/malloc.c:1009
msgid "free: start and end chunk sizes differ"
@@ -1412,9 +1384,8 @@ msgid "realloc: underflow detected; mh_nbytes out of range"
msgstr "realloc: esvaziamento de pilha detectado; mh_nbytes fora do limite"
#: lib/malloc/malloc.c:1141
-#, fuzzy
msgid "realloc: underflow detected; magic8 corrupted"
-msgstr "realloc: esvaziamento de pilha detectado; mh_nbytes fora do limite"
+msgstr "realloc: esvaziamento de pilha detectado; magic8 corrompido"
#: lib/malloc/malloc.c:1150
msgid "realloc: start and end chunk sizes differ"
@@ -1512,8 +1483,7 @@ msgstr "make_here_document: tipo da instrução incorreto %d"
#: make_cmd.c:657
#, c-format
msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
-msgstr ""
-"here-document na linha %d delimitado pelo fim do arquivo (desejava `%s')"
+msgstr "here-document na linha %d delimitado pelo fim do arquivo (desejava `%s')"
#: make_cmd.c:756
#, c-format
@@ -1522,11 +1492,8 @@ msgstr "make_redirection: instrução de redirecionamento `%d' fora do limite"
#: parse.y:2393
#, c-format
-msgid ""
-"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
-"truncated"
-msgstr ""
-"shell_getc: shell_input_line_size (%zu) excede SIZE_MAX (%lu): linha truncada"
+msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
+msgstr "shell_getc: shell_input_line_size (%zu) excede SIZE_MAX (%lu): linha truncada"
#: parse.y:2826
msgid "maximum here-document count exceeded"
@@ -1779,15 +1746,12 @@ msgstr "\t-%s ou -o opção\n"
#: shell.c:2068
#, c-format
msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
-msgstr ""
-"Digite `%s -c \"help set\"' para mais informações sobre as opções do shell.\n"
+msgstr "Digite `%s -c \"help set\"' para mais informações sobre as opções do shell.\n"
#: shell.c:2069
#, c-format
msgid "Type `%s -c help' for more information about shell builtin commands.\n"
-msgstr ""
-"Digite `%s -c help' para mais informações sobre os comandos internos do "
-"shell.\n"
+msgstr "Digite `%s -c help' para mais informações sobre os comandos internos do shell.\n"
#: shell.c:2070
#, c-format
@@ -1963,7 +1927,7 @@ msgstr "modo monitor HFT rescindido"
#: siglist.c:210
msgid "HFT sound sequence has completed"
-msgstr "a seqüência de som HFT foi completada"
+msgstr "a sequência de som HFT foi completada"
#: siglist.c:214
msgid "Information request"
@@ -2021,9 +1985,7 @@ msgstr "impossível criar um processo filho para substituição do comando"
#: subst.c:6423
msgid "command_substitute: cannot duplicate pipe as fd 1"
-msgstr ""
-"command_substitute: impossível duplicar o `pipe' como descritor de arquivo "
-"(fd) 1"
+msgstr "command_substitute: impossível duplicar o `pipe' como descritor de arquivo (fd) 1"
#: subst.c:6883 subst.c:9952
#, c-format
@@ -2066,11 +2028,8 @@ msgid "$%s: cannot assign in this way"
msgstr "$%s: impossível atribuir desta maneira"
#: subst.c:9814
-msgid ""
-"future versions of the shell will force evaluation as an arithmetic "
-"substitution"
-msgstr ""
-"versões futuras do shell vão forçar avaliação como um substituto aritmético"
+msgid "future versions of the shell will force evaluation as an arithmetic substitution"
+msgstr "versões futuras do shell vão forçar avaliação como um substituto aritmético"
#: subst.c:10367
#, c-format
@@ -2115,9 +2074,9 @@ msgid "missing `]'"
msgstr "faltando `]'"
#: test.c:899
-#, fuzzy, c-format
+#, c-format
msgid "syntax error: `%s' unexpected"
-msgstr "erro de sintaxe: `;' inesperado"
+msgstr "erro de sintaxe: `%s' inesperado"
#: trap.c:220
msgid "invalid signal number"
@@ -2126,8 +2085,7 @@ msgstr "número de sinal inválido"
#: trap.c:325
#, c-format
msgid "trap handler: maximum trap handler level exceeded (%d)"
-msgstr ""
-"manipulador de trap: excedido o nível máximo de manipulador de captura (%d)"
+msgstr "manipulador de trap: excedido o nível máximo de manipulador de captura (%d)"
#: trap.c:414
#, c-format
@@ -2136,11 +2094,8 @@ msgstr "run_pending_traps: valor incorreto em trap_list[%d]: %p"
#: trap.c:418
#, c-format
-msgid ""
-"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
-msgstr ""
-"run_pending_traps: manipulador de sinal é SIG_DFL, enviando novamente %d "
-"(%s) para mim mesmo"
+msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
+msgstr "run_pending_traps: manipulador de sinal é SIG_DFL, enviando novamente %d (%s) para mim mesmo"
#: trap.c:487
#, c-format
@@ -2202,8 +2157,7 @@ msgstr "pop_var_context: nenhum contexto em no global_variables"
#: variables.c:5424
msgid "pop_scope: head of shell_variables not a temporary environment scope"
-msgstr ""
-"pop_scope: cabeça de shell_variables não é um escopo de ambiente temporário"
+msgstr "pop_scope: cabeça de shell_variables não é um escopo de ambiente temporário"
#: variables.c:6387
#, c-format
@@ -2221,17 +2175,12 @@ msgid "%s: %s: compatibility value out of range"
msgstr "%s: %s: valor de compatibilidade fora dos limites"
#: version.c:46 version2.c:46
-#, fuzzy
msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Copyright (C) 2018 Free Software Foundation, Inc."
+msgstr "Copyright (C) 2020 Free Software Foundation, Inc."
#: version.c:47 version2.c:47
-msgid ""
-"License GPLv3+: GNU GPL version 3 or later \n"
-msgstr ""
-"Licença GPLv3+: GNU GPL versão 3 ou posterior .\n"
+msgid "License GPLv3+: GNU GPL version 3 or later \n"
+msgstr "Licença GPLv3+: GNU GPL versão 3 ou posterior .\n"
#: version.c:86 version2.c:86
#, c-format
@@ -2268,20 +2217,15 @@ msgstr "%s: %s:%d: impossível alocar %lu bytes"
#: builtins.c:45
msgid "alias [-p] [name[=value] ... ]"
-msgstr "alias [-p] [NOME[=VALOR] ... ]"
+msgstr "alias [-p] [nome[=valor] ... ]"
#: builtins.c:49
msgid "unalias [-a] name [name ...]"
-msgstr "unalias [-a] NOME [NOME ...]"
+msgstr "unalias [-a] nome [nome ...]"
#: builtins.c:53
-msgid ""
-"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-"
-"x keyseq:shell-command] [keyseq:readline-function or readline-command]"
-msgstr ""
-"bind [-lpsvPSVX] [-m MAPA-TECLAS] [-f ARQUIVO] [-q NOME] [-u NOME] [-r SEQ-"
-"TECLAS] [-x SEQ-TECLAS:COMANDO-SHELL] [SEQ-TECLAS:FUNÇÃO-DE-LINHA ou "
-"COMANDO-DE-LINHA]"
+msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]"
+msgstr "bind [-lpsvPSVX] [-m mapa-teclas] [-f arquivo] [-q nome] [-u nome] [-r seq-teclas] [-x seq-teclas:comando-shell] [seq-teclas:função-de-readline ou comando-readline]"
#: builtins.c:56
msgid "break [n]"
@@ -2312,14 +2256,12 @@ msgid "command [-pVv] command [arg ...]"
msgstr "command [-pVv] COMANDO [ARG ...]"
#: builtins.c:78
-#, fuzzy
msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgilnrtux] [-p] [NOME[=VALOR] ...]"
+msgstr "declare [-aAfFgiIlnrtux] [-p] [nome[=valor] ...]"
#: builtins.c:80
-#, fuzzy
msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgilnrtux] [-p] NOME[=VALOR] ..."
+msgstr "typeset [-aAfFgiIlnrtux] [-p] nome[=valor] ..."
#: builtins.c:82
msgid "local [option] name[=value] ..."
@@ -2342,14 +2284,12 @@ msgid "eval [arg ...]"
msgstr "eval [ARG ...]"
#: builtins.c:96
-#, fuzzy
msgid "getopts optstring name [arg ...]"
-msgstr "getopts OPTSTRING NOME [ARG]"
+msgstr "getopts optstring nome [arg ...]"
#: builtins.c:98
-#, fuzzy
msgid "exec [-cl] [-a name] [command [argument ...]] [redirection ...]"
-msgstr "exec [-cl] [-a NOME] [COMANDO [ARGUMENTOS ...]] [REDIRECIONAMENTO ...]"
+msgstr "exec [-cl] [-a nome] [comando [argumento ...]] [redirecionamento ...]"
#: builtins.c:100
msgid "exit [n]"
@@ -2361,8 +2301,7 @@ msgstr "logout [n]"
#: builtins.c:105
msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]"
-msgstr ""
-"fc [-e EDITOR] [-lnr] [PRIMEIRO] [ÚLTIMO] ou fc -s [ANTIGO=NOVO] [COMANDO]"
+msgstr "fc [-e EDITOR] [-lnr] [PRIMEIRO] [ÚLTIMO] ou fc -s [ANTIGO=NOVO] [COMANDO]"
#: builtins.c:109
msgid "fg [job_spec]"
@@ -2381,12 +2320,8 @@ msgid "help [-dms] [pattern ...]"
msgstr "help [-dms] [PADRÃO ...]"
#: builtins.c:123
-msgid ""
-"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg "
-"[arg...]"
-msgstr ""
-"history [-c] [-d POSIÇÃO] [n] ou history -anrw [ARQUIVO] ou history -ps ARG "
-"[ARG...]"
+msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]"
+msgstr "history [-c] [-d POSIÇÃO] [n] ou history -anrw [ARQUIVO] ou history -ps ARG [ARG...]"
#: builtins.c:127
msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]"
@@ -2397,24 +2332,16 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]"
msgstr "disown [-h] [-ar] [ESPEC-JOB ... | pid ...]"
#: builtins.c:134
-msgid ""
-"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l "
-"[sigspec]"
-msgstr ""
-"kill [-s SIGSPEC | -n SIGNUM | -SIGSPEC] PID | ESPEC-JOB ... ou kill -l "
-"[SIGSPEC]"
+msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]"
+msgstr "kill [-s SIGSPEC | -n SIGNUM | -SIGSPEC] PID | ESPEC-JOB ... ou kill -l [SIGSPEC]"
#: builtins.c:136
msgid "let arg [arg ...]"
msgstr "let ARG [ARG ...]"
#: builtins.c:138
-msgid ""
-"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p "
-"prompt] [-t timeout] [-u fd] [name ...]"
-msgstr ""
-"read [-ers] [-a ARRAY] [-d DELIM] [-i TEXTO] [-n NCHARS] [-N NCHARS] [-p "
-"CONFIRMAR ] [-t TEMPO] [-u FD] [NOME ...]"
+msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]"
+msgstr "read [-ers] [-a ARRAY] [-d DELIM] [-i TEXTO] [-n NCHARS] [-N NCHARS] [-p CONFIRMAR ] [-t TEMPO] [-u FD] [NOME ...]"
#: builtins.c:140
msgid "return [n]"
@@ -2442,11 +2369,11 @@ msgstr "shift [n]"
#: builtins.c:152
msgid "source filename [arguments]"
-msgstr "source ARQUIVO [ARGUMENTOS]"
+msgstr "source arquivo [argumentos]"
#: builtins.c:154
msgid ". filename [arguments]"
-msgstr ". ARQUIVO [ARGUMENTOS]"
+msgstr ". arquivo [argumentos]"
#: builtins.c:157
msgid "suspend [-f]"
@@ -2454,32 +2381,31 @@ msgstr "suspend [-f]"
#: builtins.c:160
msgid "test [expr]"
-msgstr "test [EXPR]"
+msgstr "test [expr]"
#: builtins.c:162
msgid "[ arg... ]"
-msgstr "[ ARG... ]"
+msgstr "[ arg... ]"
#: builtins.c:166
msgid "trap [-lp] [[arg] signal_spec ...]"
-msgstr "trap [-lp] [[ARG] ESPEC-SINAL ...]"
+msgstr "trap [-lp] [[arg] espec-sinal ...]"
#: builtins.c:168
msgid "type [-afptP] name [name ...]"
-msgstr "type [-apt] NOME [NOME ...]"
+msgstr "type [-apt] nome [nome ...]"
#: builtins.c:171
msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [LIMITE]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [limite]"
#: builtins.c:174
msgid "umask [-p] [-S] [mode]"
-msgstr "umask [-p] [-S] [MODO]"
+msgstr "umask [-p] [-S] [modo]"
#: builtins.c:177
-#, fuzzy
msgid "wait [-fn] [-p var] [id ...]"
-msgstr "wait [-fn] [ID ...]"
+msgstr "wait [-fn] [-p var] [id ...]"
#: builtins.c:181
msgid "wait [pid ...]"
@@ -2487,11 +2413,11 @@ msgstr "wait [PID ...]"
#: builtins.c:184
msgid "for NAME [in WORDS ... ] ; do COMMANDS; done"
-msgstr "for NOME [in PALAVRAS ...] ; do COMANDOS; done"
+msgstr "for NOME [in PALAVRAs ...] ; do COMANDOS; done"
#: builtins.c:186
msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done"
-msgstr "for (( EXP1; EXP2; EXP3 )); do COMANDOS; done"
+msgstr "for (( exp1; exp2; exp3 )); do COMANDOS; done"
#: builtins.c:188
msgid "select NAME [in WORDS ... ;] do COMMANDS; done"
@@ -2499,19 +2425,15 @@ msgstr "select NOME [in PALAVRAS ... ;] do COMANDOS; done"
#: builtins.c:190
msgid "time [-p] pipeline"
-msgstr "time [-p] LINHA-COMANDOS"
+msgstr "time [-p] linha-comandos"
#: builtins.c:192
msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac"
msgstr "case PALAVRA in [PADRÃO [| PADRÃO]...) COMANDOS ;;]... esac"
#: builtins.c:194
-msgid ""
-"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else "
-"COMMANDS; ] fi"
-msgstr ""
-"if COMANDOS; then COMANDOS; [ elif COMANDOS; then COMANDOS; ]... [ else "
-"COMANDOS; ] fi"
+msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi"
+msgstr "if COMANDOS; then COMANDOS; [ elif COMANDOS; then COMANDOS; ]... [ else COMANDOS; ] fi"
#: builtins.c:196
msgid "while COMMANDS; do COMMANDS; done"
@@ -2523,7 +2445,7 @@ msgstr "until COMANDOS; do COMANDOS; done"
#: builtins.c:200
msgid "coproc [NAME] command [redirections]"
-msgstr "coproc [NOME] COMANDO [REDIRECIONAMENTOS]"
+msgstr "coproc [NOME] comando [redirecionamentos]"
#: builtins.c:202
msgid "function name { COMMANDS ; } or name () { COMMANDS ; }"
@@ -2535,15 +2457,15 @@ msgstr "{ COMANDOS ; }"
#: builtins.c:206
msgid "job_spec [&]"
-msgstr "ESPEC-JOB [&]"
+msgstr "escpec-job [&]"
#: builtins.c:208
msgid "(( expression ))"
-msgstr "(( EXPRESSÃO ))"
+msgstr "(( expressão ))"
#: builtins.c:210
msgid "[[ expression ]]"
-msgstr "[[ EXPRESSÃO ]]"
+msgstr "[[ expressão ]]"
# Não traduzir "variables", esta é uma opção "builtin" do "bash" que é exibida ao executar "help" e acessível com "help variables".
#: builtins.c:212
@@ -2552,7 +2474,7 @@ msgstr "variables - Nomes e significados de algumas variáveis do shell"
#: builtins.c:215
msgid "pushd [-n] [+N | -N | dir]"
-msgstr "pushd [-n] [+N | -N | DIR]"
+msgstr "pushd [-n] [+N | -N | dir]"
#: builtins.c:219
msgid "popd [-n] [+N | -N]"
@@ -2564,52 +2486,31 @@ msgstr "dirs [-clpv] [+N] [-N]"
#: builtins.c:226
msgid "shopt [-pqsu] [-o] [optname ...]"
-msgstr "shopt [-pqsu] [-o] [NOME-OPÇÃO ...]"
+msgstr "shopt [-pqsu] [-o] [nome-opção ...]"
#: builtins.c:228
msgid "printf [-v var] format [arguments]"
-msgstr "printf [-v VAR] FORMATO [ARGUMENTOS]"
+msgstr "printf [-v var] formato [argumentos]"
#: builtins.c:231
-#, fuzzy
-msgid ""
-"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-"
-"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S "
-"suffix] [name ...]"
-msgstr ""
-"complete [-abcdefgjksuv] [-pr] [-DEI] [-o OPÇÃO] [-A AÇÃO] [-G GLOBAL] [-W "
-"LISTA-PALAVRAS] [-F FUNÇÃO] [-C COMANDO] [-X FILTRO] [-P PREFIXO] [-S "
-"SUFIXO] [NOME ...]"
+msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]"
+msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o opção] [-A ação] [-G global] [-W lista-palavras] [-F função] [-C comando] [-X filtro] [-P prefixo] [-S sufixo] [nome ...]"
#: builtins.c:235
-#, fuzzy
-msgid ""
-"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-"
-"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
-msgstr ""
-"compgen [-abcdefgjksuv] [-o OPÇÃO] [-A AÇÃO] [-G GLOBAL] [-W LISTA-"
-"PALAVRAS] [-F FUNÇÃO] [-C COMANDO] [-X FILTRO] [-P PREFIXO] [-S SUFIXO] "
-"[PALAVRA]"
+msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
+msgstr "compgen [-abcdefgjksuv] [-o opção] [-A ação] [-G global] [-W lista-palavras] [-F função] [-C comando] [-X filtro] [-P prefixo] [-S sufixo] [palavra]"
#: builtins.c:239
msgid "compopt [-o|+o option] [-DEI] [name ...]"
-msgstr "compopt [-o|+o OPÇÃO] [-DEI] [NOME ...]"
+msgstr "compopt [-o|+o opção] [-DEI] [nome ...]"
#: builtins.c:242
-msgid ""
-"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
-"callback] [-c quantum] [array]"
-msgstr ""
-"mapfile [-d DELIM] [-n NÚMERO] [-O ORIGEM] [-s NÚMERO] [-t] [-u FD] [-C "
-"CHAMADA] [-c QUANTIDADE] [ARRAY]"
+msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
+msgstr "mapfile [-d delim] [-n número] [-O origem] [-s número] [-t] [-u fd] [-C chamada] [-c quantidade] [array]"
#: builtins.c:244
-msgid ""
-"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
-"callback] [-c quantum] [array]"
-msgstr ""
-"readarray [-d DELIM] [-n NÚMERO] [-O ORIGEM] [-s NÚMERO] [-t] [-u FD] [-C "
-"CHAMADA] [-c QUANTIDADE] [ARRAY]"
+msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
+msgstr "readarray [-d delim] [-n número] [-O origem] [-s número] [-t] [-u fd] [-C chamada] [-c quantidade] [array]"
# help alias
#: builtins.c:256
@@ -2627,8 +2528,7 @@ msgid ""
" -p\tprint all defined aliases in a reusable format\n"
" \n"
" Exit Status:\n"
-" alias returns true unless a NAME is supplied for which no alias has "
-"been\n"
+" alias returns true unless a NAME is supplied for which no alias has been\n"
" defined."
msgstr ""
"Define ou exibe apelidos (aliases).\n"
@@ -2677,30 +2577,25 @@ msgid ""
" Options:\n"
" -m keymap Use KEYMAP as the keymap for the duration of this\n"
" command. Acceptable keymap names are emacs,\n"
-" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
-"move,\n"
+" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n"
" vi-command, and vi-insert.\n"
" -l List names of functions.\n"
" -P List function names and bindings.\n"
" -p List functions and bindings in a form that can be\n"
" reused as input.\n"
-" -S List key sequences that invoke macros and their "
-"values\n"
-" -s List key sequences that invoke macros and their "
-"values\n"
+" -S List key sequences that invoke macros and their values\n"
+" -s List key sequences that invoke macros and their values\n"
" in a form that can be reused as input.\n"
" -V List variable names and values\n"
" -v List variable names and values in a form that can\n"
" be reused as input.\n"
" -q function-name Query about which keys invoke the named function.\n"
-" -u function-name Unbind all keys which are bound to the named "
-"function.\n"
+" -u function-name Unbind all keys which are bound to the named function.\n"
" -r keyseq Remove the binding for KEYSEQ.\n"
" -f filename Read key bindings from FILENAME.\n"
" -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
" \t\t\t\tKEYSEQ is entered.\n"
-" -X List key sequences bound with -x and associated "
-"commands\n"
+" -X List key sequences bound with -x and associated commands\n"
" in a form that can be reused as input.\n"
" \n"
" Exit Status:\n"
@@ -2714,39 +2609,30 @@ msgstr ""
" um argumento singular.\n"
" \n"
" Opções:\n"
-" -m MAPA-TECLAS Usa MAPA-TECLAS como mapa de teclas para a duração\n"
+" -m mapa-teclas Usa MAPA-TECLAS como mapa de teclas para a duração\n"
" deste comando. Nomes de mapa de teclas aceitáveis\n"
" são emacs, emacs-standard, emacs-meta, emacs-ctlx,\n"
" vi, vi-move, vi-command e vi-insert.\n"
" -l Lista nomes de funções.\n"
" -P Lista nomes e associações de função.\n"
-" -p Lista funções e associações em uma forma que pode "
-"ser\n"
+" -p Lista funções e associações em uma forma que pode ser\n"
" usada como entrada.\n"
-" -S Lista sequências de teclas que chamam macros e "
-"seus\n"
+" -S Lista sequências de teclas que chamam macros e seus\n"
" valores\n"
-" -s Lista sequências de teclas que chamam macros e "
-"seus\n"
-" valores em uma forma que pode ser usada como "
-"entrada.\n"
+" -s Lista sequências de teclas que chamam macros e seus\n"
+" valores em uma forma que pode ser usada como entrada.\n"
" -V Lista nomes e valores de variáveis\n"
-" -v Lista nomes e valores de variáveis em uma forma "
-"que\n"
+" -v Lista nomes e valores de variáveis em uma forma que\n"
" pode ser usada como entrada.\n"
-" -q NOME Consulta sobre quais teclas chamam a função "
-"informada.\n"
-" -u NOME Desassocia todas teclas que estão associadas à "
-"função\n"
+" -q nome-função Consulta sobre quais teclas chamam a função informada.\n"
+" -u nome-função Desassocia todas teclas que estão associadas à função\n"
" informada.\n"
-" -r SEQ-TECLAS Remove a associação para SEQ-TECLAS.\n"
-" -f ARQUIVO Lê associações de tecla de ARQUIVO.\n"
-" -x SEQ-TECLAS:COMANDO-SHELL\n"
-" Faz com que COMANDO-SHELL seja executado ao "
-"inserir\n"
+" -r seq-teclas Remove a associação para SEQ-TECLAS.\n"
+" -f arquivo Lê associações de tecla de ARQUIVO.\n"
+" -x seq-teclas:comando-shell\n"
+" Faz com que COMANDO-SHELL seja executado ao inserir\n"
" SEQ-TECLAS.\n"
-" -X Lista sequência de teclas associadas com -x e "
-"comandos\n"
+" -X Lista sequência de teclas associadas com -x e comandos\n"
" associados em uma forma que pode ser usada como\n"
" entrada.\n"
" \n"
@@ -2800,8 +2686,7 @@ msgid ""
" \n"
" Execute SHELL-BUILTIN with arguments ARGs without performing command\n"
" lookup. This is useful when you wish to reimplement a shell builtin\n"
-" as a shell function, but need to execute the builtin within the "
-"function.\n"
+" as a shell function, but need to execute the builtin within the function.\n"
" \n"
" Exit Status:\n"
" Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n"
@@ -2837,8 +2722,7 @@ msgstr ""
"Retorna o contexto da chamada de sub-rotina atual.\n"
" \n"
" Sem EXPR, retorna \"$linha $arquivo\". Com EXPR, retorna\n"
-" \"$linha $sub-rotina $arquivo\"; essa informação extra pode ser usada "
-"para\n"
+" \"$linha $sub-rotina $arquivo\"; essa informação extra pode ser usada para\n"
" fornecer um rastro da pilha.\n"
" \n"
" O valor de EXPR indica quantos quadros de chamada deve voltar antes do\n"
@@ -2853,22 +2737,16 @@ msgstr ""
msgid ""
"Change the shell working directory.\n"
" \n"
-" Change the current directory to DIR. The default DIR is the value of "
-"the\n"
+" Change the current directory to DIR. The default DIR is the value of the\n"
" HOME shell variable.\n"
" \n"
-" The variable CDPATH defines the search path for the directory "
-"containing\n"
-" DIR. Alternative directory names in CDPATH are separated by a colon "
-"(:).\n"
-" A null directory name is the same as the current directory. If DIR "
-"begins\n"
+" The variable CDPATH defines the search path for the directory containing\n"
+" DIR. Alternative directory names in CDPATH are separated by a colon (:).\n"
+" A null directory name is the same as the current directory. If DIR begins\n"
" with a slash (/), then CDPATH is not used.\n"
" \n"
-" If the directory is not found, and the shell option `cdable_vars' is "
-"set,\n"
-" the word is assumed to be a variable name. If that variable has a "
-"value,\n"
+" If the directory is not found, and the shell option `cdable_vars' is set,\n"
+" the word is assumed to be a variable name. If that variable has a value,\n"
" its value is used for DIR.\n"
" \n"
" Options:\n"
@@ -2884,13 +2762,11 @@ msgid ""
" \t\tattributes as a directory containing the file attributes\n"
" \n"
" The default is to follow symbolic links, as if `-L' were specified.\n"
-" `..' is processed by removing the immediately previous pathname "
-"component\n"
+" `..' is processed by removing the immediately previous pathname component\n"
" back to a slash or the beginning of DIR.\n"
" \n"
" Exit Status:\n"
-" Returns 0 if the directory is changed, and if $PWD is set successfully "
-"when\n"
+" Returns 0 if the directory is changed, and if $PWD is set successfully when\n"
" -P is used; non-zero otherwise."
msgstr ""
"Altera o diretório de trabalho do shell.\n"
@@ -2898,20 +2774,17 @@ msgstr ""
" Altera o diretório atual para DIR, sendo o padrão de DIR o mesmo valor\n"
" da variável HOME.\n"
" \n"
-" A variável CDPATH define o caminho de pesquisa para o diretório "
-"contendo\n"
+" A variável CDPATH define o caminho de pesquisa para o diretório contendo\n"
" DIR. Nomes de diretórios alternativos em CDPATH são separados por\n"
" dois-pontos (:). Um nome de diretório nulo é o mesmo que o diretório\n"
" atual. Se DIR inicia com uma barra (/), então CDPATH não é usada.\n"
" \n"
-" Se o diretório não for encontrado e a opção `cdable_vars` estiver "
-"definida\n"
+" Se o diretório não for encontrado e a opção `cdable_vars` estiver definida\n"
" no shell, a palavra é presumida como sendo o nome de uma variável. Se\n"
" tal variável possuir um valor, este valor é usado para DIR.\n"
" \n"
" Opções:\n"
-" -L\tforça links simbólicos a serem seguidos: resolver links "
-"simbólicos\n"
+" -L\tforça links simbólicos a serem seguidos: resolver links simbólicos\n"
" \t\tem DIR após processar instâncias de `..'\n"
" -P\tusa a estrutura do diretório físico sem seguir links\n"
" \t\tsimbólicos: resolve links simbólicos em DIR antes de processar\n"
@@ -2922,15 +2795,12 @@ msgstr ""
" \t\tatributos estendidos como um diretório contendo os atributos de\n"
" \t\tarquivo\n"
" \n"
-" O padrão é seguir links simbólicos, como se `-L' tivesse sido "
-"especificada.\n"
-" `..' é processada removendo o componente de caminho imediatamente "
-"anterior\n"
+" O padrão é seguir links simbólicos, como se `-L' tivesse sido especificada.\n"
+" `..' é processada removendo o componente de caminho imediatamente anterior\n"
" de volta para uma barra ou para o início de DIR.\n"
" \n"
" Status de saída:\n"
-" Retorna 0, se o diretório tiver sido alterado e se $PWD está definida "
-"com\n"
+" Retorna 0, se o diretório tiver sido alterado e se $PWD está definida com\n"
" sucesso quando a opção -P for usada; do contrário, retorna não-zero."
# help pwd
@@ -3011,8 +2881,7 @@ msgid ""
"Execute a simple command or display information about commands.\n"
" \n"
" Runs COMMAND with ARGS suppressing shell function lookup, or display\n"
-" information about the specified COMMANDs. Can be used to invoke "
-"commands\n"
+" information about the specified COMMANDs. Can be used to invoke commands\n"
" on disk when a function with the same name exists.\n"
" \n"
" Options:\n"
@@ -3042,7 +2911,6 @@ msgstr ""
# help declare
#: builtins.c:490
-#, fuzzy
msgid ""
"Set variable values and attributes.\n"
" \n"
@@ -3075,8 +2943,7 @@ msgid ""
" Variables with the integer attribute have arithmetic evaluation (see\n"
" the `let' command) performed when the variable is assigned a value.\n"
" \n"
-" When used in a function, `declare' makes NAMEs local, as with the "
-"`local'\n"
+" When used in a function, `declare' makes NAMEs local, as with the `local'\n"
" command. The `-g' option suppresses this behavior.\n"
" \n"
" Exit Status:\n"
@@ -3085,8 +2952,7 @@ msgid ""
msgstr ""
"Define valores e atributos de variável.\n"
" \n"
-" Declara variáveis e a elas fornece atributos. Se nenhum NOME for "
-"fornecido,\n"
+" Declara variáveis e a elas fornece atributos. Se nenhum NOME for fornecido,\n"
" exibe os atributos e valores de todas as variáveis.\n"
" \n"
" Opções:\n"
@@ -3101,13 +2967,11 @@ msgstr ""
" -a\tpara fazer NOMEs serem arrrays indexados (se houver suporte)\n"
" -A\tpara fazer NOMEs serem arrrays associativos (se houver suporte)\n"
" -i\tpara fazer NOMEs terem o atributo `integer'\n"
-" -l\tpara converter o valor de cada NOME para minúsculo em sua "
-"atribuição\n"
+" -l\tpara converter o valor de cada NOME para minúsculo em sua atribuição\n"
" -n\tfazer de NOME uma referência à variável chamada por seu valor\n"
-" -r\tpara fazer de NOMEs somente-leitura\n"
+" -r\tpara fazer de NOMEs somente leitura\n"
" -t\tpara fazer NOMEs terem o atributo `trace'\n"
-" -u\tpara converter o valor de cada NOME para maiúsculo em sua "
-"atribuição\n"
+" -u\tpara converter o valor de cada NOME para maiúsculo em sua atribuição\n"
" -x\tpra fazer NOMEs exportar\n"
" \n"
" Usar `+' ao invés de `-' desliga o atributo dado.\n"
@@ -3152,8 +3016,7 @@ msgstr ""
" Cria uma variável local chamada NOME e lhe dá VALOR. OPÇÃO pode ser\n"
" qualquer opção aceita pelo `declare'.\n"
" \n"
-" Variáveis locais podem ser usadas apenas em uma função; elas são "
-"visíveis\n"
+" Variáveis locais podem ser usadas apenas em uma função; elas são visíveis\n"
" apenas para a função na qual elas foram definidas, bem como para seus\n"
" filhos.\n"
" \n"
@@ -3167,8 +3030,7 @@ msgstr ""
msgid ""
"Write arguments to the standard output.\n"
" \n"
-" Display the ARGs, separated by a single space character and followed by "
-"a\n"
+" Display the ARGs, separated by a single space character and followed by a\n"
" newline, on the standard output.\n"
" \n"
" Options:\n"
@@ -3192,11 +3054,9 @@ msgid ""
" \t\t0 to 3 octal digits\n"
" \\xHH\tthe eight-bit character whose value is HH (hexadecimal). HH\n"
" \t\tcan be one or two hex digits\n"
-" \\uHHHH\tthe Unicode character whose value is the hexadecimal value "
-"HHHH.\n"
+" \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n"
" \t\tHHHH can be one to four hex digits.\n"
-" \\UHHHHHHHH the Unicode character whose value is the hexadecimal "
-"value\n"
+" \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n"
" \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n"
" \n"
" Exit Status:\n"
@@ -3318,8 +3178,7 @@ msgstr ""
msgid ""
"Execute arguments as a shell command.\n"
" \n"
-" Combine ARGs into a single string, use the result as input to the "
-"shell,\n"
+" Combine ARGs into a single string, use the result as input to the shell,\n"
" and execute the resulting commands.\n"
" \n"
" Exit Status:\n"
@@ -3335,7 +3194,6 @@ msgstr ""
# help getopts
#: builtins.c:652
-#, fuzzy
msgid ""
"Parse option arguments.\n"
" \n"
@@ -3400,17 +3258,16 @@ msgstr ""
" encontrado, getopts coloca um ':' em NOME e define OPTARG para o\n"
" caractere de opção encontrada. Se getopts não estiver no modo\n"
" silencioso, uma opção inválida é vista, getopts coloca um '?' em\n"
-" NOME e remove definição de OPTARG. Se um argumento obrigatório não for\n"
-" encontrado, um '?' é colocado em NOME, OPTARG tem sua definição "
-"removida\n"
-" e uma mensagem de diagnóstico é mostrada.\n"
+" NOME e remove definição de OPTARG. Se um argumento obrigatório não\n"
+" for encontrado, um '?' é colocado em NOME, OPTARG tem sua definição\n"
+" removida e uma mensagem de diagnóstico é mostrada.\n"
" \n"
" Se a variável shell OPTERR possuir o valor 0, getopts desabilita a\n"
" exibição de mensagens de erro, mesmo se o primeiro caractere de\n"
" OPÇÕES não for dois-pontos. OPTERR tem o valor por padrão.\n"
" \n"
-" Getopts normalmente analisa os parâmetros posicionais ($0 - $9), mas se\n"
-" mais argumentos forem fornecidos, eles serão analisados.\n"
+" Getopts normalmente analisa os parâmetros posicionais, mas se mais\n"
+" argumentos forem fornecidos, eles serão analisados.\n"
" \n"
" Status de saída:\n"
" Retorna sucesso, se uma opção for encontrada; falha se o fim das opções\n"
@@ -3422,8 +3279,7 @@ msgid ""
"Replace the shell with the given command.\n"
" \n"
" Execute COMMAND, replacing this shell with the specified program.\n"
-" ARGUMENTS become the arguments to COMMAND. If COMMAND is not "
-"specified,\n"
+" ARGUMENTS become the arguments to COMMAND. If COMMAND is not specified,\n"
" any redirections take effect in the current shell.\n"
" \n"
" Options:\n"
@@ -3431,13 +3287,11 @@ msgid ""
" -c\texecute COMMAND with an empty environment\n"
" -l\tplace a dash in the zeroth argument to COMMAND\n"
" \n"
-" If the command cannot be executed, a non-interactive shell exits, "
-"unless\n"
+" If the command cannot be executed, a non-interactive shell exits, unless\n"
" the shell option `execfail' is set.\n"
" \n"
" Exit Status:\n"
-" Returns success unless COMMAND is not found or a redirection error "
-"occurs."
+" Returns success unless COMMAND is not found or a redirection error occurs."
msgstr ""
"Substitui o shell com o comando fornecido.\n"
" \n"
@@ -3447,7 +3301,7 @@ msgstr ""
" atual.\n"
" \n"
" Opções:\n"
-" -a NOME\tpassa NOME como argumento zero para COMANDO\n"
+" -a nome\tpassa NOME como argumento zero para COMANDO\n"
" -c\texecuta COMANDO com um ambiente vazio\n"
" -l\tcoloca um traço no argumento zero para COMANDO\n"
" \n"
@@ -3476,8 +3330,7 @@ msgstr ""
msgid ""
"Exit a login shell.\n"
" \n"
-" Exits a login shell with exit status N. Returns an error if not "
-"executed\n"
+" Exits a login shell with exit status N. Returns an error if not executed\n"
" in a login shell."
msgstr ""
"Sai de um shell de login.\n"
@@ -3490,15 +3343,13 @@ msgstr ""
msgid ""
"Display or execute commands from the history list.\n"
" \n"
-" fc is used to list or edit and re-execute commands from the history "
-"list.\n"
+" fc is used to list or edit and re-execute commands from the history list.\n"
" FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
" string, which means the most recent command beginning with that\n"
" string.\n"
" \n"
" Options:\n"
-" -e ENAME\tselect which editor to use. Default is FCEDIT, then "
-"EDITOR,\n"
+" -e ENAME\tselect which editor to use. Default is FCEDIT, then EDITOR,\n"
" \t\tthen vi\n"
" -l \tlist lines instead of editing\n"
" -n\tomit line numbers when listing\n"
@@ -3512,14 +3363,12 @@ msgid ""
" the last command.\n"
" \n"
" Exit Status:\n"
-" Returns success or status of executed command; non-zero if an error "
-"occurs."
+" Returns success or status of executed command; non-zero if an error occurs."
msgstr ""
"Exibe ou executa comandos da lista do histórico.\n"
" \n"
" fc é usado para listar ou editar e re-executar comandos da lista de\n"
-" histórico. PRIMEIRO e ÚLTIMO podem ser números especificando o "
-"intervalo\n"
+" histórico. PRIMEIRO e ÚLTIMO podem ser números especificando o intervalo\n"
" ou PRIMEIRO pode ser uma string, o que significa o comando mais recente\n"
" iniciando com aquela string.\n"
" \n"
@@ -3560,18 +3409,15 @@ msgstr ""
" a noção do shell de trabalho atual é usada.\n"
" \n"
" Status de saída:\n"
-" Status do comando colocado em primeiro plano ou falha, se ocorrer um "
-"erro."
+" Status do comando colocado em primeiro plano ou falha, se ocorrer um erro."
# help bg
#: builtins.c:779
msgid ""
"Move jobs to the background.\n"
" \n"
-" Place the jobs identified by each JOB_SPEC in the background, as if "
-"they\n"
-" had been started with `&'. If JOB_SPEC is not present, the shell's "
-"notion\n"
+" Place the jobs identified by each JOB_SPEC in the background, as if they\n"
+" had been started with `&'. If JOB_SPEC is not present, the shell's notion\n"
" of the current job is used.\n"
" \n"
" Exit Status:\n"
@@ -3593,8 +3439,7 @@ msgid ""
"Remember or display program locations.\n"
" \n"
" Determine and remember the full pathname of each command NAME. If\n"
-" no arguments are given, information about remembered commands is "
-"displayed.\n"
+" no arguments are given, information about remembered commands is displayed.\n"
" \n"
" Options:\n"
" -d\tforget the remembered location of each NAME\n"
@@ -3613,14 +3458,13 @@ msgid ""
msgstr ""
"Memoriza ou exibe localizações de programas.\n"
" \n"
-" Determina e memoriza do caminho completo de cada comando NOME. Se "
-"nenhum\n"
+" Determina e memoriza do caminho completo de cada comando NOME. Se nenhum\n"
" argumento for fornecido, exibe informação sobre comandos memorizados.\n"
" \n"
" Opções:\n"
" -d\t\tesquece a localização memorizada de cada NOME\n"
" -l\t\texibe em um formato que pode ser usado como entrada\n"
-" -p CAMINHO\tusa CAMINHO como o caminho completo de NOME\n"
+" -p caminho\tusa CAMINHO como o caminho completo de NOME\n"
" -r\t\tesquece de todas as localizações memorizadas\n"
" -t\t\tmostra a localização memorizada de cada NOME, iniciando\n"
" \t\t\tcada localização com o NOME correspondente, se múltiplos\n"
@@ -3652,8 +3496,7 @@ msgid ""
" PATTERN\tPattern specifying a help topic\n"
" \n"
" Exit Status:\n"
-" Returns success unless PATTERN is not found or an invalid option is "
-"given."
+" Returns success unless PATTERN is not found or an invalid option is given."
msgstr ""
"Exibe informação sobre comandos internos (builtin).\n"
" \n"
@@ -3663,7 +3506,7 @@ msgstr ""
" \n"
" Opções:\n"
" -d\texibe uma descrição breve para cada tópico\n"
-" -m\texibe o uso em formato pseudo-manpage\n"
+" -m\texibe o uso em formato de pseudo página man\n"
" -s\texibe apenas uma breve sinopse de uso para cada tópico\n"
" \t\tcorrespondendo a PADRÃO\n"
" \n"
@@ -3702,8 +3545,7 @@ msgid ""
" \n"
" If the HISTTIMEFORMAT variable is set and not null, its value is used\n"
" as a format string for strftime(3) to print the time stamp associated\n"
-" with each displayed history entry. No time stamps are printed "
-"otherwise.\n"
+" with each displayed history entry. No time stamps are printed otherwise.\n"
" \n"
" Exit Status:\n"
" Returns success unless an invalid option is given or an error occurs."
@@ -3716,9 +3558,8 @@ msgstr ""
" \n"
" Opções:\n"
" -c\t\tlimpa a lista de histórico ao excluir todas as entradas\n"
-" -d POSIÇÃO\texclui a entrada de histórico na posição POSIÇÃO. "
-"Posições\n"
-"\t\t\tnegativas contam a partir do fim da lista de histórico\n"
+" -d posição\texclui a entrada de histórico na posição POSIÇÃO. Posições\n"
+" \t\t\tnegativas contam a partir do fim da lista de histórico\n"
" \n"
" -a\t\tanexa linhas de histórico desta sessão no arquivo de\n"
" \t\t\thistórico\n"
@@ -3852,12 +3693,12 @@ msgstr ""
" não estiverem presentes, então, SIGTERM é presumido.\n"
" \n"
" Opções:\n"
-" -s SIGSPEC\tSIGSPEC especifica o nome do sinal\n"
-" -n SIGNUM\t\tSIGNUM representa um número de sinal\n"
-" -l\t\t\tlista os nomes dos sinais; se `-l' for acompanhado por\n"
-" \t\t\t\toutros argumentos, presume-se estes sejam números de\n"
-" \t\t\t\tsinais para os quais nomes deveriam ser listados\n"
-" -L\t\t\tsinônimo de -l\n"
+" -s sinal\tSINAL especifica o nome do sinal\n"
+" -n sinal\tSINAL representa um número de sinal\n"
+" -l\tlista os nomes dos sinais; se `-l' for acompanhado por\n"
+" \t\toutros argumentos, presume-se estes sejam números de\n"
+" \t\tsinais para os quais nomes deveriam ser listados\n"
+" -L\tsinônimo de -l\n"
" \n"
" `Kill' é um comando interno do shell por duas razões: ele permite\n"
" IDs de trabalho serem usados ao invés de IDs de processo e permite\n"
@@ -3876,8 +3717,7 @@ msgid ""
" Evaluate each ARG as an arithmetic expression. Evaluation is done in\n"
" fixed-width integers with no check for overflow, though division by 0\n"
" is trapped and flagged as an error. The following list of operators is\n"
-" grouped into levels of equal-precedence operators. The levels are "
-"listed\n"
+" grouped into levels of equal-precedence operators. The levels are listed\n"
" in order of decreasing precedence.\n"
" \n"
" \tid++, id--\tvariable post-increment, post-decrement\n"
@@ -3960,16 +3800,13 @@ msgid ""
"Read a line from the standard input and split it into fields.\n"
" \n"
" Reads a single line from the standard input, or from file descriptor FD\n"
-" if the -u option is supplied. The line is split into fields as with "
-"word\n"
+" if the -u option is supplied. The line is split into fields as with word\n"
" splitting, and the first word is assigned to the first NAME, the second\n"
" word to the second NAME, and so on, with any leftover words assigned to\n"
-" the last NAME. Only the characters found in $IFS are recognized as "
-"word\n"
+" the last NAME. Only the characters found in $IFS are recognized as word\n"
" delimiters.\n"
" \n"
-" If no NAMEs are supplied, the line read is stored in the REPLY "
-"variable.\n"
+" If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
" \n"
" Options:\n"
" -a array\tassign the words read to sequential indices of the array\n"
@@ -3981,8 +3818,7 @@ msgid ""
" -n nchars\treturn after reading NCHARS characters rather than waiting\n"
" \t\tfor a newline, but honor a delimiter if fewer than\n"
" \t\tNCHARS characters are read before the delimiter\n"
-" -N nchars\treturn only after reading exactly NCHARS characters, "
-"unless\n"
+" -N nchars\treturn only after reading exactly NCHARS characters, unless\n"
" \t\tEOF is encountered or read times out, ignoring any\n"
" \t\tdelimiter\n"
" -p prompt\toutput the string PROMPT without a trailing newline before\n"
@@ -4000,19 +3836,15 @@ msgid ""
" -u fd\tread from file descriptor FD instead of the standard input\n"
" \n"
" Exit Status:\n"
-" The return code is zero, unless end-of-file is encountered, read times "
-"out\n"
-" (in which case it's greater than 128), a variable assignment error "
-"occurs,\n"
+" The return code is zero, unless end-of-file is encountered, read times out\n"
+" (in which case it's greater than 128), a variable assignment error occurs,\n"
" or an invalid file descriptor is supplied as the argument to -u."
msgstr ""
"Lê uma linha da entrada padrão e separa em campos.\n"
"\n"
" Lê uma linha da entrada padrão ou do descritor de arquivo FD, caso a\n"
-" opção -u seja fornecida. A linha é separada em campos, na mesma forma "
-"de\n"
-" separação de palavras, e a primeira palavra é atribuída ao primeiro "
-"NOME,\n"
+" opção -u seja fornecida. A linha é separada em campos, na mesma forma de\n"
+" separação de palavras, e a primeira palavra é atribuída ao primeiro NOME,\n"
" o segundo ao segundo NOME e por aí vai, com qualquer palavras restantes\n"
" atribuídas para o último NOME. Apenas os caracteres encontrados em $IFS\n"
" são reconhecidos como delimitadores de palavras.\n"
@@ -4021,43 +3853,36 @@ msgstr ""
" REPLY (resposta).\n"
" \n"
" Opções:\n"
-" -a ARRAY atribui as palavras lidas a índices sequenciais da\n"
+" -a array atribui as palavras lidas a índices sequenciais da\n"
" variável array ARRAY, iniciando em zero\n"
-" -d DELIM continua até o primeiro caractere de DELIM ser lido, ao\n"
+" -d delim continua até o primeiro caractere de DELIM ser lido, ao\n"
" invés de nova linha\n"
" -e usa Readline para obter a linha\n"
-" -i TEXTO usa TEXTO como o texto inicial para Readline\n"
-" -n NCHARS retorna após ler NCHARS caracteres, ao invés de esperar\n"
-" por uma nova linha, mas respeita um delimitador se "
-"número\n"
+" -i texto usa TEXTO como o texto inicial para Readline\n"
+" -n nchars retorna após ler NCHARS caracteres, ao invés de esperar\n"
+" por uma nova linha, mas respeita um delimitador se número\n"
" de caracteres menor que NCHARS sejam lidos antes do\n"
" delimitador\n"
-" -N NCHARS retorna apenas após ler exatamente NCHARS caracteres, a\n"
-" menos que EOF (fim do arquivo) seja encontrado ou "
-"`read'\n"
+" -N nchars retorna apenas após ler exatamente NCHARS caracteres, a\n"
+" menos que EOF (fim do arquivo) seja encontrado ou `read'\n"
" esgote o tempo limite, ignorando qualquer delimitador\n"
-" -p CONFIRMAR mostra a string PROMPT sem remover nova linha antes de\n"
+" -p prompt mostra a string PROMPT sem remover nova linha antes de\n"
" tentar ler\n"
" -r não mostra barra invertida para escapar quaisquer\n"
" caracteres\n"
" -s não ecoa entrada vindo de um terminal\n"
-" -t TEMPO esgota-se o tempo limite e retorna falha, caso uma toda\n"
+" -t tempo esgota-se o tempo limite e retorna falha, caso uma toda\n"
" uma linha não seja lida em TEMPO segundos. O valor da\n"
-" variável TMOUT é o tempo limite padrão. TEMPO pode ser "
-"um\n"
-" número fracionado. SE TEMPO for 0, `read' retorna "
-"sucesso\n"
+" variável TMOUT é o tempo limite padrão. TEMPO pode ser um\n"
+" número fracionado. SE TEMPO for 0, `read' retorna sucesso\n"
" apenas se a entrada estiver disponível no descritor de\n"
-" arquivo especificado. O status de saída é maior que "
-"128,\n"
+" arquivo especificado. O status de saída é maior que 128,\n"
" se o tempo limite for excedido\n"
-" -u FD lê do descritor de arquivo FD, ao invés da entrada "
-"padrão\n"
+" -u fd lê do descritor de arquivo FD, ao invés da entrada padrão\n"
" \n"
" Status de saída:\n"
" O código de retorno é zero, a menos que o EOF (fim do arquivo) seja\n"
-" encontrado, `read' esgote o tempo limite (caso em que o código de "
-"retorno\n"
+" encontrado, `read' esgote o tempo limite (caso em que o código de retorno\n"
" será 128), ocorra erro de atribuição de uma variável ou um descritor de\n"
" arquivo inválido seja fornecido como argumento para -u."
@@ -4127,8 +3952,7 @@ msgid ""
" physical same as -P\n"
" pipefail the return value of a pipeline is the status of\n"
" the last command to exit with a non-zero status,\n"
-" or zero if no command exited with a non-zero "
-"status\n"
+" or zero if no command exited with a non-zero status\n"
" posix change the behavior of bash where the default\n"
" operation differs from the Posix standard to\n"
" match the standard\n"
@@ -4152,8 +3976,7 @@ msgid ""
" by default when the shell is interactive.\n"
" -P If set, do not resolve symbolic links when executing commands\n"
" such as cd which change the current directory.\n"
-" -T If set, the DEBUG and RETURN traps are inherited by shell "
-"functions.\n"
+" -T If set, the DEBUG and RETURN traps are inherited by shell functions.\n"
" -- Assign any remaining arguments to the positional parameters.\n"
" If there are no remaining arguments, the positional parameters\n"
" are unset.\n"
@@ -4169,27 +3992,24 @@ msgid ""
" Exit Status:\n"
" Returns success unless an invalid option is given."
msgstr ""
-"Define ou remove definição de valores das opções e dos parâmetros "
-"posicionais\n"
+"Define ou remove definição de valores das opções e dos parâmetros posicionais\n"
"do shell:\n"
" \n"
" Altera o valor de opções e de parâmetros posicionais do shell ou mostra\n"
" os nomes ou valores de variáveis shell.\n"
" \n"
" Opções:\n"
-" -a Marca variáveis, que foram modificadas ou criadas, para "
-"exportação.\n"
+" -a Marca variáveis, que foram modificadas ou criadas, para exportação.\n"
" -b Notifica sobre terminação de trabalho imediatamente.\n"
" -e Sai imediatamente se um comando sai com um status não-zero.\n"
" -f Desabilita a geração de nome de arquivo (\"globbing\").\n"
-" -h Memoriza a localização de comandos à medida em que são "
-"procurados.\n"
+" -h Memoriza a localização de comandos à medida em que são procurados.\n"
" -k Todos argumentos de atribuição são colocados no ambiente para um\n"
" comando, e não apenas aqueles que precedem o nome do comando.\n"
" -m Controle de trabalho está habilitado.\n"
" -n Lê comandos, mas não os executa.\n"
-" -o NOME-OPÇÃO\n"
-" Define a variável correspondendo a NOME-OPÇÃO:\n"
+" -o nome-opção\n"
+" Define a variável correspondendo a nome-opção:\n"
" allexport mesmo que -a\n"
" braceexpand mesmo que -B\n"
" emacs usa interface de edição de linha estilo Emacs\n"
@@ -4201,8 +4021,7 @@ msgstr ""
" history habilita histórico de comandos\n"
" ignoreeof shell não vai sair após leitura de EOF\n"
" interactive-comments\n"
-" permite mostrar comentários em comandos "
-"interativos\n"
+" permite mostrar comentários em comandos interativos\n"
" keyword mesmo que -k\n"
" monitor mesmo que -m\n"
" noclobber mesmo que -C\n"
@@ -4214,10 +4033,8 @@ msgstr ""
" onecmd mesmo que -t\n"
" physical mesmo que -P\n"
" pipefail o valor de retorno de uma linha de comandos é o\n"
-" status do último comando a sair com status não-"
-"zero,\n"
-" ou zero se nenhum comando saiu com status não "
-"zero\n"
+" status do último comando a sair com status não-zero,\n"
+" ou zero se nenhum comando saiu com status não zero\n"
" posix altera o comportamento do bash, onde a operação\n"
" padrão diverge dos padrões do Posix para\n"
" corresponder a estes padrões\n"
@@ -4225,44 +4042,33 @@ msgstr ""
" verbose mesmo que -v\n"
" vi usa interface de edição de linha estilo vi\n"
" xtrace mesmo que -x\n"
-" -p Ligado sempre que IDs de usuário real e efetivo não "
-"corresponderem.\n"
-" Desabilita processamento do arquivo $ENV e importação de funções "
-"da\n"
+" -p Ligado sempre que IDs de usuário real e efetivo não corresponderem.\n"
+" Desabilita processamento do arquivo $ENV e importação de funções da\n"
" shell. Ao desligar essa opção, causa o uid e o gid efetivo serem\n"
" os uid e gid reais.\n"
" -t Sai após a leitura e execução de um comando.\n"
-" -u Trata limpeza (unset) de variáveis como um erro quando "
-"substituindo.\n"
+" -u Trata limpeza (unset) de variáveis como um erro quando substituindo.\n"
" -v Mostra linhas de entrada do shell na medida em que forem lidas.\n"
-" -x Mostra comandos e seus argumentos na medida em que forme "
-"executados.\n"
+" -x Mostra comandos e seus argumentos na medida em que forme executados.\n"
" -B o shell vai realizar expansão de chaves\n"
" -C Se definido, não permite arquivos normais existentes serem\n"
" sobrescritos por redirecionamento da saída.\n"
" -E Se definido, a armadilha ERR é herdada por funções do shell.\n"
-" -H Habilita substituição de histórico estilo \"!\". Essa sinalização "
-"está\n"
+" -H Habilita substituição de histórico estilo \"!\". Essa sinalização está\n"
" habilitada por padrão quando shell é interativa.\n"
-" -P Se definida, não resolve links simbólicos ao sair de comandos, "
-"tais\n"
+" -P Se definida, não resolve links simbólicos ao sair de comandos, tais\n"
" como `cd' (que altera o diretório atual).\n"
-" -T Se definido, a armadilha DEBUG e RETURN são herdadas por funções "
-"do shell.\n"
-" -- Atribui quaisquer argumentos restantes aos parâmetros "
-"posicionais.\n"
+" -T Se definido, a armadilha DEBUG e RETURN são herdadas por funções do shell.\n"
+" -- Atribui quaisquer argumentos restantes aos parâmetros posicionais.\n"
" Se não houver argumentos restantes, os parâmetros posicionais são\n"
" limpos (unset).\n"
-" - Atribui quaisquer argumentos restantes aos parâmetros "
-"posicionais.\n"
+" - Atribui quaisquer argumentos restantes aos parâmetros posicionais.\n"
" As opções -x e -v são desligadas.\n"
" \n"
" Usar +, ao invés de -, causa essas sinalizações serem desligadas. As\n"
" sinalizações também podem ser usadas por meio de chamada do shell. As\n"
-" sinalizações atualmente definidas podem ser encontradas em $-. Os n "
-"ARGs\n"
-" restantes são parâmetros posicionais e são atribuídos, em ordem, a $1, "
-"$2,\n"
+" sinalizações atualmente definidas podem ser encontradas em $-. Os n ARGs\n"
+" restantes são parâmetros posicionais e são atribuídos, em ordem, a $1, $2,\n"
" .. $n. Se nenhuma ARG for fornecido, todas as variáveis shell são\n"
" mostradas.\n"
" \n"
@@ -4282,8 +4088,7 @@ msgid ""
" -n\ttreat each NAME as a name reference and unset the variable itself\n"
" \t\trather than the variable it references\n"
" \n"
-" Without options, unset first tries to unset a variable, and if that "
-"fails,\n"
+" Without options, unset first tries to unset a variable, and if that fails,\n"
" tries to unset a function.\n"
" \n"
" Some variables cannot be unset; also see `readonly'.\n"
@@ -4316,8 +4121,7 @@ msgid ""
"Set export attribute for shell variables.\n"
" \n"
" Marks each NAME for automatic export to the environment of subsequently\n"
-" executed commands. If VALUE is supplied, assign VALUE before "
-"exporting.\n"
+" executed commands. If VALUE is supplied, assign VALUE before exporting.\n"
" \n"
" Options:\n"
" -f\trefer to shell functions\n"
@@ -4332,8 +4136,7 @@ msgstr ""
"Define atributo de exportação para variáveis shell.\n"
" \n"
" Marca cada NOME para exportação automática para o ambiente dos comandos\n"
-" executados subsequentemente. Se VALOR for fornecido, atribui VALOR "
-"antes\n"
+" executados subsequentemente. Se VALOR for fornecido, atribui VALOR antes\n"
" de exportar.\n"
" \n"
" Opções:\n"
@@ -4400,8 +4203,7 @@ msgid ""
msgstr ""
"Desloca parâmetros posicionais.\n"
" \n"
-" Renomeia os parâmetros posicionais $N+1,$N+2 ... até $1,$2 ... Se N "
-"não\n"
+" Renomeia os parâmetros posicionais $N+1,$N+2 ... até $1,$2 ... Se N não\n"
" for fornecido, presume-se que ele seja 1.\n"
" \n"
" Status de saída:\n"
@@ -4493,8 +4295,7 @@ msgid ""
" -x FILE True if the file is executable by you.\n"
" -O FILE True if the file is effectively owned by you.\n"
" -G FILE True if the file is effectively owned by your group.\n"
-" -N FILE True if the file has been modified since it was last "
-"read.\n"
+" -N FILE True if the file has been modified since it was last read.\n"
" \n"
" FILE1 -nt FILE2 True if file1 is newer than file2 (according to\n"
" modification date).\n"
@@ -4515,8 +4316,7 @@ msgid ""
" STRING1 != STRING2\n"
" True if the strings are not equal.\n"
" STRING1 < STRING2\n"
-" True if STRING1 sorts before STRING2 "
-"lexicographically.\n"
+" True if STRING1 sorts before STRING2 lexicographically.\n"
" STRING1 > STRING2\n"
" True if STRING1 sorts after STRING2 lexicographically.\n"
" \n"
@@ -4543,10 +4343,8 @@ msgid ""
msgstr ""
"Avalia expressão condicional.\n"
" \n"
-" Sai com um status de 0 (verdadeiro) ou 1 (falso) dependendo da "
-"avaliação\n"
-" de EXPR. As expressões podem ser unárias ou binárias. Expressões "
-"unárias\n"
+" Sai com um status de 0 (verdadeiro) ou 1 (falso) dependendo da avaliação\n"
+" de EXPR. As expressões podem ser unárias ou binárias. Expressões unárias\n"
" são normalmente usadas para examinar o status de um arquivo. Há\n"
" operadores de strings e também há operadores de comparação numérica.\n"
" \n"
@@ -4560,8 +4358,7 @@ msgstr ""
" -c ARQUIVO Verdadeiro, se arquivo for um caractere especial.\n"
" -d ARQUIVO Verdadeiro, se arquivo for um diretório.\n"
" -e ARQUIVO Verdadeiro, se arquivo existir.\n"
-" -f ARQUIVO Verdadeiro, se arquivo existir e for um arquivo "
-"normal.\n"
+" -f ARQUIVO Verdadeiro, se arquivo existir e for um arquivo normal.\n"
" -g ARQUIVO Verdadeiro, se arquivo for set-group-id.\n"
" -h ARQUIVO Verdadeiro, se arquivo for um link simbólico.\n"
" -L ARQUIVO Verdadeiro, se arquivo for um link simbólico.\n"
@@ -4612,20 +4409,16 @@ msgstr ""
" e for uma referência de nome.\n"
" ! EXPR Verdadeiro, se a expressão EXPR for falsa.\n"
" EXPR1 -a EXPR2 Verdadeiro, se ambas EXPR1 e EXPR2 forem verdadeiras.\n"
-" EXPR1 -o EXPR2 Verdadeiro, se ao menos uma das expressões for "
-"verdadeira.\n"
+" EXPR1 -o EXPR2 Verdadeiro, se ao menos uma das expressões for verdadeira.\n"
" \n"
-" arg1 OP arg2 Testes aritméticos. OP é um dentre -eq, -ne, -lt, -"
-"le,\n"
+" arg1 OP arg2 Testes aritméticos. OP é um dentre -eq, -ne, -lt, -le,\n"
" -gt, or -ge.\n"
" \n"
-" Operadores binários de aritmética retornam verdadeiro se ARG1 for "
-"igual,\n"
+" Operadores binários de aritmética retornam verdadeiro se ARG1 for igual,\n"
" não-igual, menor-que, menor-ou-igual-a ou maior-ou-igual-a ARG2.\n"
" \n"
" Status de saída:\n"
-" Retorna sucesso, se EXPR for avaliada como verdadeira; falha, se EXPR "
-"for\n"
+" Retorna sucesso, se EXPR for avaliada como verdadeira; falha, se EXPR for\n"
" avaliada como falsa ou um argumento inválido for informado."
# help [
@@ -4646,8 +4439,7 @@ msgstr ""
msgid ""
"Display process times.\n"
" \n"
-" Prints the accumulated user and system times for the shell and all of "
-"its\n"
+" Prints the accumulated user and system times for the shell and all of its\n"
" child processes.\n"
" \n"
" Exit Status:\n"
@@ -4666,8 +4458,7 @@ msgstr ""
msgid ""
"Trap signals and other events.\n"
" \n"
-" Defines and activates handlers to be run when the shell receives "
-"signals\n"
+" Defines and activates handlers to be run when the shell receives signals\n"
" or other conditions.\n"
" \n"
" ARG is a command to be read and executed when the shell receives the\n"
@@ -4676,34 +4467,26 @@ msgid ""
" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
" shell and by the commands it invokes.\n"
" \n"
-" If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell. "
-"If\n"
-" a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command. "
-"If\n"
-" a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or "
-"a\n"
-" script run by the . or source builtins finishes executing. A "
-"SIGNAL_SPEC\n"
-" of ERR means to execute ARG each time a command's failure would cause "
-"the\n"
+" If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell. If\n"
+" a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command. If\n"
+" a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or a\n"
+" script run by the . or source builtins finishes executing. A SIGNAL_SPEC\n"
+" of ERR means to execute ARG each time a command's failure would cause the\n"
" shell to exit when the -e option is enabled.\n"
" \n"
-" If no arguments are supplied, trap prints the list of commands "
-"associated\n"
+" If no arguments are supplied, trap prints the list of commands associated\n"
" with each signal.\n"
" \n"
" Options:\n"
" -l\tprint a list of signal names and their corresponding numbers\n"
" -p\tdisplay the trap commands associated with each SIGNAL_SPEC\n"
" \n"
-" Each SIGNAL_SPEC is either a signal name in or a signal "
-"number.\n"
+" Each SIGNAL_SPEC is either a signal name in or a signal number.\n"
" Signal names are case insensitive and the SIG prefix is optional. A\n"
" signal may be sent to the shell with \"kill -signal $$\".\n"
" \n"
" Exit Status:\n"
-" Returns success unless a SIGSPEC is invalid or an invalid option is "
-"given."
+" Returns success unless a SIGSPEC is invalid or an invalid option is given."
msgstr ""
"Tratamento de sinais e outros eventos.\n"
" \n"
@@ -4769,8 +4552,7 @@ msgid ""
" NAME\tCommand name to be interpreted.\n"
" \n"
" Exit Status:\n"
-" Returns success if all of the NAMEs are found; fails if any are not "
-"found."
+" Returns success if all of the NAMEs are found; fails if any are not found."
msgstr ""
"Exibe informação sobre o tipo de comando.\n"
" \n"
@@ -4801,12 +4583,10 @@ msgstr ""
# help ulimit
#: builtins.c:1431
-#, fuzzy
msgid ""
"Modify shell resource limits.\n"
" \n"
-" Provides control over the resources available to the shell and "
-"processes\n"
+" Provides control over the resources available to the shell and processes\n"
" it creates, on systems that allow such control.\n"
" \n"
" Options:\n"
@@ -4853,7 +4633,7 @@ msgstr ""
"Modifica limites de recursos do shell.\n"
" \n"
" Fornece controle sobre os recursos disponíveis para o shell e\n"
-" seus processos, em sistemas que permitem tal controle.\n"
+" os processos que ele cria, em sistemas que permitem tal controle.\n"
" \n"
" Opções:\n"
" -S\tusa um limite `soft' de recursos\n"
@@ -4877,7 +4657,9 @@ msgstr ""
" -u\to número máximo de processos de usuário\n"
" -v\to tamanho de memória virtual\n"
" -x\to número máximo de travas de arquivos\n"
-" -P\to número máximo de pseudo-terminais\n"
+" -P\to número máximo de pseudoterminais\n"
+" -R\to tempo máximo que um processo de tempo real pode executar\n"
+" antes de ser bloqueado\n"
" -T\to número máximo de fluxos (threads)\n"
" \n"
" Nem todas as opções estão disponíveis em todas as plataformas.\n"
@@ -4934,27 +4716,22 @@ msgstr ""
# help wait
#: builtins.c:1502
-#, fuzzy
msgid ""
"Wait for job completion and return exit status.\n"
" \n"
-" Waits for each process identified by an ID, which may be a process ID or "
-"a\n"
+" Waits for each process identified by an ID, which may be a process ID or a\n"
" job specification, and reports its termination status. If ID is not\n"
" given, waits for all currently active child processes, and the return\n"
" status is zero. If ID is a job specification, waits for all processes\n"
" in that job's pipeline.\n"
" \n"
-" If the -n option is supplied, waits for a single job from the list of "
-"IDs,\n"
-" or, if no IDs are supplied, for the next job to complete and returns "
-"its\n"
+" If the -n option is supplied, waits for a single job from the list of IDs,\n"
+" or, if no IDs are supplied, for the next job to complete and returns its\n"
" exit status.\n"
" \n"
" If the -p option is supplied, the process or job identifier of the job\n"
" for which the exit status is returned is assigned to the variable VAR\n"
-" named by the option argument. The variable will be unset initially, "
-"before\n"
+" named by the option argument. The variable will be unset initially, before\n"
" any assignment. This is useful only when the -n option is supplied.\n"
" \n"
" If the -f option is supplied, and job control is enabled, waits for the\n"
@@ -4977,27 +4754,27 @@ msgstr ""
" Se a opção -n for fornecida, espera pelo próximo trabalho terminar e\n"
" retorna seu status de trabalho.\n"
" \n"
-" Se a opção -f for fornecida, e o controle de trabalho estiver ativado,\n"
-" espera o ID especificado terminar, em vez de esperar ele alterar o\n"
-" status.\n"
+" Se a opção -p for fornecida, o identificador de processo ou trabalho do\n"
+" trabalho, ao qual o status de saída é retornado, é atribuído à variável\n"
+" VAR nomeada pelo argumento da opção.A variável terá sua definição\n"
+" removida inicialmente, antes de qualquer atribuição.Isso é útil quando.\n"
" \n"
" Status de saída:\n"
" Retorna o status do último ID; falha, se ID for inválido ou uma opção\n"
-" inválida for fornecida."
+" inválida for fornecida, ou se -n é fornecida e o shell possui nenhum\n"
+" filho inesperado."
# help wait
#: builtins.c:1533
msgid ""
"Wait for process completion and return exit status.\n"
" \n"
-" Waits for each process specified by a PID and reports its termination "
-"status.\n"
+" Waits for each process specified by a PID and reports its termination status.\n"
" If PID is not given, waits for all currently active child processes,\n"
" and the return status is zero. PID must be a process ID.\n"
" \n"
" Exit Status:\n"
-" Returns the status of the last PID; fails if PID is invalid or an "
-"invalid\n"
+" Returns the status of the last PID; fails if PID is invalid or an invalid\n"
" option is given."
msgstr ""
"Espera por conclusão de processo e retorna o status de saída.\n"
@@ -5028,8 +4805,7 @@ msgstr ""
" \n"
" O loop `for' executa uma sequência de comandos para cada membro em\n"
" uma lista de itens. Se `in PALAVRAS ...;' não estiver presente, então\n"
-" `in \"$@\"' é presumido. Para cada elemento em PALAVRAS, NOME é "
-"definido\n"
+" `in \"$@\"' é presumido. Para cada elemento em PALAVRAS, NOME é definido\n"
" com aquele elemento e os COMANDOS são executados.\n"
" \n"
" Status de saída:\n"
@@ -5158,17 +4934,12 @@ msgstr ""
msgid ""
"Execute commands based on conditional.\n"
" \n"
-" The `if COMMANDS' list is executed. If its exit status is zero, then "
-"the\n"
-" `then COMMANDS' list is executed. Otherwise, each `elif COMMANDS' list "
-"is\n"
+" The `if COMMANDS' list is executed. If its exit status is zero, then the\n"
+" `then COMMANDS' list is executed. Otherwise, each `elif COMMANDS' list is\n"
" executed in turn, and if its exit status is zero, the corresponding\n"
-" `then COMMANDS' list is executed and the if command completes. "
-"Otherwise,\n"
-" the `else COMMANDS' list is executed, if present. The exit status of "
-"the\n"
-" entire construct is the exit status of the last command executed, or "
-"zero\n"
+" `then COMMANDS' list is executed and the if command completes. Otherwise,\n"
+" the `else COMMANDS' list is executed, if present. The exit status of the\n"
+" entire construct is the exit status of the last command executed, or zero\n"
" if no condition tested true.\n"
" \n"
" Exit Status:\n"
@@ -5255,8 +5026,7 @@ msgid ""
"Define shell function.\n"
" \n"
" Create a shell function named NAME. When invoked as a simple command,\n"
-" NAME runs COMMANDs in the calling shell's context. When NAME is "
-"invoked,\n"
+" NAME runs COMMANDs in the calling shell's context. When NAME is invoked,\n"
" the arguments are passed to the function as $1...$n, and the function's\n"
" name is in $FUNCNAME.\n"
" \n"
@@ -5319,7 +5089,6 @@ msgstr ""
# help '(('
#: builtins.c:1726
-#, fuzzy
msgid ""
"Evaluate arithmetic expression.\n"
" \n"
@@ -5332,7 +5101,7 @@ msgstr ""
"Avalia expressões aritméticas.\n"
" \n"
" A EXPRESSÃO é avaliada de acordo com as regras de avaliação aritmética.\n"
-" Equivalente a \"let EXPRESSÃO\".\n"
+" Equivalente a `let \"EXPRESSÃO\"'.\n"
" \n"
" Status de saída:\n"
" Retorna 1, se EXPRESSÃO for avaliada como 0; do contrário, retorna 0."
@@ -5342,12 +5111,9 @@ msgstr ""
msgid ""
"Execute conditional command.\n"
" \n"
-" Returns a status of 0 or 1 depending on the evaluation of the "
-"conditional\n"
-" expression EXPRESSION. Expressions are composed of the same primaries "
-"used\n"
-" by the `test' builtin, and may be combined using the following "
-"operators:\n"
+" Returns a status of 0 or 1 depending on the evaluation of the conditional\n"
+" expression EXPRESSION. Expressions are composed of the same primaries used\n"
+" by the `test' builtin, and may be combined using the following operators:\n"
" \n"
" ( EXPRESSION )\tReturns the value of EXPRESSION\n"
" ! EXPRESSION\t\tTrue if EXPRESSION is false; else false\n"
@@ -5475,8 +5241,7 @@ msgstr ""
" OSTYPE\t\t\tA versão do Unix no qual Bash está sendo executado.\n"
" PATH\t\t\tUma lista separada por dois-pontos de diretórios para\n"
" \t\t\tpesquisar ao se procurar por comandos.\n"
-" PROMPT_COMMAND\tUm comando a ser executado antes de imprimir cada "
-"prompt\n"
+" PROMPT_COMMAND\tUm comando a ser executado antes de imprimir cada prompt\n"
" \t\t\tprimário.\n"
" PS1\t\t\t\tA string de prompt primário.\n"
" PS2\t\t\t\tA string de prompt secundária.\n"
@@ -5717,34 +5482,27 @@ msgid ""
" -v var\tassign the output to shell variable VAR rather than\n"
" \t\tdisplay it on the standard output\n"
" \n"
-" FORMAT is a character string which contains three types of objects: "
-"plain\n"
-" characters, which are simply copied to standard output; character "
-"escape\n"
+" FORMAT is a character string which contains three types of objects: plain\n"
+" characters, which are simply copied to standard output; character escape\n"
" sequences, which are converted and copied to the standard output; and\n"
-" format specifications, each of which causes printing of the next "
-"successive\n"
+" format specifications, each of which causes printing of the next successive\n"
" argument.\n"
" \n"
-" In addition to the standard format specifications described in "
-"printf(1),\n"
+" In addition to the standard format specifications described in printf(1),\n"
" printf interprets:\n"
" \n"
" %b\texpand backslash escape sequences in the corresponding argument\n"
" %q\tquote the argument in a way that can be reused as shell input\n"
-" %(fmt)T\toutput the date-time string resulting from using FMT as a "
-"format\n"
+" %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
" \t string for strftime(3)\n"
" \n"
" The format is re-used as necessary to consume all of the arguments. If\n"
" there are fewer arguments than the format requires, extra format\n"
-" specifications behave as if a zero value or null string, as "
-"appropriate,\n"
+" specifications behave as if a zero value or null string, as appropriate,\n"
" had been supplied.\n"
" \n"
" Exit Status:\n"
-" Returns success unless an invalid option is given or a write or "
-"assignment\n"
+" Returns success unless an invalid option is given or a write or assignment\n"
" error occurs."
msgstr ""
"Formata e imprime ARGUMENTOS sob controle de FORMATO.\n"
@@ -5780,14 +5538,11 @@ msgstr ""
# help complete
#: builtins.c:1971
-#, fuzzy
msgid ""
"Specify how arguments are to be completed by Readline.\n"
" \n"
-" For each NAME, specify how arguments are to be completed. If no "
-"options\n"
-" are supplied, existing completion specifications are printed in a way "
-"that\n"
+" For each NAME, specify how arguments are to be completed. If no options\n"
+" are supplied, existing completion specifications are printed in a way that\n"
" allows them to be reused as input.\n"
" \n"
" Options:\n"
@@ -5802,10 +5557,8 @@ msgid ""
" \t\tcommand) word\n"
" \n"
" When completion is attempted, the actions are applied in the order the\n"
-" uppercase-letter options are listed above. If multiple options are "
-"supplied,\n"
-" the -D option takes precedence over -E, and both take precedence over -"
-"I.\n"
+" uppercase-letter options are listed above. If multiple options are supplied,\n"
+" the -D option takes precedence over -E, and both take precedence over -I.\n"
" \n"
" Exit Status:\n"
" Returns success unless an invalid option is supplied or an error occurs."
@@ -5817,21 +5570,18 @@ msgstr ""
" impressas em uma forma que permite-as serem usadas como entrada.\n"
" \n"
" Opções:\n"
-" -p\timprime especificações existentes de completar em um formato "
-"usável\n"
-" -r\tremove uma especificação de completar para cada NOME ou, se "
-"nenhum\n"
-" \t\tNOME for fornecido, todas as especificações de completar\n"
+" -p\timprime especificações existentes de completar em um formato usável\n"
+" -r\tremove uma especificação de completar para cada NOME ou, se nenhum\n"
+" \t\tNOME for fornecido, todas as especificações de completar\n"
" -D\taplica as completações e ações como sendo o padrão para comandos\n"
-" \t\tsem qualquer especificação definida\n"
+" \t\tsem qualquer especificação definida\n"
" -E\taplica as completações e ações para tentativa de completar\n"
-" \t\tcomandos -- \"vazios\" em uma linha vazia\n"
+" \t\tcomandos -- \"vazios\" em uma linha vazia\n"
" -I\taplica completações e ações para a palavra inicial (geralmente o\n"
" \t\tcomando)\n"
" \n"
" Ao tentar completar, as ações são fornecidas na ordem em que as opções\n"
-" de letras de caixa alta são listadas acima. Se várias opções forem "
-"fornecidas,\n"
+" de letras de caixa alta são listadas acima. Se várias opções forem fornecidas,\n"
" a opção -D tem precedência sobre -E, e ambos têm precedência sobre -I.\n"
" sobre -E.\n"
" \n"
@@ -5845,8 +5595,7 @@ msgid ""
"Display possible completions depending on the options.\n"
" \n"
" Intended to be used from within a shell function generating possible\n"
-" completions. If the optional WORD argument is supplied, matches "
-"against\n"
+" completions. If the optional WORD argument is supplied, matches against\n"
" WORD are generated.\n"
" \n"
" Exit Status:\n"
@@ -5867,12 +5616,9 @@ msgstr ""
msgid ""
"Modify or display completion options.\n"
" \n"
-" Modify the completion options for each NAME, or, if no NAMEs are "
-"supplied,\n"
-" the completion currently being executed. If no OPTIONs are given, "
-"print\n"
-" the completion options for each NAME or the current completion "
-"specification.\n"
+" Modify the completion options for each NAME, or, if no NAMEs are supplied,\n"
+" the completion currently being executed. If no OPTIONs are given, print\n"
+" the completion options for each NAME or the current completion specification.\n"
" \n"
" Options:\n"
" \t-o option\tSet completion option OPTION for each NAME\n"
@@ -5902,7 +5648,7 @@ msgstr ""
" especificação de completação atual.\n"
" \n"
" Opções:\n"
-" \t-o OPÇÃO\tDefine a opção de completação OPÇÃO para cada NOME\n"
+" \t-o opção\tDefine a opção de completação OPÇÃO para cada NOME\n"
" \t-D\t\tAltera opções para a completação de comando \"padrão\"\n"
" \t-E\t\tAltera opções para a completação de comando \"vazio\"\n"
" \t-I\t\tAltera as opções para completação na palavra inicial\n"
@@ -5927,22 +5673,17 @@ msgstr ""
msgid ""
"Read lines from the standard input into an indexed array variable.\n"
" \n"
-" Read lines from the standard input into the indexed array variable "
-"ARRAY, or\n"
-" from file descriptor FD if the -u option is supplied. The variable "
-"MAPFILE\n"
+" Read lines from the standard input into the indexed array variable ARRAY, or\n"
+" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n"
" is the default ARRAY.\n"
" \n"
" Options:\n"
" -d delim\tUse DELIM to terminate lines, instead of newline\n"
-" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are "
-"copied\n"
-" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default "
-"index is 0\n"
+" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied\n"
+" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0\n"
" -s count\tDiscard the first COUNT lines read\n"
" -t\tRemove a trailing DELIM from each line read (default newline)\n"
-" -u fd\tRead lines from file descriptor FD instead of the standard "
-"input\n"
+" -u fd\tRead lines from file descriptor FD instead of the standard input\n"
" -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n"
" -c quantum\tSpecify the number of lines read between each call to\n"
" \t\t\tCALLBACK\n"
@@ -5955,13 +5696,11 @@ msgid ""
" element to be assigned and the line to be assigned to that element\n"
" as additional arguments.\n"
" \n"
-" If not supplied with an explicit origin, mapfile will clear ARRAY "
-"before\n"
+" If not supplied with an explicit origin, mapfile will clear ARRAY before\n"
" assigning to it.\n"
" \n"
" Exit Status:\n"
-" Returns success unless an invalid option is given or ARRAY is readonly "
-"or\n"
+" Returns success unless an invalid option is given or ARRAY is readonly or\n"
" not an indexed array."
msgstr ""
"Lê linhas da entrada padrão para uma variável array indexado.\n"
@@ -5971,29 +5710,24 @@ msgstr ""
" MAPFILE é o ARRAY padrão.\n"
" \n"
" Opções:\n"
-" -d DELIM Usa DELIM para terminar linhas, ao invés de nova linha\n"
-" -n NÚMERO Copia no máximo NÚMERO linhas. Se NÚMERO for 0, todas "
-"as\n"
+" -d dlim Usa DELIM para terminar linhas, ao invés de nova linha\n"
+" -n número Copia no máximo NÚMERO linhas. Se NÚMERO for 0, todas as\n"
" linhas são copiadas\n"
-" -O ORIGEM Inicia atribuição de ARRAY no índice ORIGEM. O índice\n"
+" -O origem Inicia atribuição de ARRAY no índice ORIGEM. O índice\n"
" padrão é 0\n"
-" -s NÚMERO Descarta as primeiras NÚMERO linhas lidas\n"
+" -s número Descarta as primeiras NÚMERO linhas lidas\n"
" -t Remove uma DELIM ao final para cada linha lida\n"
" (padrão: nova linha)\n"
-" -u FD Lê linhas do descritor de arquivos FD, ao invés da "
-"entrada\n"
+" -u fd Lê linhas do descritor de arquivos FD, ao invés da entrada\n"
" padrão\n"
-" -C CHAMADA Avalia CHAMADA a cada vez que QUANTIDADE linhas foram "
-"lidas\n"
-" -c QUANTIDADE Especifica o número de linhas lidas entre cada chamada "
-"para\n"
+" -C chamada Avalia CHAMADA a cada vez que QUANTIDADE linhas foram lidas\n"
+" -c quantidade Especifica o número de linhas lidas entre cada chamada para\n"
" CHAMADA\n"
" \n"
" Argumentos:\n"
" ARRAY Nome da variável array para usar para arquivos de dados\n"
" \n"
-" Se -C for fornecido sem -c, a quantidade padrão é 5000. Quando CHAMADA "
-"é\n"
+" Se -C for fornecido sem -c, a quantidade padrão é 5000. Quando CHAMADA é\n"
" avaliada, é fornecido o índice para o próximo elemento da array ser\n"
" atribuído e a linha para ser atribuída àquele elemento como argumentos\n"
" adicionais\n"
@@ -6090,12 +5824,9 @@ msgstr ""
#~ " If FILENAME is given, it is used as the history file. Otherwise,\n"
#~ " if HISTFILE has a value, that is used, else ~/.bash_history.\n"
#~ " \n"
-#~ " If the HISTTIMEFORMAT variable is set and not null, its value is "
-#~ "used\n"
-#~ " as a format string for strftime(3) to print the time stamp "
-#~ "associated\n"
-#~ " with each displayed history entry. No time stamps are printed "
-#~ "otherwise.\n"
+#~ " If the HISTTIMEFORMAT variable is set and not null, its value is used\n"
+#~ " as a format string for strftime(3) to print the time stamp associated\n"
+#~ " with each displayed history entry. No time stamps are printed otherwise.\n"
#~ " \n"
#~ " Exit Status:\n"
#~ " Returns success unless an invalid option is given or an error occurs."
@@ -6121,16 +5852,12 @@ msgstr ""
#~ " -s\t\t\tanexa os ARGs à lista de histórico como uma única entrada\n"
#~ " \n"
#~ " Se ARQUIVO for fornecido, ele é usado como o arquivo de histórico.\n"
-#~ " Do contrário, se a variável HISTFILE tiver um valor, este será "
-#~ "usado;\n"
+#~ " Do contrário, se a variável HISTFILE tiver um valor, este será usado;\n"
#~ " senão, usa de ~/.bash_history.\n"
#~ " \n"
-#~ " Se a variável HISTTIMEFORMAT for definida e não for nula, seu valor "
-#~ "é\n"
-#~ " usado como uma string de formato para strftime(3) para mostrar a "
-#~ "marca\n"
-#~ " de tempo associada com cada entrada de histórico exibida. Do "
-#~ "contrário,\n"
+#~ " Se a variável HISTTIMEFORMAT for definida e não for nula, seu valor é\n"
+#~ " usado como uma string de formato para strftime(3) para mostrar a marca\n"
+#~ " de tempo associada com cada entrada de histórico exibida. Do contrário,\n"
#~ " nenhuma marca de tempo é mostrada.\n"
#~ " \n"
#~ " Status de saída:\n"
@@ -6151,10 +5878,8 @@ msgstr ""
#~ " -l\tlist the signal names; if arguments follow `-l' they are\n"
#~ " \t\tassumed to be signal numbers for which names should be listed\n"
#~ " \n"
-#~ " Kill is a shell builtin for two reasons: it allows job IDs to be "
-#~ "used\n"
-#~ " instead of process IDs, and allows processes to be killed if the "
-#~ "limit\n"
+#~ " Kill is a shell builtin for two reasons: it allows job IDs to be used\n"
+#~ " instead of process IDs, and allows processes to be killed if the limit\n"
#~ " on processes that you can create is reached.\n"
#~ " \n"
#~ " Exit Status:\n"
@@ -6212,8 +5937,7 @@ msgstr ""
#~ " history enable command history\n"
#~ " ignoreeof the shell will not exit upon reading EOF\n"
#~ " interactive-comments\n"
-#~ " allow comments to appear in interactive "
-#~ "commands\n"
+#~ " allow comments to appear in interactive commands\n"
#~ " keyword same as -k\n"
#~ " monitor same as -m\n"
#~ " noclobber same as -C\n"
@@ -6224,12 +5948,9 @@ msgstr ""
#~ " nounset same as -u\n"
#~ " onecmd same as -t\n"
#~ " physical same as -P\n"
-#~ " pipefail the return value of a pipeline is the status "
-#~ "of\n"
-#~ " the last command to exit with a non-zero "
-#~ "status,\n"
-#~ " or zero if no command exited with a non-zero "
-#~ "status\n"
+#~ " pipefail the return value of a pipeline is the status of\n"
+#~ " the last command to exit with a non-zero status,\n"
+#~ " or zero if no command exited with a non-zero status\n"
#~ " posix change the behavior of bash where the default\n"
#~ " operation differs from the Posix standard to\n"
#~ " match the standard\n"
@@ -6237,11 +5958,9 @@ msgstr ""
#~ " verbose same as -v\n"
#~ " vi use a vi-style line editing interface\n"
#~ " xtrace same as -x\n"
-#~ " -p Turned on whenever the real and effective user ids do not "
-#~ "match.\n"
+#~ " -p Turned on whenever the real and effective user ids do not match.\n"
#~ " Disables processing of the $ENV file and importing of shell\n"
-#~ " functions. Turning this option off causes the effective uid "
-#~ "and\n"
+#~ " functions. Turning this option off causes the effective uid and\n"
#~ " gid to be set to the real uid and gid.\n"
#~ " -t Exit after reading and executing one command.\n"
#~ " -u Treat unset variables as an error when substituting.\n"
@@ -6264,32 +5983,26 @@ msgstr ""
#~ " \n"
#~ " Using + rather than - causes these flags to be turned off. The\n"
#~ " flags can also be used upon invocation of the shell. The current\n"
-#~ " set of flags may be found in $-. The remaining n ARGs are "
-#~ "positional\n"
+#~ " set of flags may be found in $-. The remaining n ARGs are positional\n"
#~ " parameters and are assigned, in order, to $1, $2, .. $n. If no\n"
#~ " ARGs are given, all shell variables are printed.\n"
#~ " \n"
#~ " Exit Status:\n"
#~ " Returns success unless an invalid option is given."
#~ msgstr ""
-#~ "Define ou remove definição de valores das opções e dos parâmetros "
-#~ "posicionais\n"
+#~ "Define ou remove definição de valores das opções e dos parâmetros posicionais\n"
#~ "do shell:\n"
#~ " \n"
-#~ " Altera o valor de opções e de parâmetros posicionais do shell ou "
-#~ "mostra\n"
+#~ " Altera o valor de opções e de parâmetros posicionais do shell ou mostra\n"
#~ " os nomes ou valores de variáveis shell.\n"
#~ " \n"
#~ " Opções:\n"
-#~ " -a Marca variáveis, que foram modificadas ou criadas, para "
-#~ "exportação.\n"
+#~ " -a Marca variáveis, que foram modificadas ou criadas, para exportação.\n"
#~ " -b Notifica sobre terminação de trabalho imediatamente.\n"
#~ " -e Sai imediatamente se um comando sai com um status não-zero.\n"
#~ " -f Desabilita a geração de nome de arquivo (\"globbing\").\n"
-#~ " -h Memoriza a localização de comandos à medida em que são "
-#~ "procurados.\n"
-#~ " -k Todos argumentos de atribuição são colocados no ambiente para "
-#~ "um\n"
+#~ " -h Memoriza a localização de comandos à medida em que são procurados.\n"
+#~ " -k Todos argumentos de atribuição são colocados no ambiente para um\n"
#~ " comando, e não apenas aqueles que precedem o nome do comando.\n"
#~ " -m Controle de trabalho está habilitado.\n"
#~ " -n Lê comandos, mas não os executa.\n"
@@ -6306,8 +6019,7 @@ msgstr ""
#~ " history habilita histórico de comandos\n"
#~ " ignoreeof shell não vai sair após leitura de EOF\n"
#~ " interactive-comments\n"
-#~ " permite mostrar comentários em comandos "
-#~ "interativos\n"
+#~ " permite mostrar comentários em comandos interativos\n"
#~ " keyword mesmo que -k\n"
#~ " monitor mesmo que -m\n"
#~ " noclobber mesmo que -C\n"
@@ -6318,61 +6030,43 @@ msgstr ""
#~ " nounset mesmo que -u\n"
#~ " onecmd mesmo que -t\n"
#~ " physical mesmo que -P\n"
-#~ " pipefail o valor de retorno de uma linha de comandos é "
-#~ "o\n"
-#~ " status do último comando a sair com status não-"
-#~ "zero,\n"
-#~ " ou zero se nenhum comando saiu com status não "
-#~ "zero\n"
-#~ " posix altera o comportamento do bash, onde a "
-#~ "operação\n"
+#~ " pipefail o valor de retorno de uma linha de comandos é o\n"
+#~ " status do último comando a sair com status não-zero,\n"
+#~ " ou zero se nenhum comando saiu com status não zero\n"
+#~ " posix altera o comportamento do bash, onde a operação\n"
#~ " padrão diverge dos padrões do Posix para\n"
#~ " corresponder a estes padrões\n"
#~ " privileged mesmo que -p\n"
#~ " verbose mesmo que -v\n"
#~ " vi usa interface de edição de linha estilo vi\n"
#~ " xtrace mesmo que -x\n"
-#~ " -p Ligado sempre que IDs de usuário real e efetivo não "
-#~ "corresponderem.\n"
-#~ " Desabilita processamento do arquivo $ENV e importação de "
-#~ "funções da\n"
-#~ " shell. Ao desligar essa opção, causa o uid e o gid efetivo "
-#~ "serem\n"
+#~ " -p Ligado sempre que IDs de usuário real e efetivo não corresponderem.\n"
+#~ " Desabilita processamento do arquivo $ENV e importação de funções da\n"
+#~ " shell. Ao desligar essa opção, causa o uid e o gid efetivo serem\n"
#~ " os uid e gid reais.\n"
#~ " -t Sai após a leitura e execução de um comando.\n"
-#~ " -u Trata limpeza (unset) de variáveis como um erro quando "
-#~ "substituindo.\n"
-#~ " -v Mostra linhas de entrada do shell na medida em que forem "
-#~ "lidas.\n"
-#~ " -x Mostra comandos e seus argumentos na medida em que forme "
-#~ "executados.\n"
+#~ " -u Trata limpeza (unset) de variáveis como um erro quando substituindo.\n"
+#~ " -v Mostra linhas de entrada do shell na medida em que forem lidas.\n"
+#~ " -x Mostra comandos e seus argumentos na medida em que forme executados.\n"
#~ " -B o shell vai realizar expansão de chaves\n"
#~ " -C Se definido, não permite arquivos normais existentes serem\n"
#~ " sobrescritos por redirecionamento da saída.\n"
#~ " -E Se definido, a armadilha ERR é herdada por funções do shell.\n"
-#~ " -H Habilita substituição de histórico estilo \"!\". Essa "
-#~ "sinalização está\n"
+#~ " -H Habilita substituição de histórico estilo \"!\". Essa sinalização está\n"
#~ " habilitada por padrão quando shell é interativa.\n"
-#~ " -P Se definida, não resolve links simbólicos ao sair de comandos, "
-#~ "tais\n"
+#~ " -P Se definida, não resolve links simbólicos ao sair de comandos, tais\n"
#~ " como `cd' (que altera o diretório atual).\n"
#~ " -T Se definido, a armadilha DEBUG é herdada por funções do shell.\n"
-#~ " -- Atribui quaisquer argumentos restantes aos parâmetros "
-#~ "posicionais.\n"
-#~ " Se não houver argumentos restantes, os parâmetros posicionais "
-#~ "são\n"
+#~ " -- Atribui quaisquer argumentos restantes aos parâmetros posicionais.\n"
+#~ " Se não houver argumentos restantes, os parâmetros posicionais são\n"
#~ " limpos (unset).\n"
-#~ " - Atribui quaisquer argumentos restantes aos parâmetros "
-#~ "posicionais.\n"
+#~ " - Atribui quaisquer argumentos restantes aos parâmetros posicionais.\n"
#~ " As opções -x e -v são desligadas.\n"
#~ " \n"
#~ " Usar +, ao invés de -, causa essas sinalizações serem desligadas. As\n"
-#~ " sinalizações também podem ser usadas por meio de chamada do shell. "
-#~ "As\n"
-#~ " sinalizações atualmente definidas podem ser encontradas em $-. Os n "
-#~ "ARGs\n"
-#~ " restantes são parâmetros posicionais e são atribuídos, em ordem, a "
-#~ "$1, $2,\n"
+#~ " sinalizações também podem ser usadas por meio de chamada do shell. As\n"
+#~ " sinalizações atualmente definidas podem ser encontradas em $-. Os n ARGs\n"
+#~ " restantes são parâmetros posicionais e são atribuídos, em ordem, a $1, $2,\n"
#~ " .. $n. Se nenhuma ARG for fornecido, todas as variáveis shell são\n"
#~ " mostradas.\n"
#~ " \n"
@@ -6383,10 +6077,8 @@ msgstr ""
#~ msgid ""
#~ "Create a coprocess named NAME.\n"
#~ " \n"
-#~ " Execute COMMAND asynchronously, with the standard output and "
-#~ "standard\n"
-#~ " input of the command connected via a pipe to file descriptors "
-#~ "assigned\n"
+#~ " Execute COMMAND asynchronously, with the standard output and standard\n"
+#~ " input of the command connected via a pipe to file descriptors assigned\n"
#~ " to indices 0 and 1 of an array variable NAME in the executing shell.\n"
#~ " The default NAME is \"COPROC\".\n"
#~ " \n"
@@ -6396,8 +6088,7 @@ msgstr ""
#~ "Cria um coprocesso chamado NOME.\n"
#~ " \n"
#~ " Executa COMANDO assincronamente, com a saída padrão e entrada padrão\n"
-#~ " do comando conectados via um `pipe' (redirecionamento) para "
-#~ "descritores\n"
+#~ " do comando conectados via um `pipe' (redirecionamento) para descritores\n"
#~ " de arquivo atribuídos para índices 0 e 1 de uma variável array NOME\n"
#~ " no shell em execução. O NOME padrão é \"COPROC\".\n"
#~ " \n"
@@ -6520,8 +6211,7 @@ msgstr ""
#~ msgstr "substituição de comando"
#~ msgid "Can't reopen pipe to command substitution (fd %d): %s"
-#~ msgstr ""
-#~ "Impossível reabrir o `pipe' para substituição de comando (fd %d): %s"
+#~ msgstr "Impossível reabrir o `pipe' para substituição de comando (fd %d): %s"
#~ msgid "$%c: unbound variable"
#~ msgstr "$%c: variável não associada"
@@ -6605,8 +6295,7 @@ msgstr ""
#~ msgstr "de aliases na forma `alias NOME=VALOR' na saída padrão."
#~ msgid "Otherwise, an alias is defined for each NAME whose VALUE is given."
-#~ msgstr ""
-#~ "Ou então, um alias é definido para cada NOME cujo VALOR for fornecido."
+#~ msgstr "Ou então, um alias é definido para cada NOME cujo VALOR for fornecido."
#~ msgid "A trailing space in VALUE causes the next word to be checked for"
#~ msgstr "Um espaço após VALOR faz a próxima palavra ser verificada para"
@@ -6615,45 +6304,34 @@ msgstr ""
#~ msgstr "substituição do alias quando o alias é expandido. Alias retorna"
#~ msgid "true unless a NAME is given for which no alias has been defined."
-#~ msgstr ""
-#~ "verdadeiro, a não ser que seja fornecido um NOME sem alias definido."
+#~ msgstr "verdadeiro, a não ser que seja fornecido um NOME sem alias definido."
-#~ msgid ""
-#~ "Remove NAMEs from the list of defined aliases. If the -a option is given,"
-#~ msgstr ""
-#~ "Remove NOMEs da lista de aliases definidos. Se a opção -a for fornecida,"
+#~ msgid "Remove NAMEs from the list of defined aliases. If the -a option is given,"
+#~ msgstr "Remove NOMEs da lista de aliases definidos. Se a opção -a for fornecida,"
#~ msgid "then remove all alias definitions."
#~ msgstr "então todas as definições de alias são removidas."
#~ msgid "Bind a key sequence to a Readline function, or to a macro. The"
-#~ msgstr ""
-#~ "Víncula uma seqüência de teclas a uma função de leitura de linha, ou a uma"
+#~ msgstr "Víncula uma sequência de teclas a uma função de leitura de linha, ou a uma"
#~ msgid "syntax is equivalent to that found in ~/.inputrc, but must be"
-#~ msgstr ""
-#~ "macro. A sintaxe é equivalente à encontrada em ~/.inputrc, mas deve ser"
+#~ msgstr "macro. A sintaxe é equivalente à encontrada em ~/.inputrc, mas deve ser"
-#~ msgid ""
-#~ "passed as a single argument: bind '\"\\C-x\\C-r\": re-read-init-file'."
-#~ msgstr ""
-#~ "passada como um único argumento: bind '\"\\C-x\\C-r\": re-read-init-file'."
+#~ msgid "passed as a single argument: bind '\"\\C-x\\C-r\": re-read-init-file'."
+#~ msgstr "passada como um único argumento: bind '\"\\C-x\\C-r\": re-read-init-file'."
#~ msgid "Arguments we accept:"
#~ msgstr "Argumentos permitidos:"
-#~ msgid ""
-#~ " -m keymap Use `keymap' as the keymap for the duration of this"
-#~ msgstr ""
-#~ " -m MAPA-TECLAS Usar `MAPA-TECLAS' como mapa das teclas pela duração"
+#~ msgid " -m keymap Use `keymap' as the keymap for the duration of this"
+#~ msgstr " -m MAPA-TECLAS Usar `MAPA-TECLAS' como mapa das teclas pela duração"
#~ msgid " command. Acceptable keymap names are emacs,"
#~ msgstr " deste comando. Os nomes aceitos são emacs,"
-#~ msgid ""
-#~ " emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
-#~ msgstr ""
-#~ " emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
+#~ msgid " emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
+#~ msgstr " emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
#~ msgid " vi-command, and vi-insert."
#~ msgstr " vi-command, and vi-insert."
@@ -6664,10 +6342,8 @@ msgstr ""
#~ msgid " -P List function names and bindings."
#~ msgstr " -P Listar nomes e associações das funções."
-#~ msgid ""
-#~ " -p List functions and bindings in a form that can be"
-#~ msgstr ""
-#~ " -p Listar nomes e associações das funções de uma forma"
+#~ msgid " -p List functions and bindings in a form that can be"
+#~ msgstr " -p Listar nomes e associações das funções de uma forma"
#~ msgid " reused as input."
#~ msgstr " que pode ser reutilizada como entrada."
@@ -6678,32 +6354,25 @@ msgstr ""
#~ msgid " -f filename Read key bindings from FILENAME."
#~ msgstr " -f ARQUIVO Ler os vínculos das teclas em ARQUIVO."
-#~ msgid ""
-#~ " -q function-name Query about which keys invoke the named function."
+#~ msgid " -q function-name Query about which keys invoke the named function."
#~ msgstr " -q NOME-FUNÇÃO Consultar quais teclas chamam esta função."
#~ msgid " -V List variable names and values"
#~ msgstr " -V Listar os nomes e os valores das variáveis."
-#~ msgid ""
-#~ " -v List variable names and values in a form that can"
-#~ msgstr ""
-#~ " -v Listar os nomes e os valores das variáveis de uma"
+#~ msgid " -v List variable names and values in a form that can"
+#~ msgstr " -v Listar os nomes e os valores das variáveis de uma"
#~ msgid " be reused as input."
#~ msgstr " forma que pode ser reutilizada como entrada."
-#~ msgid ""
-#~ " -S List key sequences that invoke macros and their "
-#~ "values"
+#~ msgid " -S List key sequences that invoke macros and their values"
#~ msgstr ""
-#~ " -S Listar as seqüências de teclas que chamam macros\n"
+#~ " -S Listar as sequências de teclas que chamam macros\n"
#~ " e seus valores."
-#~ msgid ""
-#~ " -s List key sequences that invoke macros and their "
-#~ "values in"
-#~ msgstr " -s Listar seqüências de teclas que chamam macros"
+#~ msgid " -s List key sequences that invoke macros and their values in"
+#~ msgstr " -s Listar sequências de teclas que chamam macros"
#~ msgid " a form that can be reused as input."
#~ msgstr ""
@@ -6723,8 +6392,7 @@ msgstr ""
#~ msgstr "Se N for especificado, prossegue no N-ésimo laço envolvente."
#~ msgid "Run a shell builtin. This is useful when you wish to rename a"
-#~ msgstr ""
-#~ "Executa um comando interno do shell. Útil quando desejamos substituir"
+#~ msgstr "Executa um comando interno do shell. Útil quando desejamos substituir"
#~ msgid "shell builtin to be a function, but need the functionality of the"
#~ msgstr "um comando interno do shell por uma função, mas necessitamos da"
@@ -6739,12 +6407,10 @@ msgstr ""
#~ msgstr "para DIR. A variável $CDPATH define o caminho de procura para"
#~ msgid "the directory containing DIR. Alternative directory names in CDPATH"
-#~ msgstr ""
-#~ "o diretório que contém DIR. Nomes de diretórios alternativos em CDPATH"
+#~ msgstr "o diretório que contém DIR. Nomes de diretórios alternativos em CDPATH"
#~ msgid "are separated by a colon (:). A null directory name is the same as"
-#~ msgstr ""
-#~ "são separados por dois pontos (:). Um nome de diretório nulo é o mesmo"
+#~ msgstr "são separados por dois pontos (:). Um nome de diretório nulo é o mesmo"
#~ msgid "the current directory, i.e. `.'. If DIR begins with a slash (/),"
#~ msgstr "que o diretório atual, i.e. `.'. Se DIR inicia com uma barra (/),"
@@ -6753,20 +6419,15 @@ msgstr ""
#~ msgstr "então $CDPATH não é usado. Se o diretório não for encontrado, e a"
#~ msgid "shell option `cdable_vars' is set, then try the word as a variable"
-#~ msgstr ""
-#~ "opção `cdable_vars' estiver definida, tentar usar DIR como um nome de"
+#~ msgstr "opção `cdable_vars' estiver definida, tentar usar DIR como um nome de"
#~ msgid "name. If that variable has a value, then cd to the value of that"
-#~ msgstr ""
-#~ "variável. Se esta variável tiver valor, então `cd' para o valor desta"
+#~ msgstr "variável. Se esta variável tiver valor, então `cd' para o valor desta"
-#~ msgid ""
-#~ "variable. The -P option says to use the physical directory structure"
-#~ msgstr ""
-#~ "variável. A opção -P indica para usar a estrutura física do diretório"
+#~ msgid "variable. The -P option says to use the physical directory structure"
+#~ msgstr "variável. A opção -P indica para usar a estrutura física do diretório"
-#~ msgid ""
-#~ "instead of following symbolic links; the -L option forces symbolic links"
+#~ msgid "instead of following symbolic links; the -L option forces symbolic links"
#~ msgstr "em vez de seguir os vínculos simbólicos; a opção -L força seguir os"
#~ msgid "to be followed."
@@ -6781,27 +6442,19 @@ msgstr ""
#~ msgid "makes pwd follow symbolic links."
#~ msgstr "com que `pwd' siga os vínculos simbólicos."
-#~ msgid ""
-#~ "Runs COMMAND with ARGS ignoring shell functions. If you have a shell"
-#~ msgstr ""
-#~ "Executa COMANDO com ARGs ignorando as funções da shell. Ex: Havendo"
+#~ msgid "Runs COMMAND with ARGS ignoring shell functions. If you have a shell"
+#~ msgstr "Executa COMANDO com ARGs ignorando as funções da shell. Ex: Havendo"
#~ msgid "function called `ls', and you wish to call the command `ls', you can"
-#~ msgstr ""
-#~ "uma função `ls', e se for necessário executar o comando `ls', executa-se"
+#~ msgstr "uma função `ls', e se for necessário executar o comando `ls', executa-se"
-#~ msgid ""
-#~ "say \"command ls\". If the -p option is given, a default value is used"
-#~ msgstr ""
-#~ "\"command ls\". Se a opção -p for fornecida, o valor padrão é utilizado"
+#~ msgid "say \"command ls\". If the -p option is given, a default value is used"
+#~ msgstr "\"command ls\". Se a opção -p for fornecida, o valor padrão é utilizado"
-#~ msgid ""
-#~ "for PATH that is guaranteed to find all of the standard utilities. If"
-#~ msgstr ""
-#~ "para PATH, garantindo-se o encontro de todos os utilitários padrão. Se"
+#~ msgid "for PATH that is guaranteed to find all of the standard utilities. If"
+#~ msgstr "para PATH, garantindo-se o encontro de todos os utilitários padrão. Se"
-#~ msgid ""
-#~ "the -V or -v option is given, a string is printed describing COMMAND."
+#~ msgid "the -V or -v option is given, a string is printed describing COMMAND."
#~ msgstr "a opção -V ou -v for fornecida, é exibida a descrição do COMANDO."
#~ msgid "The -V option produces a more verbose description."
@@ -6852,8 +6505,7 @@ msgstr ""
#~ msgid "name only."
#~ msgstr "somente."
-#~ msgid ""
-#~ "Using `+' instead of `-' turns off the given attribute instead. When"
+#~ msgid "Using `+' instead of `-' turns off the given attribute instead. When"
#~ msgstr "Usando `+' em vez de `-' faz o atributo ser desabilitado. Quando"
#~ msgid "used in a function, makes NAMEs local, as with the `local' command."
@@ -6872,8 +6524,7 @@ msgstr ""
#~ msgstr "Exibe ARGs. Se -n for fornecido, o caracter final de nova linha é"
#~ msgid "suppressed. If the -e option is given, interpretation of the"
-#~ msgstr ""
-#~ "suprimido. Se a opção -e for fornecida, a interpretação dos seguintes"
+#~ msgstr "suprimido. Se a opção -e for fornecida, a interpretação dos seguintes"
#~ msgid "following backslash-escaped characters is turned on:"
#~ msgstr "caracteres após a contrabarra é ativada:"
@@ -6911,74 +6562,56 @@ msgstr ""
#~ msgid "\t\\num\tthe character whose ASCII code is NUM (octal)."
#~ msgstr "\t\\num\to caracter com código ASCII igual a NUM (octal)."
-#~ msgid ""
-#~ "You can explicitly turn off the interpretation of the above characters"
-#~ msgstr ""
-#~ "Pode-se explicitamente desabilitar a interpretação dos caracteres acima"
+#~ msgid "You can explicitly turn off the interpretation of the above characters"
+#~ msgstr "Pode-se explicitamente desabilitar a interpretação dos caracteres acima"
#~ msgid "with the -E option."
#~ msgstr "através da opção -E."
-#~ msgid ""
-#~ "Output the ARGs. If -n is specified, the trailing newline is suppressed."
-#~ msgstr ""
-#~ "Exibe ARGS. Se -n for fornecido, o caracter final de nova linha é "
-#~ "suprimido."
+#~ msgid "Output the ARGs. If -n is specified, the trailing newline is suppressed."
+#~ msgstr "Exibe ARGS. Se -n for fornecido, o caracter final de nova linha é suprimido."
#~ msgid "Enable and disable builtin shell commands. This allows"
-#~ msgstr ""
-#~ "Habilita e desabilita os comandos internos do shell, permitindo usar"
+#~ msgstr "Habilita e desabilita os comandos internos do shell, permitindo usar"
#~ msgid "you to use a disk command which has the same name as a shell"
-#~ msgstr ""
-#~ "um comando de disco que tenha o mesmo nome do comando interno do shell."
+#~ msgstr "um comando de disco que tenha o mesmo nome do comando interno do shell."
#~ msgid "builtin. If -n is used, the NAMEs become disabled; otherwise"
-#~ msgstr ""
-#~ "Se -n for especificado, os NOMEs são desabilitados, senão os nomes são"
+#~ msgstr "Se -n for especificado, os NOMEs são desabilitados, senão os nomes são"
#~ msgid "NAMEs are enabled. For example, to use the `test' found on your"
-#~ msgstr ""
-#~ "habilitados. Por exemplo, para usar `test' encontrado pelo PATH em vez"
+#~ msgstr "habilitados. Por exemplo, para usar `test' encontrado pelo PATH em vez"
#~ msgid "path instead of the shell builtin version, type `enable -n test'."
-#~ msgstr ""
-#~ "da versão interna do comando, digite `enable -n test'. Em sistemas que"
+#~ msgstr "da versão interna do comando, digite `enable -n test'. Em sistemas que"
#~ msgid "On systems supporting dynamic loading, the -f option may be used"
-#~ msgstr ""
-#~ "suportam carregamento dinâmico, pode-se usar a opção -f para carregar"
+#~ msgstr "suportam carregamento dinâmico, pode-se usar a opção -f para carregar"
#~ msgid "to load new builtins from the shared object FILENAME. The -d"
-#~ msgstr ""
-#~ "novos comandos internos do objeto compartilhado ARQUIVO. A opção -d"
+#~ msgstr "novos comandos internos do objeto compartilhado ARQUIVO. A opção -d"
#~ msgid "option will delete a builtin previously loaded with -f. If no"
-#~ msgstr ""
-#~ "elimina os comandos internos previamente carregados com -f. Se nenhum"
+#~ msgstr "elimina os comandos internos previamente carregados com -f. Se nenhum"
#~ msgid "non-option names are given, or the -p option is supplied, a list"
-#~ msgstr ""
-#~ "nome for fornecido, ou se a opção -p for fornecida, uma lista de comandos"
+#~ msgstr "nome for fornecido, ou se a opção -p for fornecida, uma lista de comandos"
#~ msgid "of builtins is printed. The -a option means to print every builtin"
-#~ msgstr ""
-#~ "internos é exibida. A opção -a faz com que todos os comandos internos"
+#~ msgstr "internos é exibida. A opção -a faz com que todos os comandos internos"
#~ msgid "with an indication of whether or not it is enabled. The -s option"
#~ msgstr "sejam exibidos indicando se estão habilitados ou não. A opção -s"
#~ msgid "restricts the output to the Posix.2 `special' builtins. The -n"
-#~ msgstr ""
-#~ "restringe a saída aos comandos internos `especiais' Posix.2. A opção"
+#~ msgstr "restringe a saída aos comandos internos `especiais' Posix.2. A opção"
#~ msgid "option displays a list of all disabled builtins."
#~ msgstr "-n exibe a lista de todos os comandos internos desabilitados."
-#~ msgid ""
-#~ "Read ARGs as input to the shell and execute the resulting command(s)."
-#~ msgstr ""
-#~ "Ler ARGs como entrada do shell e executar o(s) comando(s) resultante(s)."
+#~ msgid "Read ARGs as input to the shell and execute the resulting command(s)."
+#~ msgstr "Ler ARGs como entrada do shell e executar o(s) comando(s) resultante(s)."
#~ msgid "Getopts is used by shell procedures to parse positional parameters."
#~ msgstr ""
@@ -7007,15 +6640,13 @@ msgstr ""
#~ msgstr "shell OPTIND. OPTIND é inicializado com 1 cada vez que o script"
#~ msgid "a shell script is invoked. When an option requires an argument,"
-#~ msgstr ""
-#~ "do shell é chamado. Quando uma opção requer um argumento, `getopts'"
+#~ msgstr "do shell é chamado. Quando uma opção requer um argumento, `getopts'"
#~ msgid "getopts places that argument into the shell variable OPTARG."
#~ msgstr "coloca este argumento dentro da variável do shell OPTARG."
#~ msgid "getopts reports errors in one of two ways. If the first character"
-#~ msgstr ""
-#~ "`getopts' informa os erros de duas maneiras. Se o primeiro caracter de"
+#~ msgstr "`getopts' informa os erros de duas maneiras. Se o primeiro caracter de"
#~ msgid "of OPTSTRING is a colon, getopts uses silent error reporting. In"
#~ msgstr "OPÇÕES for dois pontos, `getopts' usa o modo silencioso. Neste"
@@ -7027,24 +6658,19 @@ msgstr ""
#~ msgstr "encontrada, `getopts' coloca o caracter da opção em OPTARG. Se um"
#~ msgid "required argument is not found, getopts places a ':' into NAME and"
-#~ msgstr ""
-#~ "argumento requerido não for encontrado, `getopts' coloca ':' em NOME e"
+#~ msgstr "argumento requerido não for encontrado, `getopts' coloca ':' em NOME e"
#~ msgid "sets OPTARG to the option character found. If getopts is not in"
-#~ msgstr ""
-#~ "atribui a OPTARG o caracter de opção encontrado. Se `getopts' não está em"
+#~ msgstr "atribui a OPTARG o caracter de opção encontrado. Se `getopts' não está em"
#~ msgid "silent mode, and an illegal option is seen, getopts places '?' into"
-#~ msgstr ""
-#~ "modo silencioso, e uma opção ilegal é encontrada, `getopts' coloca '?' em"
+#~ msgstr "modo silencioso, e uma opção ilegal é encontrada, `getopts' coloca '?' em"
#~ msgid "NAME and unsets OPTARG. If a required option is not found, a '?'"
-#~ msgstr ""
-#~ "NOME e desativa OPTARG. Se uma opção requerida não é encontrada, uma '?'"
+#~ msgstr "NOME e desativa OPTARG. Se uma opção requerida não é encontrada, uma '?'"
#~ msgid "is placed in NAME, OPTARG is unset, and a diagnostic message is"
-#~ msgstr ""
-#~ "é colocada em NOME, OPTARG é desativado, e uma mensagem de diagnóstico é"
+#~ msgstr "é colocada em NOME, OPTARG é desativado, e uma mensagem de diagnóstico é"
#~ msgid "printed."
#~ msgstr "exibida."
@@ -7059,19 +6685,16 @@ msgstr ""
#~ msgstr "OPTSTRING não seja dois pontos. OPTERR tem o valor 1 por padrão."
#~ msgid "Getopts normally parses the positional parameters ($0 - $9), but if"
-#~ msgstr ""
-#~ "`getopts' normalmente faz a leitura dos parãmetros posicionais ($0 - $9),"
+#~ msgstr "`getopts' normalmente faz a leitura dos parãmetros posicionais ($0 - $9),"
#~ msgid "more arguments are given, they are parsed instead."
#~ msgstr "mas, se mais argumentos forem fornecidos, então estes são lidos."
#~ msgid "Exec FILE, replacing this shell with the specified program."
-#~ msgstr ""
-#~ "Executa ARQUIVO, substituindo esta shell pelo programa especificado."
+#~ msgstr "Executa ARQUIVO, substituindo esta shell pelo programa especificado."
#~ msgid "If FILE is not specified, the redirections take effect in this"
-#~ msgstr ""
-#~ "Se ARQUIVO não for especificado, os redirecionamentos são efetivados"
+#~ msgstr "Se ARQUIVO não for especificado, os redirecionamentos são efetivados"
#~ msgid "shell. If the first argument is `-l', then place a dash in the"
#~ msgstr "neste shell. Se o primeiro argumento for `-l', coloca um hífen no"
@@ -7089,8 +6712,7 @@ msgstr ""
#~ msgstr "Se o arquivo não puder ser executado e o shell não for interativa,"
#~ msgid "then the shell exits, unless the variable \"no_exit_on_failed_exec\""
-#~ msgstr ""
-#~ "então o shell termina, a menos que a variável \"no_exit_on_failed_exec\""
+#~ msgstr "então o shell termina, a menos que a variável \"no_exit_on_failed_exec\""
#~ msgid "is set."
#~ msgstr "esteja inicializada."
@@ -7098,8 +6720,7 @@ msgstr ""
#~ msgid "is that of the last command executed."
#~ msgstr "de saída é igual ao do último comando executado."
-#~ msgid ""
-#~ "FIRST and LAST can be numbers specifying the range, or FIRST can be a"
+#~ msgid "FIRST and LAST can be numbers specifying the range, or FIRST can be a"
#~ msgstr "PRIMEIRO e ÚLTIMO podem ser números especificando o intervalo, ou"
#~ msgid "string, which means the most recent command beginning with that"
@@ -7108,16 +6729,11 @@ msgstr ""
#~ msgid "string."
#~ msgstr "mais recente começado por estes caracteres."
-#~ msgid ""
-#~ " -e ENAME selects which editor to use. Default is FCEDIT, then EDITOR,"
-#~ msgstr ""
-#~ " -e EDITOR seleciona qual editor usar. O padrão é FCEDIT, depois "
-#~ "EDITOR,"
+#~ msgid " -e ENAME selects which editor to use. Default is FCEDIT, then EDITOR,"
+#~ msgstr " -e EDITOR seleciona qual editor usar. O padrão é FCEDIT, depois EDITOR,"
-#~ msgid ""
-#~ " then the editor which corresponds to the current readline editing"
-#~ msgstr ""
-#~ " depois o editor correspondente ao modo de edição atual da leitura"
+#~ msgid " then the editor which corresponds to the current readline editing"
+#~ msgstr " depois o editor correspondente ao modo de edição atual da leitura"
#~ msgid " mode, then vi."
#~ msgstr " de linha, e depois o vi."
@@ -7128,40 +6744,32 @@ msgstr ""
#~ msgid " -n means no line numbers listed."
#~ msgstr " -n indica para não listar os números das linhas."
-#~ msgid ""
-#~ " -r means reverse the order of the lines (making it newest listed "
-#~ "first)."
-#~ msgstr ""
-#~ " -r faz reverter a ordem das linhas (a última torna-se a primeira)."
+#~ msgid " -r means reverse the order of the lines (making it newest listed first)."
+#~ msgstr " -r faz reverter a ordem das linhas (a última torna-se a primeira)."
#~ msgid "With the `fc -s [pat=rep ...] [command]' format, the command is"
-#~ msgstr ""
-#~ "No formato `fc -s [ANTIGO=NOVO ...] [COMANDO]', o comando é executado"
+#~ msgstr "No formato `fc -s [ANTIGO=NOVO ...] [COMANDO]', o comando é executado"
#~ msgid "re-executed after the substitution OLD=NEW is performed."
#~ msgstr "novamente após a substituição de ANTIGO por NOVO ser realizada."
#~ msgid "A useful alias to use with this is r='fc -s', so that typing `r cc'"
-#~ msgstr ""
-#~ "Um alias útil a ser usado é r='fc -s' para que, ao se digitar `r cc',"
+#~ msgstr "Um alias útil a ser usado é r='fc -s' para que, ao se digitar `r cc',"
#~ msgid "runs the last command beginning with `cc' and typing `r' re-executes"
#~ msgstr "seja executado o último comando começado por `cc' e, ao se digitar"
#~ msgid "Place JOB_SPEC in the foreground, and make it the current job. If"
-#~ msgstr ""
-#~ "Colocar JOB-ESPECIFICADO no primeiro plano, e torná-lo o trabalho atual."
+#~ msgstr "Colocar JOB-ESPECIFICADO no primeiro plano, e torná-lo o trabalho atual."
#~ msgid "JOB_SPEC is not present, the shell's notion of the current job is"
-#~ msgstr ""
-#~ "Se JOB-ESPECIFICADO não estiver presente, a noção do shell do trabalho"
+#~ msgstr "Se JOB-ESPECIFICADO não estiver presente, a noção do shell do trabalho"
#~ msgid "used."
#~ msgstr "atual é utilizada."
#~ msgid "Place JOB_SPEC in the background, as if it had been started with"
-#~ msgstr ""
-#~ "Colocar JOB-ESPECIFICADO no segundo plano, como se tivesse sido ativado"
+#~ msgstr "Colocar JOB-ESPECIFICADO no segundo plano, como se tivesse sido ativado"
#~ msgid "`&'. If JOB_SPEC is not present, the shell's notion of the current"
#~ msgstr "com `&'. Se JOB-ESPECIFICADO não estiver presente, a noção do shell"
@@ -7170,22 +6778,18 @@ msgstr ""
#~ msgstr "do trabalho atual é utilizada."
#~ msgid "For each NAME, the full pathname of the command is determined and"
-#~ msgstr ""
-#~ "Para cada NOME, o caminho completo do comando é determinado e lembrado."
+#~ msgstr "Para cada NOME, o caminho completo do comando é determinado e lembrado."
#~ msgid "remembered. If the -p option is supplied, PATHNAME is used as the"
-#~ msgstr ""
-#~ "Se a opção -p for fornecida, CAMINHO é utilizado como o caminho completo"
+#~ msgstr "Se a opção -p for fornecida, CAMINHO é utilizado como o caminho completo"
#~ msgid "full pathname of NAME, and no path search is performed. The -r"
#~ msgstr "para NOME, e nenhuma procura de caminho é realizada. A opção -r"
#~ msgid "option causes the shell to forget all remembered locations. If no"
-#~ msgstr ""
-#~ "faz com que a shell esqueça todas as localizações lembradas. Sem nenhum"
+#~ msgstr "faz com que a shell esqueça todas as localizações lembradas. Sem nenhum"
-#~ msgid ""
-#~ "arguments are given, information about remembered commands is displayed."
+#~ msgid "arguments are given, information about remembered commands is displayed."
#~ msgstr "argumento, as informações sobre os comandos lembrados são exibidas."
#~ msgid "Display helpful information about builtin commands. If PATTERN is"
@@ -7195,12 +6799,10 @@ msgstr ""
#~ msgstr "especificado, fornece ajuda detalhada para todos os comandos que"
#~ msgid "otherwise a list of the builtins is printed."
-#~ msgstr ""
-#~ "correspondem ao PADRÃO, senão a lista dos comandos internos é exibida."
+#~ msgstr "correspondem ao PADRÃO, senão a lista dos comandos internos é exibida."
#~ msgid "Display the history list with line numbers. Lines listed with"
-#~ msgstr ""
-#~ "Exibe a lista histórica com os números das linhas. Linhas contendo um"
+#~ msgstr "Exibe a lista histórica com os números das linhas. Linhas contendo um"
#~ msgid "with a `*' have been modified. Argument of N says to list only"
#~ msgstr "`*' foram modificadas. O argumento N faz listar somente as últimas"
@@ -7208,19 +6810,14 @@ msgstr ""
#~ msgid "the last N lines. The -c option causes the history list to be"
#~ msgstr "N linhas. A opção -c faz com que a lista histórica seja apagada"
-#~ msgid ""
-#~ "cleared by deleting all of the entries. The `-w' option writes out the"
-#~ msgstr ""
-#~ "removendo todas as entradas. A opção `-w' escreve o histórico atual no"
+#~ msgid "cleared by deleting all of the entries. The `-w' option writes out the"
+#~ msgstr "removendo todas as entradas. A opção `-w' escreve o histórico atual no"
-#~ msgid ""
-#~ "current history to the history file; `-r' means to read the file and"
-#~ msgstr ""
-#~ "arquivo de histórico; A opção `-r' significa ler o arquivo e apensar seu"
+#~ msgid "current history to the history file; `-r' means to read the file and"
+#~ msgstr "arquivo de histórico; A opção `-r' significa ler o arquivo e apensar seu"
#~ msgid "append the contents to the history list instead. `-a' means"
-#~ msgstr ""
-#~ "conteúdo à lista histórica. A opção `-a' significa apensar as linhas de"
+#~ msgstr "conteúdo à lista histórica. A opção `-a' significa apensar as linhas de"
#~ msgid "to append history lines from this session to the history file."
#~ msgstr "histórico desta sessão ao arquivo de histórico."
@@ -7229,113 +6826,82 @@ msgstr ""
#~ msgstr "A opção `-n' faz ler todas as linhas de histórico ainda não lidas"
#~ msgid "from the history file and append them to the history list. If"
-#~ msgstr ""
-#~ "do arquivo histórico, e apensá-las à lista de histórico. Se ARQUIVO"
+#~ msgstr "do arquivo histórico, e apensá-las à lista de histórico. Se ARQUIVO"
#~ msgid "FILENAME is given, then that is used as the history file else"
#~ msgstr "for fornecido, então este é usado como arquivo de histórico, senão"
#~ msgid "if $HISTFILE has a value, that is used, else ~/.bash_history."
-#~ msgstr ""
-#~ "se $HISTFILE possui valor, este é usado, senão ~/.bash_history. Se a"
+#~ msgstr "se $HISTFILE possui valor, este é usado, senão ~/.bash_history. Se a"
#~ msgid "If the -s option is supplied, the non-option ARGs are appended to"
-#~ msgstr ""
-#~ "opção -s for fornecida, os ARGs, que não forem opções, são apensados à"
+#~ msgstr "opção -s for fornecida, os ARGs, que não forem opções, são apensados à"
#~ msgid "the history list as a single entry. The -p option means to perform"
-#~ msgstr ""
-#~ "lista histórica como uma única entrada. A opção -p significa realizar a"
+#~ msgstr "lista histórica como uma única entrada. A opção -p significa realizar a"
-#~ msgid ""
-#~ "history expansion on each ARG and display the result, without storing"
-#~ msgstr ""
-#~ "expansão da história em cada ARG e exibir o resultado, sem armazenar"
+#~ msgid "history expansion on each ARG and display the result, without storing"
+#~ msgstr "expansão da história em cada ARG e exibir o resultado, sem armazenar"
#~ msgid "anything in the history list."
#~ msgstr "nada na lista de histórico."
#~ msgid "Lists the active jobs. The -l option lists process id's in addition"
-#~ msgstr ""
-#~ "Lista os trabalhos ativos. A opção -l lista os ID's dos processos além"
+#~ msgstr "Lista os trabalhos ativos. A opção -l lista os ID's dos processos além"
#~ msgid "to the normal information; the -p option lists process id's only."
-#~ msgstr ""
-#~ "das informações usuais; a opção -p lista somente os ID's dos processos."
+#~ msgstr "das informações usuais; a opção -p lista somente os ID's dos processos."
-#~ msgid ""
-#~ "If -n is given, only processes that have changed status since the last"
-#~ msgstr ""
-#~ "Se -n for fornecido, somente os processos que mudaram de status desde a"
+#~ msgid "If -n is given, only processes that have changed status since the last"
+#~ msgstr "Se -n for fornecido, somente os processos que mudaram de status desde a"
-#~ msgid ""
-#~ "notification are printed. JOBSPEC restricts output to that job. The"
-#~ msgstr ""
-#~ "última notificação são exibidos. JOB-ESPECIFICADO restringe a saída a "
-#~ "este"
+#~ msgid "notification are printed. JOBSPEC restricts output to that job. The"
+#~ msgstr "última notificação são exibidos. JOB-ESPECIFICADO restringe a saída a este"
#~ msgid "-r and -s options restrict output to running and stopped jobs only,"
-#~ msgstr ""
-#~ "trabalho. As opções -r e -s restringem a saída apenas aos trabalhos"
+#~ msgstr "trabalho. As opções -r e -s restringem a saída apenas aos trabalhos"
#~ msgid "respectively. Without options, the status of all active jobs is"
-#~ msgstr ""
-#~ "executando e parados, respectivamente. Sem opções, o status de todos os"
+#~ msgstr "executando e parados, respectivamente. Sem opções, o status de todos os"
-#~ msgid ""
-#~ "printed. If -x is given, COMMAND is run after all job specifications"
-#~ msgstr ""
-#~ "trabalhos ativos são exibidos. Se -x for fornecido, COMANDO é executado"
+#~ msgid "printed. If -x is given, COMMAND is run after all job specifications"
+#~ msgstr "trabalhos ativos são exibidos. Se -x for fornecido, COMANDO é executado"
-#~ msgid ""
-#~ "that appear in ARGS have been replaced with the process ID of that job's"
-#~ msgstr ""
-#~ "após todas as especificações de trabalho que aparecem em ARGS terem sido"
+#~ msgid "that appear in ARGS have been replaced with the process ID of that job's"
+#~ msgstr "após todas as especificações de trabalho que aparecem em ARGS terem sido"
#~ msgid "process group leader."
#~ msgstr "substituídas pelo ID do processo líder deste grupo de processos."
#~ msgid "Removes each JOBSPEC argument from the table of active jobs."
-#~ msgstr ""
-#~ "Remove cada argumento JOB-ESPECIFICADO da tabela de trabalhos ativos."
+#~ msgstr "Remove cada argumento JOB-ESPECIFICADO da tabela de trabalhos ativos."
#~ msgid "Send the processes named by PID (or JOB) the signal SIGSPEC. If"
-#~ msgstr ""
-#~ "Envia ao processo identificado pelo PID (ou JOB) o sinal SIGSPEC. Se"
+#~ msgstr "Envia ao processo identificado pelo PID (ou JOB) o sinal SIGSPEC. Se"
-#~ msgid ""
-#~ "SIGSPEC is not present, then SIGTERM is assumed. An argument of `-l'"
-#~ msgstr ""
-#~ "SIGSPEC não estiver presente, então SIGTERM é assumido. A opção `-l'"
+#~ msgid "SIGSPEC is not present, then SIGTERM is assumed. An argument of `-l'"
+#~ msgstr "SIGSPEC não estiver presente, então SIGTERM é assumido. A opção `-l'"
#~ msgid "lists the signal names; if arguments follow `-l' they are assumed to"
-#~ msgstr ""
-#~ "lista os nomes dos sinais; havendo argumentos após `-l', são assumidos"
+#~ msgstr "lista os nomes dos sinais; havendo argumentos após `-l', são assumidos"
#~ msgid "be signal numbers for which names should be listed. Kill is a shell"
-#~ msgstr ""
-#~ "como sendo os números dos sinais cujos nomes devem ser exibidos. Kill"
+#~ msgstr "como sendo os números dos sinais cujos nomes devem ser exibidos. Kill"
#~ msgid "builtin for two reasons: it allows job IDs to be used instead of"
-#~ msgstr ""
-#~ "é um comando interno por duas razões: permite o uso do ID do trabalho em"
+#~ msgstr "é um comando interno por duas razões: permite o uso do ID do trabalho em"
#~ msgid "process IDs, and, if you have reached the limit on processes that"
-#~ msgstr ""
-#~ "vez do ID do processo e, caso tenha sido atingido o limite de processos "
-#~ "que"
+#~ msgstr "vez do ID do processo e, caso tenha sido atingido o limite de processos que"
-#~ msgid ""
-#~ "you can create, you don't have to start a process to kill another one."
-#~ msgstr ""
-#~ "podem ser criados, não é necessário um novo processo para remover outro."
+#~ msgid "you can create, you don't have to start a process to kill another one."
+#~ msgstr "podem ser criados, não é necessário um novo processo para remover outro."
#~ msgid "Each ARG is an arithmetic expression to be evaluated. Evaluation"
#~ msgstr "Cada ARG é uma expressão aritmética a ser avaliada. A avaliação é"
#~ msgid "is done in long integers with no check for overflow, though division"
-#~ msgstr ""
-#~ "feita usando inteiros longos sem verificar estouro, embora a divisão"
+#~ msgstr "feita usando inteiros longos sem verificar estouro, embora a divisão"
#~ msgid "by 0 is trapped and flagged as an error. The following list of"
#~ msgstr "por 0 seja capturada e indicada como erro. A lista abaixo está"
@@ -7407,8 +6973,7 @@ msgstr ""
#~ msgstr "ativo para ser usada em uma expressão."
#~ msgid "Operators are evaluated in order of precedence. Sub-expressions in"
-#~ msgstr ""
-#~ "Os operadores são avaliados em ordem de precedência. Sub-expressões"
+#~ msgstr "Os operadores são avaliados em ordem de precedência. Sub-expressões"
#~ msgid "parentheses are evaluated first and may override the precedence"
#~ msgstr "entre parênteses são avaliadas primeiro e podem prevalecer sobre as"
@@ -7425,76 +6990,53 @@ msgstr ""
#~ msgid "One line is read from the standard input, and the first word is"
#~ msgstr "Uma linha é lida a partir da entrada padrão, e a primeira palavra é"
-#~ msgid ""
-#~ "assigned to the first NAME, the second word to the second NAME, and so"
-#~ msgstr ""
-#~ "atribuída ao primeiro NOME, a segunda ao segundo NOME, e assim por diante,"
+#~ msgid "assigned to the first NAME, the second word to the second NAME, and so"
+#~ msgstr "atribuída ao primeiro NOME, a segunda ao segundo NOME, e assim por diante,"
-#~ msgid ""
-#~ "on, with leftover words assigned to the last NAME. Only the characters"
-#~ msgstr ""
-#~ "com as palavras restantes atribuídas ao último NOME. Somente os "
-#~ "caracteres"
+#~ msgid "on, with leftover words assigned to the last NAME. Only the characters"
+#~ msgstr "com as palavras restantes atribuídas ao último NOME. Somente os caracteres"
#~ msgid "found in $IFS are recognized as word delimiters. The return code is"
-#~ msgstr ""
-#~ "encontrados em $IFS são reconhecidos como delimitadores. O código de "
-#~ "retorno"
+#~ msgstr "encontrados em $IFS são reconhecidos como delimitadores. O código de retorno"
-#~ msgid ""
-#~ "zero, unless end-of-file is encountered. If no NAMEs are supplied, the"
-#~ msgstr ""
-#~ "é zero, a menos que EOF seja encontrado. Se nenhum NOME for fornecido,"
+#~ msgid "zero, unless end-of-file is encountered. If no NAMEs are supplied, the"
+#~ msgstr "é zero, a menos que EOF seja encontrado. Se nenhum NOME for fornecido,"
-#~ msgid ""
-#~ "line read is stored in the REPLY variable. If the -r option is given,"
-#~ msgstr ""
-#~ "a linha lida é armazenada na variável REPLY. Se a opção -r for fornecida,"
+#~ msgid "line read is stored in the REPLY variable. If the -r option is given,"
+#~ msgstr "a linha lida é armazenada na variável REPLY. Se a opção -r for fornecida,"
#~ msgid "this signifies `raw' input, and backslash escaping is disabled. If"
-#~ msgstr ""
-#~ "significa entrada `textual', desabilitando a interpretação da contrabarra."
+#~ msgstr "significa entrada `textual', desabilitando a interpretação da contrabarra."
#~ msgid "the `-p' option is supplied, the string supplied as an argument is"
-#~ msgstr ""
-#~ "Se a opção `-p' for fornecida a MENSAGEM fornecida como argumento é "
-#~ "exibida,"
+#~ msgstr "Se a opção `-p' for fornecida a MENSAGEM fornecida como argumento é exibida,"
-#~ msgid ""
-#~ "output without a trailing newline before attempting to read. If -a is"
-#~ msgstr ""
-#~ "sem o caracter de nova linha, antes de efetuar a leitura. Se a opção -a"
+#~ msgid "output without a trailing newline before attempting to read. If -a is"
+#~ msgstr "sem o caracter de nova linha, antes de efetuar a leitura. Se a opção -a"
-#~ msgid ""
-#~ "supplied, the words read are assigned to sequential indices of ARRAY,"
-#~ msgstr ""
-#~ "for fornecida, as palavras lidas são atribuídas aos índices seqüenciais"
+#~ msgid "supplied, the words read are assigned to sequential indices of ARRAY,"
+#~ msgstr "for fornecida, as palavras lidas são atribuídas aos índices sequenciais"
#~ msgid "starting at zero. If -e is supplied and the shell is interactive,"
-#~ msgstr ""
-#~ "do ARRAY, começando por zero. Se a opção -e for fornecida, e a shell for"
+#~ msgstr "do ARRAY, começando por zero. Se a opção -e for fornecida, e a shell for"
#~ msgid "readline is used to obtain the line."
#~ msgstr "interativa, `readline' é utilizado para ler a linha."
-#~ msgid ""
-#~ "Causes a function to exit with the return value specified by N. If N"
+#~ msgid "Causes a function to exit with the return value specified by N. If N"
#~ msgstr "Faz a função terminar com o valor de retorno especificado por N."
#~ msgid "is omitted, the return status is that of the last command."
#~ msgstr "Se N for omitido, retorna o status do último comando executado."
#~ msgid " -a Mark variables which are modified or created for export."
-#~ msgstr ""
-#~ " -a Marcar para exportação as variáveis que são criadas ou "
-#~ "modificadas."
+#~ msgstr " -a Marcar para exportação as variáveis que são criadas ou modificadas."
#~ msgid " -b Notify of job termination immediately."
#~ msgstr " -b Notificar imediatamente o término do trabalho."
#~ msgid " -e Exit immediately if a command exits with a non-zero status."
-#~ msgstr ""
-#~ " -e Terminar imediatamente se um comando terminar com status != 0."
+#~ msgstr " -e Terminar imediatamente se um comando terminar com status != 0."
#~ msgid " -f Disable file name generation (globbing)."
#~ msgstr " -f Desabilitar a geração de nome de arquivo (metacaracteres)."
@@ -7502,16 +7044,14 @@ msgstr ""
#~ msgid " -h Remember the location of commands as they are looked up."
#~ msgstr " -h Lembrar da localização dos comandos ao procurá-los."
-#~ msgid ""
-#~ " -i Force the shell to be an \"interactive\" one. Interactive shells"
+#~ msgid " -i Force the shell to be an \"interactive\" one. Interactive shells"
#~ msgstr " -i Forçar a shell ser do tipo \"interativa\". `Shells'"
#~ msgid " always read `~/.bashrc' on startup."
#~ msgstr " interativas sempre lêem `~/.bashrc' ao iniciar."
#~ msgid " -k All assignment arguments are placed in the environment for a"
-#~ msgstr ""
-#~ " -k Todos os argumentos de atribuição são colocados no ambiente,"
+#~ msgstr " -k Todos os argumentos de atribuição são colocados no ambiente,"
#~ msgid " command, not just those that precede the command name."
#~ msgstr " e não somente os que precedem o nome do comando."
@@ -7535,8 +7075,7 @@ msgstr ""
#~ msgstr " braceexpand o mesmo que -B"
#~ msgid " emacs use an emacs-style line editing interface"
-#~ msgstr ""
-#~ " emacs usar interface de edição de linha estilo emacs"
+#~ msgstr " emacs usar interface de edição de linha estilo emacs"
#~ msgid " errexit same as -e"
#~ msgstr " errexit o mesmo que -e"
@@ -7553,10 +7092,8 @@ msgstr ""
#~ msgid " interactive-comments"
#~ msgstr " interactive-comments"
-#~ msgid ""
-#~ " allow comments to appear in interactive commands"
-#~ msgstr ""
-#~ " permite comentários em comandos interativos"
+#~ msgid " allow comments to appear in interactive commands"
+#~ msgstr " permite comentários em comandos interativos"
#~ msgid " keyword same as -k"
#~ msgstr " keyword o mesmo que -k"
@@ -7585,15 +7122,11 @@ msgstr ""
#~ msgid " physical same as -P"
#~ msgstr " physical o mesmo que -P"
-#~ msgid ""
-#~ " posix change the behavior of bash where the default"
-#~ msgstr ""
-#~ " posix mudar o comportamento do `bash' onde o padrão"
+#~ msgid " posix change the behavior of bash where the default"
+#~ msgstr " posix mudar o comportamento do `bash' onde o padrão"
-#~ msgid ""
-#~ " operation differs from the 1003.2 standard to"
-#~ msgstr ""
-#~ " for diferente do padrão 1003.2, para tornar"
+#~ msgid " operation differs from the 1003.2 standard to"
+#~ msgstr " for diferente do padrão 1003.2, para tornar"
#~ msgid " match the standard"
#~ msgstr " igual ao padrão"
@@ -7605,26 +7138,19 @@ msgstr ""
#~ msgstr " verbose o mesmo que -v"
#~ msgid " vi use a vi-style line editing interface"
-#~ msgstr ""
-#~ " vi usar interface de edição de linha estilo vi"
+#~ msgstr " vi usar interface de edição de linha estilo vi"
#~ msgid " xtrace same as -x"
#~ msgstr " xtrace o mesmo que -x"
-#~ msgid ""
-#~ " -p Turned on whenever the real and effective user ids do not match."
-#~ msgstr ""
-#~ " -p Habilitado sempre que o usuário real e efetivo forem diferentes."
+#~ msgid " -p Turned on whenever the real and effective user ids do not match."
+#~ msgstr " -p Habilitado sempre que o usuário real e efetivo forem diferentes."
#~ msgid " Disables processing of the $ENV file and importing of shell"
-#~ msgstr ""
-#~ " Desabilita o processamento do arquivo $ENV e importação das "
-#~ "funções"
+#~ msgstr " Desabilita o processamento do arquivo $ENV e importação das funções"
-#~ msgid ""
-#~ " functions. Turning this option off causes the effective uid and"
-#~ msgstr ""
-#~ " da shell. Desabilitando esta opção faz com que o `uid' e `gid'"
+#~ msgid " functions. Turning this option off causes the effective uid and"
+#~ msgstr " da shell. Desabilitando esta opção faz com que o `uid' e `gid'"
#~ msgid " gid to be set to the real uid and gid."
#~ msgstr " efetivos sejam feitos o mesmo que o `uid' e `gid' reais."
@@ -7633,8 +7159,7 @@ msgstr ""
#~ msgstr " -t Sair após ler e executar um comando."
#~ msgid " -u Treat unset variables as an error when substituting."
-#~ msgstr ""
-#~ " -u Tratar como erro as variáveis não inicializadas na substituição."
+#~ msgstr " -u Tratar como erro as variáveis não inicializadas na substituição."
#~ msgid " -v Print shell input lines as they are read."
#~ msgstr " -v Exibir as linhas de entrada da shell ao lê-las."
@@ -7667,13 +7192,10 @@ msgstr ""
#~ msgstr "Usando + em vez de - faz com que as opções sejam desabilitadas. As"
#~ msgid "flags can also be used upon invocation of the shell. The current"
-#~ msgstr ""
-#~ "opções também podem ser usadas na chamada da shell. O conjunto atual"
+#~ msgstr "opções também podem ser usadas na chamada da shell. O conjunto atual"
-#~ msgid ""
-#~ "set of flags may be found in $-. The remaining n ARGs are positional"
-#~ msgstr ""
-#~ "de opções pode ser encontrado em $-. Os n ARGs restantes são parâmetros"
+#~ msgid "set of flags may be found in $-. The remaining n ARGs are positional"
+#~ msgstr "de opções pode ser encontrado em $-. Os n ARGs restantes são parâmetros"
#~ msgid "parameters and are assigned, in order, to $1, $2, .. $n. If no"
#~ msgstr "posicionais e são atribuídos, em ordem, a $1, $2, .. $n. Se nenhum"
@@ -7682,12 +7204,10 @@ msgstr ""
#~ msgstr "ARG for fornecido, todas as variáveis da shell são exibidas."
#~ msgid "For each NAME, remove the corresponding variable or function. Given"
-#~ msgstr ""
-#~ "Para cada NOME, remove a variável ou a função correspondente. Usando-se a"
+#~ msgstr "Para cada NOME, remove a variável ou a função correspondente. Usando-se a"
#~ msgid "the `-v', unset will only act on variables. Given the `-f' flag,"
-#~ msgstr ""
-#~ "opção `-v', `unset' atua somente nas variáveis. Usando-se a opção `-f'"
+#~ msgstr "opção `-v', `unset' atua somente nas variáveis. Usando-se a opção `-f'"
#~ msgid "unset will only act on functions. With neither flag, unset first"
#~ msgstr "`unset' atua somente nas funções. Sem nenhuma opção, inicialmente"
@@ -7695,73 +7215,56 @@ msgstr ""
#~ msgid "tries to unset a variable, and if that fails, then tries to unset a"
#~ msgstr "`unset' tenta remover uma variável e, se falhar, tenta remover uma"
-#~ msgid ""
-#~ "function. Some variables (such as PATH and IFS) cannot be unset; also"
-#~ msgstr ""
-#~ "função. Algumas variáveis (como PATH e IFS) não podem ser removidas."
+#~ msgid "function. Some variables (such as PATH and IFS) cannot be unset; also"
+#~ msgstr "função. Algumas variáveis (como PATH e IFS) não podem ser removidas."
#~ msgid "see readonly."
#~ msgstr "Veja também o comando `readonly'."
#~ msgid "NAMEs are marked for automatic export to the environment of"
-#~ msgstr ""
-#~ "NOMEs são marcados para serem automaticamente exportados para o ambiente"
+#~ msgstr "NOMEs são marcados para serem automaticamente exportados para o ambiente"
#~ msgid "subsequently executed commands. If the -f option is given,"
#~ msgstr "dos comando executados a seguir. Se a opção -f for fornecida,"
#~ msgid "the NAMEs refer to functions. If no NAMEs are given, or if `-p'"
-#~ msgstr ""
-#~ "os NOMEs se referem a funções. Se nenhum nome for fornecido, ou se `-p'"
+#~ msgstr "os NOMEs se referem a funções. Se nenhum nome for fornecido, ou se `-p'"
#~ msgid "is given, a list of all names that are exported in this shell is"
-#~ msgstr ""
-#~ "for usado, uma lista com todos os nomes que são exportados nesta shell é"
+#~ msgstr "for usado, uma lista com todos os nomes que são exportados nesta shell é"
#~ msgid "printed. An argument of `-n' says to remove the export property"
-#~ msgstr ""
-#~ "exibida. O argumento `-n' faz remover a propriedade de exportação dos"
+#~ msgstr "exibida. O argumento `-n' faz remover a propriedade de exportação dos"
#~ msgid "from subsequent NAMEs. An argument of `--' disables further option"
-#~ msgstr "NOMEs subseqüentes. O argumento `--' desabilita o processamento de"
+#~ msgstr "NOMEs subsequentes. O argumento `--' desabilita o processamento de"
#~ msgid "processing."
#~ msgstr "opções posteriores."
-#~ msgid ""
-#~ "The given NAMEs are marked readonly and the values of these NAMEs may"
-#~ msgstr ""
-#~ "Os NOMEs são marcados como somente para leitura, e os valores destes"
+#~ msgid "The given NAMEs are marked readonly and the values of these NAMEs may"
+#~ msgstr "Os NOMEs são marcados como somente para leitura, e os valores destes"
#~ msgid "not be changed by subsequent assignment. If the -f option is given,"
-#~ msgstr ""
-#~ "NOMEs não poderão ser alterados por novas atribuições. Se a opção -f for"
+#~ msgstr "NOMEs não poderão ser alterados por novas atribuições. Se a opção -f for"
#~ msgid "then functions corresponding to the NAMEs are so marked. If no"
-#~ msgstr ""
-#~ "fornecida, as funções correspondentes a NOMEs também são marcadas. Sem"
+#~ msgstr "fornecida, as funções correspondentes a NOMEs também são marcadas. Sem"
-#~ msgid ""
-#~ "arguments are given, or if `-p' is given, a list of all readonly names"
-#~ msgstr ""
-#~ "nenhum argumento, ou se `-p' for usado, uma lista com todos os nomes"
+#~ msgid "arguments are given, or if `-p' is given, a list of all readonly names"
+#~ msgstr "nenhum argumento, ou se `-p' for usado, uma lista com todos os nomes"
-#~ msgid ""
-#~ "is printed. An argument of `-n' says to remove the readonly property"
-#~ msgstr ""
-#~ "somente para leitura é exibida. O argumento `-n' remove a propriedade"
+#~ msgid "is printed. An argument of `-n' says to remove the readonly property"
+#~ msgstr "somente para leitura é exibida. O argumento `-n' remove a propriedade"
#~ msgid "from subsequent NAMEs. The `-a' option means to treat each NAME as"
#~ msgstr "somente para leitura. A opção `-a' faz tratar cada NOME como uma"
#~ msgid "an array variable. An argument of `--' disables further option"
-#~ msgstr ""
-#~ "variável tipo array. Um argumento `--' desabilita o processamento de"
+#~ msgstr "variável tipo array. Um argumento `--' desabilita o processamento de"
-#~ msgid ""
-#~ "The positional parameters from $N+1 ... are renamed to $1 ... If N is"
-#~ msgstr ""
-#~ "Os parâmetros posicionais a partir de $N+1 ... são deslocados para $1 ..."
+#~ msgid "The positional parameters from $N+1 ... are renamed to $1 ... If N is"
+#~ msgstr "Os parâmetros posicionais a partir de $N+1 ... são deslocados para $1 ..."
#~ msgid "not given, it is assumed to be 1."
#~ msgstr "Se N não for especificado, o valor 1 é assumido ($2 vira $1 ...)."
@@ -7773,31 +7276,25 @@ msgstr ""
#~ msgstr "$PATH são usados para encontrar o diretório contendo o ARQUIVO."
#~ msgid "Suspend the execution of this shell until it receives a SIGCONT"
-#~ msgstr ""
-#~ "Suspender a execução desta shell até que o sinal SIGCONT seja recebido."
+#~ msgstr "Suspender a execução desta shell até que o sinal SIGCONT seja recebido."
#~ msgid "signal. The `-f' if specified says not to complain about this"
#~ msgstr "Se a opção `-f' for especificada indica para não reclamar sobre ser"
#~ msgid "being a login shell if it is; just suspend anyway."
-#~ msgstr ""
-#~ "uma `shell de login', caso seja; simplesmente suspender de qualquer forma."
+#~ msgstr "uma `shell de login', caso seja; simplesmente suspender de qualquer forma."
#~ msgid "Exits with a status of 0 (trueness) or 1 (falseness) depending on"
-#~ msgstr ""
-#~ "Termina com status 0 (verdadeiro) ou 1 (falso) conforme EXPR for avaliada."
+#~ msgstr "Termina com status 0 (verdadeiro) ou 1 (falso) conforme EXPR for avaliada."
#~ msgid "the evaluation of EXPR. Expressions may be unary or binary. Unary"
-#~ msgstr ""
-#~ "As expressões podem ser unárias ou binárias. As expressões unárias são"
+#~ msgstr "As expressões podem ser unárias ou binárias. As expressões unárias são"
#~ msgid "expressions are often used to examine the status of a file. There"
-#~ msgstr ""
-#~ "muito usadas para examinar o status de um arquivo. Existem, também,"
+#~ msgstr "muito usadas para examinar o status de um arquivo. Existem, também,"
#~ msgid "are string operators as well, and numeric comparison operators."
-#~ msgstr ""
-#~ "operadores para cadeias de caracteres (strings) e comparações numéricas."
+#~ msgstr "operadores para cadeias de caracteres (strings) e comparações numéricas."
#~ msgid "File operators:"
#~ msgstr "Operadores para arquivos:"
@@ -7806,8 +7303,7 @@ msgstr ""
#~ msgstr " -b ARQUIVO Verdade se o arquivo for do tipo especial de bloco."
#~ msgid " -c FILE True if file is character special."
-#~ msgstr ""
-#~ " -c ARQUIVO Verdade se o arquivo for do tipo especial de caracter."
+#~ msgstr " -c ARQUIVO Verdade se o arquivo for do tipo especial de caracter."
#~ msgid " -d FILE True if file is a directory."
#~ msgstr " -d ARQUIVO Verdade se o arquivo for um diretório."
@@ -7819,12 +7315,10 @@ msgstr ""
#~ msgstr " -f ARQUIVO Verdade se o arquivo existir e for do tipo regular."
#~ msgid " -g FILE True if file is set-group-id."
-#~ msgstr ""
-#~ " -g ARQUIVO Verdade se o arquivo tiver o bit \"set-group-id\" ativo."
+#~ msgstr " -g ARQUIVO Verdade se o arquivo tiver o bit \"set-group-id\" ativo."
#~ msgid " -h FILE True if file is a symbolic link. Use \"-L\"."
-#~ msgstr ""
-#~ " -h ARQUIVO Verdade se arquivo for um vínculo simbólico. Usar \"-L\"."
+#~ msgstr " -h ARQUIVO Verdade se arquivo for um vínculo simbólico. Usar \"-L\"."
#~ msgid " -L FILE True if file is a symbolic link."
#~ msgstr " -L ARQUIVO Verdade se o arquivo for um vínculo simbólico."
@@ -7836,8 +7330,7 @@ msgstr ""
#~ msgstr " -p ARQUIVO Verdade se o arquivo for um `named pipe'."
#~ msgid " -r FILE True if file is readable by you."
-#~ msgstr ""
-#~ " -r ARQUIVO Verdade se você tiver autorização para ler o arquivo."
+#~ msgstr " -r ARQUIVO Verdade se você tiver autorização para ler o arquivo."
#~ msgid " -s FILE True if file exists and is not empty."
#~ msgstr " -s ARQUIVO Verdade se o arquivo existir e não estiver vazio."
@@ -7851,26 +7344,19 @@ msgstr ""
#~ " em um terminal."
#~ msgid " -u FILE True if the file is set-user-id."
-#~ msgstr ""
-#~ " -u ARQUIVO Verdade se o arquivo tiver o bit \"set-user-id\" ativo."
+#~ msgstr " -u ARQUIVO Verdade se o arquivo tiver o bit \"set-user-id\" ativo."
#~ msgid " -w FILE True if the file is writable by you."
-#~ msgstr ""
-#~ " -w ARQUIVO Verdade se você tiver autorização para escrever no "
-#~ "arquivo."
+#~ msgstr " -w ARQUIVO Verdade se você tiver autorização para escrever no arquivo."
#~ msgid " -x FILE True if the file is executable by you."
-#~ msgstr ""
-#~ " -x ARQUIVO Verdade se você tiver autorização para executar o arquivo."
+#~ msgstr " -x ARQUIVO Verdade se você tiver autorização para executar o arquivo."
#~ msgid " -O FILE True if the file is effectively owned by you."
-#~ msgstr ""
-#~ " -O ARQUIVO Verdade se o arquivo pertencer ao seu usuário efetivo."
+#~ msgstr " -O ARQUIVO Verdade se o arquivo pertencer ao seu usuário efetivo."
-#~ msgid ""
-#~ " -G FILE True if the file is effectively owned by your group."
-#~ msgstr ""
-#~ " -G ARQUIVO Verdade se o arquivo pertencer ao seu grupo efetivo."
+#~ msgid " -G FILE True if the file is effectively owned by your group."
+#~ msgstr " -G ARQUIVO Verdade se o arquivo pertencer ao seu grupo efetivo."
#~ msgid " FILE1 -nt FILE2 True if file1 is newer than (according to"
#~ msgstr " ARQ1 -nt ARQ2 Verdade se ARQ1 for mais novo (conforme a data"
@@ -7913,18 +7399,14 @@ msgstr ""
#~ msgid " STRING1 < STRING2"
#~ msgstr " STRING1 < STRING2"
-#~ msgid ""
-#~ " True if STRING1 sorts before STRING2 lexicographically"
-#~ msgstr ""
-#~ " Verdade se STRING1 tiver ordenação anterior à STRING2."
+#~ msgid " True if STRING1 sorts before STRING2 lexicographically"
+#~ msgstr " Verdade se STRING1 tiver ordenação anterior à STRING2."
#~ msgid " STRING1 > STRING2"
#~ msgstr " STRING1 > STRING2"
-#~ msgid ""
-#~ " True if STRING1 sorts after STRING2 lexicographically"
-#~ msgstr ""
-#~ " Verdade se STRING1 tiver ordenação posterior à STRING2."
+#~ msgid " True if STRING1 sorts after STRING2 lexicographically"
+#~ msgstr " Verdade se STRING1 tiver ordenação posterior à STRING2."
#~ msgid "Other operators:"
#~ msgstr "Outros operadores:"
@@ -7945,11 +7427,9 @@ msgstr ""
#~ msgstr " -lt, -le, -gt, ou -ge."
#~ msgid "Arithmetic binary operators return true if ARG1 is equal, not-equal,"
-#~ msgstr ""
-#~ "Operadores aritméticos binários retornam verdadeiro se ARG1 for igual,"
+#~ msgstr "Operadores aritméticos binários retornam verdadeiro se ARG1 for igual,"
-#~ msgid ""
-#~ "less-than, less-than-or-equal, greater-than, or greater-than-or-equal"
+#~ msgid "less-than, less-than-or-equal, greater-than, or greater-than-or-equal"
#~ msgstr "diferente, menor, menor ou igual, maior, ou maior ou igual do que"
#~ msgid "than ARG2."
@@ -7962,60 +7442,46 @@ msgstr ""
#~ msgstr "argumento deve ser o literal `]', para fechar o `[' de abertura."
#~ msgid "Print the accumulated user and system times for processes run from"
-#~ msgstr ""
-#~ "Exibe os tempos acumulados do usuário e do sistema para os processos"
+#~ msgstr "Exibe os tempos acumulados do usuário e do sistema para os processos"
#~ msgid "the shell."
#~ msgstr "executados por esta shell."
#~ msgid "The command ARG is to be read and executed when the shell receives"
-#~ msgstr ""
-#~ "O comando em ARG é para ser lido e executado quando a shell receber o(s)"
+#~ msgstr "O comando em ARG é para ser lido e executado quando a shell receber o(s)"
#~ msgid "signal(s) SIGNAL_SPEC. If ARG is absent all specified signals are"
-#~ msgstr ""
-#~ "sinal(is) SINAL-ESPEC. Se ARG for omitido, todos os sinais especificados"
+#~ msgstr "sinal(is) SINAL-ESPEC. Se ARG for omitido, todos os sinais especificados"
#~ msgid "reset to their original values. If ARG is the null string each"
-#~ msgstr ""
-#~ "retornam aos seus valores originais. Se ARG for uma string nula, cada"
+#~ msgstr "retornam aos seus valores originais. Se ARG for uma string nula, cada"
#~ msgid "SIGNAL_SPEC is ignored by the shell and by the commands it invokes."
-#~ msgstr ""
-#~ "SINAL-ESPEC é ignorado pela shell e pelos comandos chamados por ela."
+#~ msgstr "SINAL-ESPEC é ignorado pela shell e pelos comandos chamados por ela."
#~ msgid "If SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from"
-#~ msgstr ""
-#~ "Se SINAL-ESPEC for EXIT (0) o comando em ARG é executado na saída da"
+#~ msgstr "Se SINAL-ESPEC for EXIT (0) o comando em ARG é executado na saída da"
#~ msgid "the shell. If SIGNAL_SPEC is DEBUG, ARG is executed after every"
-#~ msgstr ""
-#~ "shell. Se SINAL-ESPEC for DEBUG, o comando em ARG é executado após cada"
+#~ msgstr "shell. Se SINAL-ESPEC for DEBUG, o comando em ARG é executado após cada"
#~ msgid "command. If ARG is `-p' then the trap commands associated with"
-#~ msgstr ""
-#~ "comando. Se ARG for `-p' então os comandos de captura associados com cada"
+#~ msgstr "comando. Se ARG for `-p' então os comandos de captura associados com cada"
#~ msgid "each SIGNAL_SPEC are displayed. If no arguments are supplied or if"
#~ msgstr "SINAL-ESPEC são exibidos. Se nenhum argumento for fornecido, ou se"
#~ msgid "only `-p' is given, trap prints the list of commands associated with"
-#~ msgstr ""
-#~ "somente `-p' for fornecido, é exibida a lista dos comandos associados"
+#~ msgstr "somente `-p' for fornecido, é exibida a lista dos comandos associados"
-#~ msgid ""
-#~ "each signal number. SIGNAL_SPEC is either a signal name in "
-#~ msgstr ""
-#~ "com cada número de sinal. SINAL-ESPEC é um nome de sinal em ou"
+#~ msgid "each signal number. SIGNAL_SPEC is either a signal name in "
+#~ msgstr "com cada número de sinal. SINAL-ESPEC é um nome de sinal em ou"
-#~ msgid ""
-#~ "or a signal number. `trap -l' prints a list of signal names and their"
-#~ msgstr ""
-#~ "um número de sinal. `trap -l' exibe a lista de nomes de sinais com seus"
+#~ msgid "or a signal number. `trap -l' prints a list of signal names and their"
+#~ msgstr "um número de sinal. `trap -l' exibe a lista de nomes de sinais com seus"
#~ msgid "corresponding numbers. Note that a signal can be sent to the shell"
-#~ msgstr ""
-#~ "números correspondentes. Note que o sinal pode ser enviado para a shell"
+#~ msgstr "números correspondentes. Note que o sinal pode ser enviado para a shell"
#~ msgid "with \"kill -signal $$\"."
#~ msgstr "através do comando \"kill -SINAL $$\"."
@@ -8024,19 +7490,13 @@ msgstr ""
#~ msgstr "Para cada NOME, indica como este deve ser interpretado caso seja"
#~ msgid "If the -t option is used, returns a single word which is one of"
-#~ msgstr ""
-#~ "Se a opção -t for fornecida, `type' retorna uma única palavra dentre"
+#~ msgstr "Se a opção -t for fornecida, `type' retorna uma única palavra dentre"
-#~ msgid ""
-#~ "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an"
-#~ msgstr ""
-#~ "`alias', `keyword', `function', `builtin', `file' ou `', se NOME for um"
+#~ msgid "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an"
+#~ msgstr "`alias', `keyword', `function', `builtin', `file' ou `', se NOME for um"
-#~ msgid ""
-#~ "alias, shell reserved word, shell function, shell builtin, disk file,"
-#~ msgstr ""
-#~ "alias, uma palavra reservada, função ou comando interno da shell, um "
-#~ "arquivo"
+#~ msgid "alias, shell reserved word, shell function, shell builtin, disk file,"
+#~ msgstr "alias, uma palavra reservada, função ou comando interno da shell, um arquivo"
#~ msgid "or unfound, respectively."
#~ msgstr "em disco, ou não for encontrado, respectivamente."
@@ -8050,10 +7510,8 @@ msgstr ""
#~ msgid "If the -a flag is used, displays all of the places that contain an"
#~ msgstr "Se a opção -a for fornecida, exibe todos os locais que contém um"
-#~ msgid ""
-#~ "executable named `file'. This includes aliases and functions, if and"
-#~ msgstr ""
-#~ "arquivo executável chamado `ARQUIVO', incluindo os aliases e funções,"
+#~ msgid "executable named `file'. This includes aliases and functions, if and"
+#~ msgstr "arquivo executável chamado `ARQUIVO', incluindo os aliases e funções,"
#~ msgid "only if the -p flag is not also used."
#~ msgstr "mas somente se a opção -p não for fornecida conjuntamente."
@@ -8065,12 +7523,10 @@ msgstr ""
#~ msgstr "-a, -p, and -t, respectivamente."
#~ msgid "Ulimit provides control over the resources available to processes"
-#~ msgstr ""
-#~ "Ulimit estabelece controle sobre os recursos disponíveis para os processos"
+#~ msgstr "Ulimit estabelece controle sobre os recursos disponíveis para os processos"
#~ msgid "started by the shell, on systems that allow such control. If an"
-#~ msgstr ""
-#~ "iniciados por esta shell, em sistemas que permitem estes controles. Se uma"
+#~ msgstr "iniciados por esta shell, em sistemas que permitem estes controles. Se uma"
#~ msgid "option is given, it is interpreted as follows:"
#~ msgstr "opção for fornecida, é interpretada como mostrado a seguir:"
@@ -8085,15 +7541,13 @@ msgstr ""
#~ msgstr " -a\ttodos os limites correntes são informados"
#~ msgid " -c\tthe maximum size of core files created"
-#~ msgstr ""
-#~ " -c\to tamanho máximo para os arquivos de imagem do núcleo criados"
+#~ msgstr " -c\to tamanho máximo para os arquivos de imagem do núcleo criados"
#~ msgid " -d\tthe maximum size of a process's data segment"
#~ msgstr " -d\to tamanho máximo do segmento de dados de um processo"
#~ msgid " -m\tthe maximum resident set size"
-#~ msgstr ""
-#~ " -m\to tamanho máximo do conjunto de processos residentes em memória"
+#~ msgstr " -m\to tamanho máximo do conjunto de processos residentes em memória"
#~ msgid " -s\tthe maximum stack size"
#~ msgstr " -s\to tamanho máximo da pilha"
@@ -8117,15 +7571,13 @@ msgstr ""
#~ msgstr " -v\to tamanho da memória virtual"
#~ msgid "If LIMIT is given, it is the new value of the specified resource."
-#~ msgstr ""
-#~ "Se LIMITE for fornecido, torna-se o novo valor do recurso especificado."
+#~ msgstr "Se LIMITE for fornecido, torna-se o novo valor do recurso especificado."
#~ msgid "Otherwise, the current value of the specified resource is printed."
#~ msgstr "Senão, o valor atual do recurso especificado é exibido."
#~ msgid "If no option is given, then -f is assumed. Values are in 1k"
-#~ msgstr ""
-#~ "Se nenhuma opção for fornecida, então -f é assumido. Os valores são em"
+#~ msgstr "Se nenhuma opção for fornecida, então -f é assumido. Os valores são em"
#~ msgid "increments, except for -t, which is in seconds, -p, which is in"
#~ msgstr "incrementos de 1k, exceto para -t, que é em segundos, -p, que é em"
@@ -8136,101 +7588,77 @@ msgstr ""
#~ msgid "processes."
#~ msgstr "processos."
-#~ msgid ""
-#~ "The user file-creation mask is set to MODE. If MODE is omitted, or if"
-#~ msgstr ""
-#~ "MODO é atribuído à máscara de criação de arquivos do usuário. Se omitido,"
+#~ msgid "The user file-creation mask is set to MODE. If MODE is omitted, or if"
+#~ msgstr "MODO é atribuído à máscara de criação de arquivos do usuário. Se omitido,"
-#~ msgid ""
-#~ "`-S' is supplied, the current value of the mask is printed. The `-S'"
-#~ msgstr ""
-#~ "ou se `-S' for especificado, a máscara em uso é exibida. A opção `-S'"
+#~ msgid "`-S' is supplied, the current value of the mask is printed. The `-S'"
+#~ msgstr "ou se `-S' for especificado, a máscara em uso é exibida. A opção `-S'"
-#~ msgid ""
-#~ "option makes the output symbolic; otherwise an octal number is output."
+#~ msgid "option makes the output symbolic; otherwise an octal number is output."
#~ msgstr "exibe símbolos na saída; sem esta opção um número octal é exibido."
#~ msgid "If MODE begins with a digit, it is interpreted as an octal number,"
-#~ msgstr ""
-#~ "Se MODO começar por um dígito, é interpretado como sendo um número octal,"
+#~ msgstr "Se MODO começar por um dígito, é interpretado como sendo um número octal,"
-#~ msgid ""
-#~ "otherwise it is a symbolic mode string like that accepted by chmod(1)."
-#~ msgstr ""
-#~ "senão devem ser caracteres simbólicos, como os aceitos por chmod(1)."
+#~ msgid "otherwise it is a symbolic mode string like that accepted by chmod(1)."
+#~ msgstr "senão devem ser caracteres simbólicos, como os aceitos por chmod(1)."
-#~ msgid ""
-#~ "Wait for the specified process and report its termination status. If"
-#~ msgstr ""
-#~ "Aguardar pelo processo especificado e informar seu status de término. Se N"
+#~ msgid "Wait for the specified process and report its termination status. If"
+#~ msgstr "Aguardar pelo processo especificado e informar seu status de término. Se N"
#~ msgid "N is not given, all currently active child processes are waited for,"
-#~ msgstr ""
-#~ "não for especificado, todos os processos filhos ativos são aguardados,"
+#~ msgstr "não for especificado, todos os processos filhos ativos são aguardados,"
#~ msgid "and the return code is zero. N may be a process ID or a job"
#~ msgstr "e o código de retorno é zero. N pode ser o ID de um processo ou a"
#~ msgid "specification; if a job spec is given, all processes in the job's"
-#~ msgstr ""
-#~ "especificação de um trabalho; Se for a especificação de um trabalho, todos"
+#~ msgstr "especificação de um trabalho; Se for a especificação de um trabalho, todos"
#~ msgid "pipeline are waited for."
#~ msgstr "os processos presentes no `pipeline' do trabalho são aguardados."
#~ msgid "and the return code is zero. N is a process ID; if it is not given,"
-#~ msgstr ""
-#~ "e o código de retorno é zero. N é o ID de um processo; se N não for"
+#~ msgstr "e o código de retorno é zero. N é o ID de um processo; se N não for"
#~ msgid "all child processes of the shell are waited for."
#~ msgstr "especificado, todos os processos filhos da shell são aguardados."
#~ msgid "The `for' loop executes a sequence of commands for each member in a"
-#~ msgstr ""
-#~ "O laço `for' executa a seqüência de comandos para cada membro na lista de"
+#~ msgstr "O laço `for' executa a sequência de comandos para cada membro na lista de"
-#~ msgid ""
-#~ "list of items. If `in WORDS ...;' is not present, then `in \"$@\"' is"
-#~ msgstr ""
-#~ "items. Se `in PALAVRAS ...;' não estiver presente, então `in \"$@\"'"
+#~ msgid "list of items. If `in WORDS ...;' is not present, then `in \"$@\"' is"
+#~ msgstr "items. Se `in PALAVRAS ...;' não estiver presente, então `in \"$@\"'"
-#~ msgid ""
-#~ "assumed. For each element in WORDS, NAME is set to that element, and"
-#~ msgstr ""
-#~ "(parâmetros posicionais) é assumido. Para cada elemento em PALAVRAS, NOME"
+#~ msgid "assumed. For each element in WORDS, NAME is set to that element, and"
+#~ msgstr "(parâmetros posicionais) é assumido. Para cada elemento em PALAVRAS, NOME"
#~ msgid "the COMMANDS are executed."
#~ msgstr "assume seu valor, e os COMANDOS são executados."
#~ msgid "The WORDS are expanded, generating a list of words. The"
-#~ msgstr ""
-#~ "As palavras são expandidas, gerando uma lista de palavras. O conjunto"
+#~ msgstr "As palavras são expandidas, gerando uma lista de palavras. O conjunto"
#~ msgid "set of expanded words is printed on the standard error, each"
-#~ msgstr ""
-#~ "de palavras expandidas é enviado para a saída de erro padrão, cada uma"
+#~ msgstr "de palavras expandidas é enviado para a saída de erro padrão, cada uma"
#~ msgid "preceded by a number. If `in WORDS' is not present, `in \"$@\"'"
-#~ msgstr ""
-#~ "precedida por um número. Se `in PALAVRAS' for omitido, `in \"$@\"' é"
+#~ msgstr "precedida por um número. Se `in PALAVRAS' for omitido, `in \"$@\"' é"
#~ msgid "is assumed. The PS3 prompt is then displayed and a line read"
#~ msgstr "assumido. Em seguida o prompt PS3 é exibido, e uma linha é lida da"
#~ msgid "from the standard input. If the line consists of the number"
-#~ msgstr ""
-#~ "entrada padrão. Se a linha consistir do número correspondente ao número"
+#~ msgstr "entrada padrão. Se a linha consistir do número correspondente ao número"
#~ msgid "corresponding to one of the displayed words, then NAME is set"
#~ msgstr "de uma das palavras exibidas, então NOME é atribuído para esta"
#~ msgid "to that word. If the line is empty, WORDS and the prompt are"
-#~ msgstr ""
-#~ "PALAVRA. Se a linha estiver vazia, PALAVRAS e o prompt são exibidos"
+#~ msgstr "PALAVRA. Se a linha estiver vazia, PALAVRAS e o prompt são exibidos"
#~ msgid "redisplayed. If EOF is read, the command completes. Any other"
-#~ msgstr ""
-#~ "novamente. Se EOF for lido, o comando termina. Qualquer outro valor"
+#~ msgstr "novamente. Se EOF for lido, o comando termina. Qualquer outro valor"
#~ msgid "value read causes NAME to be set to null. The line read is saved"
#~ msgstr "lido faz com que NOME seja tornado nulo. A linha lida é salva"
@@ -8242,42 +7670,28 @@ msgstr ""
#~ msgstr "até que o comando `break' ou `return' seja executado."
#~ msgid "Selectively execute COMMANDS based upon WORD matching PATTERN. The"
-#~ msgstr ""
-#~ "Executar seletivamente COMANDOS tomando por base a correspondência entre"
+#~ msgstr "Executar seletivamente COMANDOS tomando por base a correspondência entre"
#~ msgid "`|' is used to separate multiple patterns."
-#~ msgstr ""
-#~ "PALAVRA e PADRÃO. O caracter `|' é usado para separar múltiplos padrões."
+#~ msgstr "PALAVRA e PADRÃO. O caracter `|' é usado para separar múltiplos padrões."
-#~ msgid ""
-#~ "The if COMMANDS are executed. If the exit status is zero, then the then"
-#~ msgstr ""
-#~ "Os COMANDOS `if' são executados. Se os status de saída for zero, então os"
+#~ msgid "The if COMMANDS are executed. If the exit status is zero, then the then"
+#~ msgstr "Os COMANDOS `if' são executados. Se os status de saída for zero, então os"
-#~ msgid ""
-#~ "COMMANDS are executed. Otherwise, each of the elif COMMANDS are executed"
-#~ msgstr ""
-#~ "COMANDOS `then' são executados, senão, os COMANDOS `elif' são executados "
-#~ "em"
+#~ msgid "COMMANDS are executed. Otherwise, each of the elif COMMANDS are executed"
+#~ msgstr "COMANDOS `then' são executados, senão, os COMANDOS `elif' são executados em"
-#~ msgid ""
-#~ "in turn, and if the exit status is zero, the corresponding then COMMANDS"
-#~ msgstr ""
-#~ "seqüência e, se o status de saída for zero, os COMANDOS `then' associados"
+#~ msgid "in turn, and if the exit status is zero, the corresponding then COMMANDS"
+#~ msgstr "sequência e, se o status de saída for zero, os COMANDOS `then' associados"
-#~ msgid ""
-#~ "are executed and the if command completes. Otherwise, the else COMMANDS"
-#~ msgstr ""
-#~ "são executados e o `if' termina. Senão, os COMANDOS da cláusula `else'"
+#~ msgid "are executed and the if command completes. Otherwise, the else COMMANDS"
+#~ msgstr "são executados e o `if' termina. Senão, os COMANDOS da cláusula `else'"
-#~ msgid ""
-#~ "are executed, if present. The exit status is the exit status of the last"
-#~ msgstr ""
-#~ "são executados, se houver. O status de saída é o status de saída do"
+#~ msgid "are executed, if present. The exit status is the exit status of the last"
+#~ msgstr "são executados, se houver. O status de saída é o status de saída do"
#~ msgid "command executed, or zero if no condition tested true."
-#~ msgstr ""
-#~ "último comando executado, ou zero, se nenhuma condição for verdadeira."
+#~ msgstr "último comando executado, ou zero, se nenhuma condição for verdadeira."
#~ msgid "Expand and execute COMMANDS as long as the final command in the"
#~ msgstr "Expande e executa COMANDOS enquanto o comando final nos"
@@ -8304,22 +7718,16 @@ msgstr ""
#~ msgstr "redirecionar todo um conjunto de comandos."
#~ msgid "This is similar to the `fg' command. Resume a stopped or background"
-#~ msgstr ""
-#~ "Semelhante ao comando `fg'. Prossegue a execução de um trabalho parado ou"
+#~ msgstr "Semelhante ao comando `fg'. Prossegue a execução de um trabalho parado ou"
#~ msgid "job. If you specifiy DIGITS, then that job is used. If you specify"
-#~ msgstr ""
-#~ "em segundo plano. Se DÍGITOS for especificado, então este trabalho é "
-#~ "usado."
+#~ msgstr "em segundo plano. Se DÍGITOS for especificado, então este trabalho é usado."
-#~ msgid ""
-#~ "WORD, then the job whose name begins with WORD is used. Following the"
-#~ msgstr ""
-#~ "Se for especificado PALAVRA, o trabalho começado por PALAVRA é usado."
+#~ msgid "WORD, then the job whose name begins with WORD is used. Following the"
+#~ msgstr "Se for especificado PALAVRA, o trabalho começado por PALAVRA é usado."
#~ msgid "job specification with a `&' places the job in the background."
-#~ msgstr ""
-#~ "Seguindo-se a especificação por um `&' põe o trabalho em segundo plano."
+#~ msgstr "Seguindo-se a especificação por um `&' põe o trabalho em segundo plano."
#~ msgid "BASH_VERSION The version numbers of this Bash."
#~ msgstr "BASH_VERSION Os números da versão desta `bash'."
@@ -8333,15 +7741,11 @@ msgstr ""
#~ msgid "\t\tdirectory."
#~ msgstr "\t\tencontrado no diretório atual."
-#~ msgid ""
-#~ "HISTFILE The name of the file where your command history is stored."
-#~ msgstr ""
-#~ "HISTFILE O nome do arquivo onde o histórico de comandos é "
-#~ "armazenado."
+#~ msgid "HISTFILE The name of the file where your command history is stored."
+#~ msgstr "HISTFILE O nome do arquivo onde o histórico de comandos é armazenado."
#~ msgid "HISTFILESIZE The maximum number of lines this file can contain."
-#~ msgstr ""
-#~ "HISTFILESIZE O número máximo de linhas que este arquivo pode conter."
+#~ msgstr "HISTFILESIZE O número máximo de linhas que este arquivo pode conter."
#~ msgid "HISTSIZE The maximum number of history lines that a running"
#~ msgstr "HISTSIZE O número máximo de linhas do histórico que uma"
@@ -8350,16 +7754,12 @@ msgstr ""
#~ msgstr "\t\tshell em execução pode acessar."
#~ msgid "HOME The complete pathname to your login directory."
-#~ msgstr ""
-#~ "HOME O nome completo do caminho do seu diretório de login."
+#~ msgstr "HOME O nome completo do caminho do seu diretório de login."
-#~ msgid ""
-#~ "HOSTTYPE The type of CPU this version of Bash is running under."
-#~ msgstr ""
-#~ "HOSTTYPE O tipo de CPU sob a qual esta `bash' está executando."
+#~ msgid "HOSTTYPE The type of CPU this version of Bash is running under."
+#~ msgstr "HOSTTYPE O tipo de CPU sob a qual esta `bash' está executando."
-#~ msgid ""
-#~ "IGNOREEOF Controls the action of the shell on receipt of an EOF"
+#~ msgid "IGNOREEOF Controls the action of the shell on receipt of an EOF"
#~ msgstr "IGNOREEOF Controla a ação da shell ao receber um caracter"
#~ msgid "\t\tcharacter as the sole input. If set, then the value"
@@ -8372,16 +7772,13 @@ msgstr ""
#~ msgstr "\t\tde forma seguida em uma linha vazia, antes da shell terminar"
#~ msgid "\t\t(default 10). When unset, EOF signifies the end of input."
-#~ msgstr ""
-#~ "\t\t(padrão 10). Caso contrário, EOF significa o fim da entrada de dados."
+#~ msgstr "\t\t(padrão 10). Caso contrário, EOF significa o fim da entrada de dados."
#~ msgid "MAILCHECK\tHow often, in seconds, Bash checks for new mail."
-#~ msgstr ""
-#~ "MAILCHECK\tFreqüência, em segundos, para a `bash' verificar novo e-mail."
+#~ msgstr "MAILCHECK\tFreqüência, em segundos, para a `bash' verificar novo e-mail."
#~ msgid "MAILPATH\tA colon-separated list of filenames which Bash checks"
-#~ msgstr ""
-#~ "MAILPATH\tUma lista, separada por dois pontos, de nomes de arquivos,"
+#~ msgstr "MAILPATH\tUma lista, separada por dois pontos, de nomes de arquivos,"
#~ msgid "\t\tfor new mail."
#~ msgstr "\t\tnos quais a `bash' vai verificar se existe novo e-mail."
@@ -8390,8 +7787,7 @@ msgstr ""
#~ msgstr "OSTYPE\t\tA versão do Unix sob a qual a `bash' está executando."
#~ msgid "PATH A colon-separated list of directories to search when"
-#~ msgstr ""
-#~ "PATH Uma lista, separada por dois pontos, de diretórios a"
+#~ msgstr "PATH Uma lista, separada por dois pontos, de diretórios a"
#~ msgid "\t\tlooking for commands."
#~ msgstr "\t\tserem pesquisados quando os comandos forem procurados."
@@ -8412,20 +7808,16 @@ msgstr ""
#~ msgstr "TERM O nome do tipo de terminal em uso no momento."
#~ msgid "auto_resume Non-null means a command word appearing on a line by"
-#~ msgstr ""
-#~ "auto_resume Não nulo significa que um comando aparecendo sozinho em"
+#~ msgstr "auto_resume Não nulo significa que um comando aparecendo sozinho em"
#~ msgid "\t\titself is first looked for in the list of currently"
-#~ msgstr ""
-#~ "\t\tlinha deve ser procurado primeiro na lista de trabalhos parados."
+#~ msgstr "\t\tlinha deve ser procurado primeiro na lista de trabalhos parados."
#~ msgid "\t\tstopped jobs. If found there, that job is foregrounded."
-#~ msgstr ""
-#~ "\t\tSe for encontrado na lista, o trabalho vai para o primeiro plano."
+#~ msgstr "\t\tSe for encontrado na lista, o trabalho vai para o primeiro plano."
#~ msgid "\t\tA value of `exact' means that the command word must"
-#~ msgstr ""
-#~ "\t\tO valor `exact' significa que a palavra do comando deve corresponder"
+#~ msgstr "\t\tO valor `exact' significa que a palavra do comando deve corresponder"
#~ msgid "\t\texactly match a command in the list of stopped jobs. A"
#~ msgstr "\t\texatamente a um comando da lista de trabalhos parados."
@@ -8437,23 +7829,19 @@ msgstr ""
#~ msgstr "\t\tcorresponder a uma parte do trabalho. Qualquer outro valor"
#~ msgid "\t\tthe command must be a prefix of a stopped job."
-#~ msgstr ""
-#~ "\t\tsignifica que o comando deve ser um prefixo de um trabalho parado."
+#~ msgstr "\t\tsignifica que o comando deve ser um prefixo de um trabalho parado."
#~ msgid "command_oriented_history"
#~ msgstr "command_oriented_history"
-#~ msgid ""
-#~ " Non-null means to save multiple-line commands together on"
-#~ msgstr ""
-#~ " Se não for nulo significa salvar comandos com múltiplas"
+#~ msgid " Non-null means to save multiple-line commands together on"
+#~ msgstr " Se não for nulo significa salvar comandos com múltiplas"
#~ msgid " a single history line."
#~ msgstr " linhas, juntas em uma única linha do histórico."
#~ msgid "histchars Characters controlling history expansion and quick"
-#~ msgstr ""
-#~ "histchars Caracteres que controlam a expansão do histórico e a"
+#~ msgstr "histchars Caracteres que controlam a expansão do histórico e a"
#~ msgid "\t\tsubstitution. The first character is the history"
#~ msgstr "\t\tsubstituição rápida. O primeiro caracter é o de substituição"
@@ -8468,12 +7856,10 @@ msgstr ""
#~ msgstr "\t\té o de comentário do histórico, geralmente o `#'."
#~ msgid "HISTCONTROL\tSet to a value of `ignorespace', it means don't enter"
-#~ msgstr ""
-#~ "HISTCONTROL\tCom valor igual a `ignorespace', significa não introduzir"
+#~ msgstr "HISTCONTROL\tCom valor igual a `ignorespace', significa não introduzir"
#~ msgid "\t\tlines which begin with a space or tab on the history"
-#~ msgstr ""
-#~ "\t\tlinhas que iniciam por espaço ou tabulação na lista de histórico."
+#~ msgstr "\t\tlinhas que iniciam por espaço ou tabulação na lista de histórico."
#~ msgid "\t\tlist. Set to a value of `ignoredups', it means don't"
#~ msgstr "\t\tCom valor igual a `ignoredups', significa não introduzir linhas"
@@ -8485,8 +7871,7 @@ msgstr ""
#~ msgstr "\t\t`ignoreboth' significa combinar as duas opções. Remover,"
#~ msgid "\t\tor set to any other value than those above means to save"
-#~ msgstr ""
-#~ "\t\tou atribuir algum outro valor que não os acima, significa salvar"
+#~ msgstr "\t\tou atribuir algum outro valor que não os acima, significa salvar"
#~ msgid "\t\tall lines on the history list."
#~ msgstr "\t\ttodas as linhas na lista de histórico."
@@ -8495,22 +7880,19 @@ msgstr ""
#~ msgstr "Adiciona o diretório no topo da pilha de diretórios, ou rotaciona a"
#~ msgid "the stack, making the new top of the stack the current working"
-#~ msgstr ""
-#~ "pilha, fazendo o diretório atual de trabalho ficar no topo da pilha."
+#~ msgstr "pilha, fazendo o diretório atual de trabalho ficar no topo da pilha."
#~ msgid "directory. With no arguments, exchanges the top two directories."
#~ msgstr "Sem nenhum argumento, troca os dois diretórios do topo."
#~ msgid "+N\tRotates the stack so that the Nth directory (counting"
-#~ msgstr ""
-#~ "+N\tRotaciona a pilha de tal forma que o n-ésimo diretório (contado a"
+#~ msgstr "+N\tRotaciona a pilha de tal forma que o n-ésimo diretório (contado a"
#~ msgid "\tfrom the left of the list shown by `dirs') is at the top."
#~ msgstr "\tpartir da esquerda da lista exibida por `dirs') fique no topo."
#~ msgid "-N\tRotates the stack so that the Nth directory (counting"
-#~ msgstr ""
-#~ "-N\tRotaciona a pilha de tal forma que o n-ésimo diretório (contado a"
+#~ msgstr "-N\tRotaciona a pilha de tal forma que o n-ésimo diretório (contado a"
#~ msgid "\tfrom the right) is at the top."
#~ msgstr "\tpartir da direita) fique no topo."
@@ -8551,8 +7933,7 @@ msgstr ""
#~ msgid "\tremoves the last directory, `popd -1' the next to last."
#~ msgstr "\tremove o último diretório, `popd -1' o penúltimo."
-#~ msgid ""
-#~ "-n\tsuppress the normal change of directory when removing directories"
+#~ msgid "-n\tsuppress the normal change of directory when removing directories"
#~ msgstr "-n\tsuprime a troca normal de diretório ao remover-se diretórios"
#~ msgid "\tfrom the stack, so only the stack is manipulated."
@@ -8567,57 +7948,44 @@ msgstr ""
#~ msgid "back up through the list with the `popd' command."
#~ msgstr "removidos da lista através do comando `popd'."
-#~ msgid ""
-#~ "The -l flag specifies that `dirs' should not print shorthand versions"
+#~ msgid "The -l flag specifies that `dirs' should not print shorthand versions"
#~ msgstr "A opção -l especifica que `dirs' não deve exibir a versão resumida"
-#~ msgid ""
-#~ "of directories which are relative to your home directory. This means"
-#~ msgstr ""
-#~ "dos diretórios relativos ao seu diretório `home'. Isto significa que"
+#~ msgid "of directories which are relative to your home directory. This means"
+#~ msgstr "dos diretórios relativos ao seu diretório `home'. Isto significa que"
#~ msgid "that `~/bin' might be displayed as `/homes/bfox/bin'. The -v flag"
-#~ msgstr ""
-#~ "`~/bin' deve ser exibido como `/home/você/bin'. A opção -v faz com que"
+#~ msgstr "`~/bin' deve ser exibido como `/home/você/bin'. A opção -v faz com que"
#~ msgid "causes `dirs' to print the directory stack with one entry per line,"
#~ msgstr "`dirs' exiba a pilha de diretórios com uma entrada por linha,"
-#~ msgid ""
-#~ "prepending the directory name with its position in the stack. The -p"
+#~ msgid "prepending the directory name with its position in the stack. The -p"
#~ msgstr "antecedendo o nome do diretório com a sua posição na pilha. A opção"
#~ msgid "flag does the same thing, but the stack position is not prepended."
#~ msgstr "-p faz a mesma coisa, mas a posição na pilha não é exibida. A opção"
-#~ msgid ""
-#~ "The -c flag clears the directory stack by deleting all of the elements."
+#~ msgid "The -c flag clears the directory stack by deleting all of the elements."
#~ msgstr "-c limpa a pilha de diretórios apagando todos os seus elementos."
-#~ msgid ""
-#~ "+N\tdisplays the Nth entry counting from the left of the list shown by"
-#~ msgstr ""
-#~ "+N\texibe a n-ésima entrada contada a partir da esquerda da lista exibida"
+#~ msgid "+N\tdisplays the Nth entry counting from the left of the list shown by"
+#~ msgstr "+N\texibe a n-ésima entrada contada a partir da esquerda da lista exibida"
#~ msgid "\tdirs when invoked without options, starting with zero."
#~ msgstr "\tpor `dirs', quando este é chamado sem opções, começando por zero."
-#~ msgid ""
-#~ "-N\tdisplays the Nth entry counting from the right of the list shown by"
-#~ msgstr ""
-#~ "-N\texibe a n-ésima entrada contada a partir da direita da lista exibida"
+#~ msgid "-N\tdisplays the Nth entry counting from the right of the list shown by"
+#~ msgstr "-N\texibe a n-ésima entrada contada a partir da direita da lista exibida"
#~ msgid "Toggle the values of variables controlling optional behavior."
-#~ msgstr ""
-#~ "Alterna os valores das variáveis controladoras de comportamentos "
-#~ "opcionais."
+#~ msgstr "Alterna os valores das variáveis controladoras de comportamentos opcionais."
#~ msgid "The -s flag means to enable (set) each OPTNAME; the -u flag"
#~ msgstr "A opção -s ativa (set) cada NOME-OPÇÃO; a opção -u desativa cada"
#~ msgid "unsets each OPTNAME. The -q flag suppresses output; the exit"
-#~ msgstr ""
-#~ "NOME-OPÇÃO. A opção -q suprime a saída; o status de término indica se"
+#~ msgstr "NOME-OPÇÃO. A opção -q suprime a saída; o status de término indica se"
#~ msgid "status indicates whether each OPTNAME is set or unset. The -o"
#~ msgstr "cada NOME-OPÇÃO foi ativado ou desativado A opção -o restringe"
@@ -8629,8 +7997,7 @@ msgstr ""
#~ msgstr "Sem nenhuma opção, ou com a opção -p, uma lista com todas as"
#~ msgid "settable options is displayed, with an indication of whether or"
-#~ msgstr ""
-#~ "opções que podem ser ativadas é exibida, com indicação sobre se cada uma"
+#~ msgstr "opções que podem ser ativadas é exibida, com indicação sobre se cada uma"
#~ msgid "not each is set."
#~ msgstr "das opções está ativa ou não."
diff --git a/tests/RUN-ONE-TEST b/tests/RUN-ONE-TEST
index 0b063810..c8bef8dd 100755
--- a/tests/RUN-ONE-TEST
+++ b/tests/RUN-ONE-TEST
@@ -1,4 +1,4 @@
-BUILD_DIR=/usr/local/build/chet/bash/bash-current
+BUILD_DIR=/usr/local/build/bash/bash-current
THIS_SH=$BUILD_DIR/bash
PATH=$PATH:$BUILD_DIR
diff --git a/tests/errors.right b/tests/errors.right
index be0c8959..93c73a39 100644
--- a/tests/errors.right
+++ b/tests/errors.right
@@ -11,93 +11,95 @@ declare -fr func
unset: usage: unset [-f] [-v] [-n] [name ...]
./errors.tests: line 55: unset: func: cannot unset: readonly function
./errors.tests: line 58: declare: func: readonly function
-./errors.tests: line 62: unset: XPATH: cannot unset: readonly variable
-./errors.tests: line 68: unset: cannot simultaneously unset a function and a variable
-./errors.tests: line 71: declare: -z: invalid option
+./errors.tests: line 62: declare: -a: invalid option
+./errors.tests: line 63: declare: -i: invalid option
+./errors.tests: line 67: unset: XPATH: cannot unset: readonly variable
+./errors.tests: line 73: unset: cannot simultaneously unset a function and a variable
+./errors.tests: line 76: declare: -z: invalid option
declare: usage: declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]
-./errors.tests: line 73: declare: `-z': not a valid identifier
-./errors.tests: line 74: declare: `/bin/sh': not a valid identifier
-./errors.tests: line 78: declare: cannot use `-f' to make functions
-./errors.tests: line 81: exec: -i: invalid option
+./errors.tests: line 78: declare: `-z': not a valid identifier
+./errors.tests: line 79: declare: `/bin/sh': not a valid identifier
+./errors.tests: line 83: declare: cannot use `-f' to make functions
+./errors.tests: line 86: exec: -i: invalid option
exec: usage: exec [-cl] [-a name] [command [argument ...]] [redirection ...]
-./errors.tests: line 85: export: XPATH: not a function
-./errors.tests: line 88: break: only meaningful in a `for', `while', or `until' loop
-./errors.tests: line 89: continue: only meaningful in a `for', `while', or `until' loop
-./errors.tests: line 92: shift: label: numeric argument required
-./errors.tests: line 97: shift: too many arguments
-./errors.tests: line 103: let: expression expected
-./errors.tests: line 106: local: can only be used in a function
-./errors.tests: line 109: logout: not login shell: use `exit'
-./errors.tests: line 112: hash: notthere: not found
-./errors.tests: line 115: hash: -v: invalid option
+./errors.tests: line 90: export: XPATH: not a function
+./errors.tests: line 93: break: only meaningful in a `for', `while', or `until' loop
+./errors.tests: line 94: continue: only meaningful in a `for', `while', or `until' loop
+./errors.tests: line 97: shift: label: numeric argument required
+./errors.tests: line 102: shift: too many arguments
+./errors.tests: line 108: let: expression expected
+./errors.tests: line 111: local: can only be used in a function
+./errors.tests: line 114: logout: not login shell: use `exit'
+./errors.tests: line 117: hash: notthere: not found
+./errors.tests: line 120: hash: -v: invalid option
hash: usage: hash [-lr] [-p pathname] [-dt] [name ...]
-./errors.tests: line 119: hash: hashing disabled
-./errors.tests: line 122: export: `AA[4]': not a valid identifier
-./errors.tests: line 123: readonly: `AA[4]': not a valid identifier
-./errors.tests: line 126: unset: [-2]: bad array subscript
-./errors.tests: line 130: AA: readonly variable
-./errors.tests: line 134: AA: readonly variable
-./errors.tests: line 142: shift: 5: shift count out of range
-./errors.tests: line 143: shift: -2: shift count out of range
-./errors.tests: line 146: shopt: no_such_option: invalid shell option name
-./errors.tests: line 147: shopt: no_such_option: invalid shell option name
-./errors.tests: line 150: umask: 09: octal number out of range
-./errors.tests: line 151: umask: `:': invalid symbolic mode character
-./errors.tests: line 152: umask: `:': invalid symbolic mode operator
-./errors.tests: line 155: umask: -i: invalid option
+./errors.tests: line 124: hash: hashing disabled
+./errors.tests: line 127: export: `AA[4]': not a valid identifier
+./errors.tests: line 128: readonly: `AA[4]': not a valid identifier
+./errors.tests: line 131: unset: [-2]: bad array subscript
+./errors.tests: line 135: AA: readonly variable
+./errors.tests: line 139: AA: readonly variable
+./errors.tests: line 147: shift: 5: shift count out of range
+./errors.tests: line 148: shift: -2: shift count out of range
+./errors.tests: line 151: shopt: no_such_option: invalid shell option name
+./errors.tests: line 152: shopt: no_such_option: invalid shell option name
+./errors.tests: line 155: umask: 09: octal number out of range
+./errors.tests: line 156: umask: `:': invalid symbolic mode character
+./errors.tests: line 157: umask: `:': invalid symbolic mode operator
+./errors.tests: line 160: umask: -i: invalid option
umask: usage: umask [-p] [-S] [mode]
-./errors.tests: line 159: umask: `u': invalid symbolic mode character
-./errors.tests: line 168: VAR: readonly variable
-./errors.tests: line 171: declare: VAR: readonly variable
-./errors.tests: line 172: declare: VAR: readonly variable
-./errors.tests: line 174: declare: unset: not found
-./errors.tests: line 177: VAR: readonly variable
-./errors.tests: command substitution: line 181: syntax error near unexpected token `)'
-./errors.tests: command substitution: line 181: ` for z in 1 2 3; do )'
-./errors.tests: command substitution: line 182: syntax error near unexpected token `done'
-./errors.tests: command substitution: line 182: ` for z in 1 2 3; done )'
-./errors.tests: line 184: cd: HOME not set
-./errors.tests: line 185: cd: /tmp/xyz.bash: No such file or directory
-./errors.tests: line 187: cd: OLDPWD not set
-./errors.tests: line 188: cd: /bin/sh: Not a directory
-./errors.tests: line 190: cd: /tmp/cd-notthere: No such file or directory
-./errors.tests: line 193: .: filename argument required
+./errors.tests: line 164: umask: `u': invalid symbolic mode character
+./errors.tests: line 173: VAR: readonly variable
+./errors.tests: line 176: declare: VAR: readonly variable
+./errors.tests: line 177: declare: VAR: readonly variable
+./errors.tests: line 179: declare: unset: not found
+./errors.tests: line 182: VAR: readonly variable
+./errors.tests: command substitution: line 186: syntax error near unexpected token `)'
+./errors.tests: command substitution: line 186: ` for z in 1 2 3; do )'
+./errors.tests: command substitution: line 187: syntax error near unexpected token `done'
+./errors.tests: command substitution: line 187: ` for z in 1 2 3; done )'
+./errors.tests: line 189: cd: HOME not set
+./errors.tests: line 190: cd: /tmp/xyz.bash: No such file or directory
+./errors.tests: line 192: cd: OLDPWD not set
+./errors.tests: line 193: cd: /bin/sh: Not a directory
+./errors.tests: line 195: cd: /tmp/cd-notthere: No such file or directory
+./errors.tests: line 198: .: filename argument required
.: usage: . filename [arguments]
-./errors.tests: line 194: source: filename argument required
+./errors.tests: line 199: source: filename argument required
source: usage: source filename [arguments]
-./errors.tests: line 197: .: -i: invalid option
+./errors.tests: line 202: .: -i: invalid option
.: usage: . filename [arguments]
-./errors.tests: line 200: set: -q: invalid option
+./errors.tests: line 205: set: -q: invalid option
set: usage: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
-./errors.tests: line 203: enable: sh: not a shell builtin
-./errors.tests: line 203: enable: bash: not a shell builtin
-./errors.tests: line 206: shopt: cannot set and unset shell options simultaneously
-./errors.tests: line 209: read: var: invalid timeout specification
-./errors.tests: line 212: read: `/bin/sh': not a valid identifier
-./errors.tests: line 215: VAR: readonly variable
-./errors.tests: line 218: readonly: -x: invalid option
+./errors.tests: line 208: enable: sh: not a shell builtin
+./errors.tests: line 208: enable: bash: not a shell builtin
+./errors.tests: line 211: shopt: cannot set and unset shell options simultaneously
+./errors.tests: line 214: read: var: invalid timeout specification
+./errors.tests: line 217: read: `/bin/sh': not a valid identifier
+./errors.tests: line 220: VAR: readonly variable
+./errors.tests: line 223: readonly: -x: invalid option
readonly: usage: readonly [-aAf] [name[=value] ...] or readonly -p
-./errors.tests: line 221: eval: -i: invalid option
+./errors.tests: line 226: eval: -i: invalid option
eval: usage: eval [arg ...]
-./errors.tests: line 222: command: -i: invalid option
+./errors.tests: line 227: command: -i: invalid option
command: usage: command [-pVv] command [arg ...]
-./errors.tests: line 225: /bin/sh + 0: syntax error: operand expected (error token is "/bin/sh + 0")
-./errors.tests: line 226: /bin/sh + 0: syntax error: operand expected (error token is "/bin/sh + 0")
-./errors.tests: line 229: trap: NOSIG: invalid signal specification
-./errors.tests: line 232: trap: -s: invalid option
+./errors.tests: line 230: /bin/sh + 0: syntax error: operand expected (error token is "/bin/sh + 0")
+./errors.tests: line 231: /bin/sh + 0: syntax error: operand expected (error token is "/bin/sh + 0")
+./errors.tests: line 234: trap: NOSIG: invalid signal specification
+./errors.tests: line 237: trap: -s: invalid option
trap: usage: trap [-lp] [[arg] signal_spec ...]
-./errors.tests: line 238: return: can only `return' from a function or sourced script
-./errors.tests: line 242: break: 0: loop count out of range
-./errors.tests: line 246: continue: 0: loop count out of range
-./errors.tests: line 251: builtin: bash: not a shell builtin
-./errors.tests: line 255: bg: no job control
-./errors.tests: line 256: fg: no job control
-./errors.tests: line 259: kill: -s: option requires an argument
-./errors.tests: line 261: kill: S: invalid signal specification
-./errors.tests: line 263: kill: `': not a pid or valid job spec
+./errors.tests: line 243: return: can only `return' from a function or sourced script
+./errors.tests: line 247: break: 0: loop count out of range
+./errors.tests: line 251: continue: 0: loop count out of range
+./errors.tests: line 256: builtin: bash: not a shell builtin
+./errors.tests: line 260: bg: no job control
+./errors.tests: line 261: fg: no job control
+./errors.tests: line 264: kill: -s: option requires an argument
+./errors.tests: line 266: kill: S: invalid signal specification
+./errors.tests: line 268: kill: `': not a pid or valid job spec
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
-./errors.tests: line 268: set: trackall: invalid option name
-./errors.tests: line 272: xx: readonly variable
+./errors.tests: line 273: set: trackall: invalid option name
+./errors.tests: line 277: xx: readonly variable
1
./errors1.sub: line 14: .: -i: invalid option
.: usage: . filename [arguments]
@@ -197,4 +199,4 @@ ok 6
bash: line 1: return: can only `return' from a function or sourced script
after return
bash: line 1: return: can only `return' from a function or sourced script
-./errors.tests: line 299: `!!': not a valid identifier
+./errors.tests: line 304: `!!': not a valid identifier
diff --git a/tests/errors.tests b/tests/errors.tests
index 531b625b..65cf830e 100644
--- a/tests/errors.tests
+++ b/tests/errors.tests
@@ -57,6 +57,11 @@ unset -f func
declare -fr func
declare -f +r func
+# cannot use declare -f in combination with other attributes
+a() { echo a; }
+declare -f -a a
+declare -f -i b c
+
XPATH=$PATH
declare -r XPATH
unset -v XPATH
diff --git a/tests/nameref.right b/tests/nameref.right
index 296105c9..8fa8211a 100644
--- a/tests/nameref.right
+++ b/tests/nameref.right
@@ -348,6 +348,10 @@ declare -a v=([1]="1")
declare -a v=([0]="0" [1]="1")
declare -n n="v[1]"
declare -a v=([0]="0")
+./nameref15.sub: line 120: warning: xref: removing nameref attribute
+declare -a xref=([1]="one")
+./nameref15.sub: line 126: warning: xref: removing nameref attribute
+declare -a xref=([1]="one")
declare -n r1="y"
declare -n r2="x"
./nameref16.sub: line 25: typeset: x: not found
@@ -440,6 +444,8 @@ declare -n foo="bar"
declare -- bar
declare -- foo="bar"
declare -- bar
+8
+declare -n ivar="foo"
declare -a v=([0]="Y")
r:
v:
@@ -483,3 +489,24 @@ declare -n ref="var"
declare -ai var=([1]="0")
declare -n ref="var"
declare -- var="1"
+a string with spaces
+many spaces
+declare -n foo="bar[0]"
+declare -a bar=([0]=" still more spaces")
+declare -n foo="bar[0]"
+declare -a bar=([0]="spaces still more spaces")
+./nameref22.sub: line 50: declare: array: reference variable cannot be an array
+./nameref22.sub: line 53: declare: array[128]: reference variable cannot be an array
+declare -a array=([0]="one" [1]="two" [2]="three")
+declare -- array="(one two three)"
+declare -a array=([0]="one" [1]="two" [2]="three")
+./nameref22.sub: line 69: declare: `(one two three)': invalid variable name for name reference
+./nameref22.sub: line 70: declare: array: reference variable cannot be an array
+declare -a array=([0]="zero")
+./nameref22.sub: line 74: declare: array: reference variable cannot be an array
+declare -a array=([0]="one" [1]="two" [2]="three")
+./nameref22.sub: line 79: declare: array: reference variable cannot be an array
+declare -a array
+declare -ai array=([0]="one")
+declare -a array=([0]="zero")
+declare -a array=([0]="one" [1]="two" [2]="three")
diff --git a/tests/nameref15.sub b/tests/nameref15.sub
index cce8fbd9..e9a09eeb 100644
--- a/tests/nameref15.sub
+++ b/tests/nameref15.sub
@@ -115,3 +115,13 @@ v=(0 1)
declare -n n=v[1]
unset n
declare -p n v
+
+declare -n xref
+declare -a xref[1]=one
+declare -p xref
+
+unset xref
+declare -n xref
+xref=array
+declare -a xref[1]=one
+declare -p xref
diff --git a/tests/nameref19.sub b/tests/nameref19.sub
index b00f68e5..d4b900e8 100644
--- a/tests/nameref19.sub
+++ b/tests/nameref19.sub
@@ -62,3 +62,12 @@ declare bar
declare -p foo bar
declare +n foo
declare -p foo bar
+
+# but when we add the nameref attribute, we remove other attributes
+
+declare -i ivar
+ivar=4+4
+echo $ivar
+
+declare -n ivar=foo
+declare -p ivar
diff --git a/tests/nameref22.sub b/tests/nameref22.sub
new file mode 100644
index 00000000..4e44fbb3
--- /dev/null
+++ b/tests/nameref22.sub
@@ -0,0 +1,97 @@
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+declare -n foo=bar
+
+declare foo='a string with spaces'
+echo $foo
+
+unset foo
+declare foo+='many spaces'
+echo $foo
+
+unset foo # unsets bar
+unset -n foo
+
+declare -a bar
+declare -n foo='bar[0]'
+declare foo+=' still more spaces'
+
+declare -p foo bar
+unset -n foo
+unset bar
+
+declare -a bar
+declare -n foo='bar[0]'
+declare foo=spaces
+declare foo+=' still more spaces'
+
+declare -p foo bar
+
+unset -n foo
+unset bar
+
+ray=ray
+
+declare -a array
+array[0]=zero
+
+declare -n array
+unset array
+
+declare -n array[128]
+unset array
+
+declare -a array='(one two three)'
+declare -p array
+unset array
+
+declare array='(one two three)'
+declare -p array
+unset array
+
+declare -a ar$ray='(one two three)'
+declare -p ar$ray
+unset array
+
+declare -a array=(zero)
+declare -n array='(one two three)'
+declare -n array=three
+declare -p array
+unset array
+
+declare -n array=(one two three)
+declare -p array
+unset array
+
+declare -a array
+declare -n array=one
+declare -p array
+unset array
+
+array=one
+declare -i array[64];
+declare -p array
+unset array
+
+declare -a array=zero
+declare -p array
+unset array
+
+declare -a array
+declare array='(one two three)'
+declare -p array
+unset array
+
+