mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-06-29 00:19:51 +02:00
commit bash-20080918 snapshot
This commit is contained in:
@@ -6902,3 +6902,35 @@ variables.c
|
||||
a value, whether or not a variable with the same name existed in a
|
||||
previous context. This is consistent with ksh93. Fix from
|
||||
<neil@s-z.org>
|
||||
|
||||
9/16
|
||||
----
|
||||
execute_cmd.c
|
||||
- add call to CHECK_TERMSIG in shell_execve after the call to execve
|
||||
returns. Recommended by Roman Rakus <rrakus@redhat.com>
|
||||
- add QUIT check in execute_connection after executing first command
|
||||
in a `&' connection
|
||||
|
||||
9/22
|
||||
----
|
||||
execute_cmd.c
|
||||
- new semaphore variable, executing_list, incremented every time a
|
||||
list (command1;command2 or command1 || command2 or command1 &&
|
||||
command2) is executed; used as sentinel for rest of shell
|
||||
|
||||
sig.c,builtins/evalstring.c
|
||||
- set executing_list to 0 when throwing execution back to top level;
|
||||
make sure to unwind-protect it in appropriate places
|
||||
|
||||
jobs.c
|
||||
- if a pipeline is killed by SIGINT while executing a list (when
|
||||
executing_list is non-zero), make sure the shell acts as if an
|
||||
interrupt occurred. The behavior is dependent on the shell
|
||||
compatibility level being > 32 (bash-4.0 and above)
|
||||
|
||||
9/24
|
||||
----
|
||||
builtins/declare.def
|
||||
- make `declare [option] var' (and the `typeset' equivalent) create
|
||||
invisible variables, instead of assigning the null string to a
|
||||
visible variable.
|
||||
|
||||
@@ -6896,3 +6896,41 @@ builtins/return.def
|
||||
builtins/bind.def
|
||||
- add an error message when bind is used without line editing active,
|
||||
instead of just returning an error status
|
||||
|
||||
variables.c
|
||||
- make sure make_local_variable never creates visible variables with
|
||||
a value, whether or not a variable with the same name existed in a
|
||||
previous context. This is consistent with ksh93. Fix from
|
||||
<neil@s-z.org>
|
||||
|
||||
9/16
|
||||
----
|
||||
execute_cmd.c
|
||||
- add call to CHECK_TERMSIG in shell_execve after the call to execve
|
||||
returns. Recommended by Roman Rakus <rrakus@redhat.com>
|
||||
- add QUIT check in execute_connection after executing first command
|
||||
in a `&' connection
|
||||
|
||||
9/22
|
||||
----
|
||||
execute_cmd.c
|
||||
- new semaphore variable, executing_list, incremented every time a
|
||||
list (command1;command2 or command1 || command2 or command1 &&
|
||||
command2) is executed; used as sentinel for rest of shell
|
||||
|
||||
sig.c,builtins/evalstring.c
|
||||
- set executing_list to 0 when throwing execution back to top level;
|
||||
make sure to unwind-protect it in appropriate places
|
||||
|
||||
jobs.c
|
||||
- if a pipeline is killed by SIGINT while executing a list (when
|
||||
executing_list is non-zero), make sure the shell acts as if an
|
||||
interrupt occurred. The behavior is dependent on the shell
|
||||
compatibility level being > 32 (bash-4.0 and above)
|
||||
|
||||
9/24
|
||||
----
|
||||
builtins/declare.def
|
||||
- make `declare [option] var' (and the `typeset' equivalent) create
|
||||
invisible variables, instead of assigning the null string to a
|
||||
visible variable
|
||||
|
||||
@@ -414,7 +414,14 @@ declare_internal (list, local_var)
|
||||
var = make_new_array_variable (name);
|
||||
else
|
||||
#endif
|
||||
var = bind_variable (name, "", 0);
|
||||
|
||||
if (offset)
|
||||
var = bind_variable (name, "", 0);
|
||||
else
|
||||
{
|
||||
var = bind_variable (name, (char *)NULL, 0);
|
||||
VSETATTR (var, att_invisible);
|
||||
}
|
||||
}
|
||||
|
||||
/* Cannot use declare +r to turn off readonly attribute. */
|
||||
|
||||
+98
-35
@@ -5,25 +5,24 @@ Copyright (C) 1987-2008 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 2, or (at your option) any later
|
||||
version.
|
||||
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.
|
||||
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; see the file COPYING. If not, write to the Free Software
|
||||
Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
$PRODUCES declare.c
|
||||
|
||||
$BUILTIN declare
|
||||
$FUNCTION declare_builtin
|
||||
$SHORT_DOC declare [-afFirtx] [-p] [name[=value] ...]
|
||||
$SHORT_DOC declare [-aAfFilrtux] [-p] [name[=value] ...]
|
||||
Set variable values and attributes.
|
||||
|
||||
Declare variables and give them attributes. If no NAMEs are given,
|
||||
@@ -36,10 +35,13 @@ Options:
|
||||
-p display the attributes and value of each NAME
|
||||
|
||||
Options which set attributes:
|
||||
-a to make NAMEs arrays (if supported)
|
||||
-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 NAMEs to lower case on assignment
|
||||
-r to make NAMEs readonly
|
||||
-t to make NAMEs have the `trace' attribute
|
||||
-u to convert NAMEs to upper case on assignment
|
||||
-x to make NAMEs export
|
||||
|
||||
Using `+' instead of `-' turns off the given attribute.
|
||||
@@ -56,7 +58,7 @@ $END
|
||||
|
||||
$BUILTIN typeset
|
||||
$FUNCTION declare_builtin
|
||||
$SHORT_DOC typeset [-afFirtx] [-p] name[=value] ...
|
||||
$SHORT_DOC typeset [-aAfFilrtux] [-p] name[=value] ...
|
||||
Set variable values and attributes.
|
||||
|
||||
Obsolete. See `help declare'.
|
||||
@@ -123,9 +125,9 @@ local_builtin (list)
|
||||
}
|
||||
|
||||
#if defined (ARRAY_VARS)
|
||||
# define DECLARE_OPTS "+afiprtxF"
|
||||
# define DECLARE_OPTS "+acfilprtuxAF"
|
||||
#else
|
||||
# define DECLARE_OPTS "+fiprtxF"
|
||||
# define DECLARE_OPTS "+cfilprtuxF"
|
||||
#endif
|
||||
|
||||
/* The workhorse function. */
|
||||
@@ -134,7 +136,8 @@ declare_internal (list, local_var)
|
||||
register WORD_LIST *list;
|
||||
int local_var;
|
||||
{
|
||||
int flags_on, flags_off, *flags, any_failed, assign_error, pflag, nodefs, opt;
|
||||
int flags_on, flags_off, *flags;
|
||||
int any_failed, assign_error, pflag, nodefs, opt;
|
||||
char *t, *subscript_start;
|
||||
SHELL_VAR *var;
|
||||
FUNCTION_DEF *shell_fn;
|
||||
@@ -150,8 +153,19 @@ declare_internal (list, local_var)
|
||||
case 'a':
|
||||
#if defined (ARRAY_VARS)
|
||||
*flags |= att_array;
|
||||
#endif
|
||||
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++;
|
||||
@@ -176,6 +190,25 @@ declare_internal (list, local_var)
|
||||
*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 */
|
||||
default:
|
||||
builtin_usage ();
|
||||
return (EX_USAGE);
|
||||
@@ -186,7 +219,7 @@ declare_internal (list, local_var)
|
||||
|
||||
/* If there are no more arguments left, then we just want to show
|
||||
some variables. */
|
||||
if (list == 0) /* declare -[afFirtx] */
|
||||
if (list == 0) /* declare -[aAfFirtx] */
|
||||
{
|
||||
/* Show local variables defined at this context level if this is
|
||||
the `local' builtin. */
|
||||
@@ -215,7 +248,7 @@ declare_internal (list, local_var)
|
||||
return (sh_chkwrite (EXECUTION_SUCCESS));
|
||||
}
|
||||
|
||||
if (pflag) /* declare -p [-afFirtx] name [name...] */
|
||||
if (pflag) /* declare -p [-aAfFirtx] name [name...] */
|
||||
{
|
||||
for (any_failed = 0; list; list = list->next)
|
||||
{
|
||||
@@ -232,7 +265,7 @@ declare_internal (list, local_var)
|
||||
#define NEXT_VARIABLE() free (name); list = list->next; continue
|
||||
|
||||
/* There are arguments left, so we are making variables. */
|
||||
while (list) /* declare [-afFirx] name [name ...] */
|
||||
while (list) /* declare [-aAfFirx] name [name ...] */
|
||||
{
|
||||
char *value, *name;
|
||||
int offset, aflags;
|
||||
@@ -244,7 +277,7 @@ declare_internal (list, local_var)
|
||||
offset = assignment (name, 0);
|
||||
aflags = 0;
|
||||
|
||||
if (offset) /* declare [-afFirx] name=value */
|
||||
if (offset) /* declare [-aAfFirx] name=value */
|
||||
{
|
||||
name[offset] = '\0';
|
||||
value = name + offset + 1;
|
||||
@@ -291,7 +324,9 @@ declare_internal (list, local_var)
|
||||
if (variable_context && ((flags_on & att_function) == 0))
|
||||
{
|
||||
#if defined (ARRAY_VARS)
|
||||
if ((flags_on & att_array) || making_array_special)
|
||||
if (flags_on & att_assoc)
|
||||
var = make_local_assoc_variable (name);
|
||||
else if ((flags_on & att_array) || making_array_special)
|
||||
var = make_local_array_variable (name);
|
||||
else
|
||||
#endif
|
||||
@@ -364,7 +399,7 @@ declare_internal (list, local_var)
|
||||
NEXT_VARIABLE ();
|
||||
}
|
||||
}
|
||||
else /* declare -[airx] name [name...] */
|
||||
else /* declare -[aAirx] name [name...] */
|
||||
{
|
||||
/* Non-null if we just created or fetched a local variable. */
|
||||
if (var == 0)
|
||||
@@ -373,11 +408,21 @@ declare_internal (list, local_var)
|
||||
if (var == 0)
|
||||
{
|
||||
#if defined (ARRAY_VARS)
|
||||
if ((flags_on & att_array) || making_array_special)
|
||||
if (flags_on & att_assoc)
|
||||
var = make_new_assoc_variable (name);
|
||||
else if ((flags_on & att_array) || making_array_special)
|
||||
var = make_new_array_variable (name);
|
||||
else
|
||||
#endif
|
||||
var = bind_variable (name, "", 0);
|
||||
|
||||
if (offset)
|
||||
var = bind_variable (name, "", 0);
|
||||
else
|
||||
{
|
||||
var = bind_variable (name, (char *)NULL, 0);
|
||||
VSETATTR (var, att_invisible);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Cannot use declare +r to turn off readonly attribute. */
|
||||
@@ -399,30 +444,48 @@ declare_internal (list, local_var)
|
||||
}
|
||||
|
||||
#if defined (ARRAY_VARS)
|
||||
if ((making_array_special || (flags_on & att_array) || array_p (var)) && offset)
|
||||
if ((making_array_special || (flags_on & (att_array|att_assoc)) || array_p (var) || assoc_p (var)) && offset)
|
||||
{
|
||||
int vlen;
|
||||
vlen = STRLEN (value);
|
||||
#if 0
|
||||
if (value[0] == '(' && strchr (value, ')'))
|
||||
#else
|
||||
|
||||
if (value[0] == '(' && value[vlen-1] == ')')
|
||||
#endif
|
||||
compound_array_assign = 1;
|
||||
else
|
||||
simple_array_assign = 1;
|
||||
}
|
||||
|
||||
/* Cannot use declare +a name to remove an array variable. */
|
||||
if ((flags_off & att_array) && array_p (var))
|
||||
/* 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 ();
|
||||
}
|
||||
|
||||
/* declare -a name makes name an array variable. */
|
||||
if ((making_array_special || (flags_on & att_array)) && array_p (var) == 0)
|
||||
if ((flags_on & att_array) && assoc_p (var))
|
||||
{
|
||||
builtin_error (_("%s: cannot convert associative to indexed array"), name);
|
||||
any_failed++;
|
||||
NEXT_VARIABLE ();
|
||||
}
|
||||
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)
|
||||
var = convert_var_to_array (var);
|
||||
#endif /* ARRAY_VARS */
|
||||
|
||||
|
||||
@@ -64,6 +64,7 @@ extern int current_token, shell_eof_token;
|
||||
extern int last_command_exit_value;
|
||||
extern int running_trap;
|
||||
extern int loop_level;
|
||||
extern int executing_list;
|
||||
extern int posixly_correct;
|
||||
|
||||
int parse_and_execute_level = 0;
|
||||
@@ -110,6 +111,7 @@ parse_prologue (string, flags, tag)
|
||||
unwind_protect_int (indirection_level);
|
||||
unwind_protect_int (line_number);
|
||||
unwind_protect_int (loop_level);
|
||||
unwind_protect_int (executing_list);
|
||||
if (flags & (SEVAL_NONINT|SEVAL_INTERACT))
|
||||
unwind_protect_int (interactive);
|
||||
|
||||
|
||||
@@ -4,6 +4,24 @@
|
||||
* no options - the way cat was intended
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
@@ -2,6 +2,24 @@
|
||||
|
||||
/* See Makefile for compilation details. */
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#if defined (HAVE_UNISTD_H)
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
/*
|
||||
* finfo - print file info
|
||||
*
|
||||
* Chet Ramey
|
||||
* chet@po.cwru.edu
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
||||
@@ -2,6 +2,24 @@
|
||||
|
||||
/* See Makefile for compilation details. */
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "bashtypes.h"
|
||||
|
||||
@@ -9,6 +9,24 @@
|
||||
* uid=xxx(chet) gid=xx groups=aa(aname), bb(bname), cc(cname)
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <stdio.h>
|
||||
#include "bashtypes.h"
|
||||
|
||||
@@ -2,6 +2,24 @@
|
||||
|
||||
/* See Makefile for compilation details. */
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "bashtypes.h"
|
||||
|
||||
@@ -1,5 +1,23 @@
|
||||
/* logname - print login name of current user */
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#if defined (HAVE_UNISTD_H)
|
||||
|
||||
@@ -2,6 +2,24 @@
|
||||
|
||||
/* See Makefile for compilation details. */
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "bashtypes.h"
|
||||
|
||||
@@ -3,6 +3,24 @@
|
||||
/* Sample builtin to be dynamically loaded with enable -f and replace an
|
||||
existing builtin. */
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "builtins.h"
|
||||
#include "shell.h"
|
||||
|
||||
@@ -22,6 +22,24 @@
|
||||
|
||||
/* See Makefile for compilation details. */
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
@@ -2,6 +2,24 @@
|
||||
* print -- loadable ksh-93 style print builtin
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
@@ -5,6 +5,24 @@
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
@@ -3,6 +3,24 @@
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
|
||||
@@ -18,6 +18,24 @@
|
||||
* chet@po.cwru.edu
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
@@ -2,6 +2,24 @@
|
||||
|
||||
/* See Makefile for compilation details. */
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -3,6 +3,25 @@
|
||||
*
|
||||
* usage: sleep seconds[.fraction]
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "bashtypes.h"
|
||||
|
||||
@@ -2,6 +2,24 @@
|
||||
|
||||
/* See Makefile for compilation details. */
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#if defined (HAVE_UNISTD_H)
|
||||
|
||||
@@ -1,5 +1,23 @@
|
||||
/* sync - sync the disks by forcing pending filesystem writes to complete */
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
|
||||
@@ -2,6 +2,24 @@
|
||||
|
||||
/* See Makefile for compilation details. */
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "bashtypes.h"
|
||||
|
||||
@@ -1,4 +1,23 @@
|
||||
/* true and false builtins */
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "bashtypes.h"
|
||||
|
||||
@@ -2,6 +2,24 @@
|
||||
|
||||
/* See Makefile for compilation details. */
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -5,6 +5,24 @@
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
@@ -3,6 +3,24 @@
|
||||
/* Should only be used to remove directories by a superuser prepared to let
|
||||
fsck clean up the file system. */
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
|
||||
@@ -2,6 +2,24 @@
|
||||
* whoami - print out username of current user
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright (C) 1999-2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash.
|
||||
Bash is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Bash is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
@@ -230,6 +230,9 @@ REDIRECT *exec_redirection_undo_list = (REDIRECT *)NULL;
|
||||
currently executing (e.g. `eval echo a' would have it set to 2). */
|
||||
int executing_builtin = 0;
|
||||
|
||||
/* Non-zero if we are executing a command list (a;b;c, etc.) */
|
||||
int executing_list = 0;
|
||||
|
||||
/* Non-zero if we have just forked and are currently running in a subshell
|
||||
environment. */
|
||||
int subshell_environment;
|
||||
@@ -2052,6 +2055,7 @@ execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close)
|
||||
tc->flags |= CMD_STDIN_REDIR;
|
||||
|
||||
exec_result = execute_command_internal (tc, 1, pipe_in, pipe_out, fds_to_close);
|
||||
QUIT;
|
||||
|
||||
if (tc->flags & CMD_STDIN_REDIR)
|
||||
tc->flags &= ~CMD_STDIN_REDIR;
|
||||
@@ -2076,12 +2080,14 @@ execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close)
|
||||
if (command->value.Connection->second)
|
||||
command->value.Connection->second->flags |= CMD_IGNORE_RETURN;
|
||||
}
|
||||
executing_list++;
|
||||
QUIT;
|
||||
execute_command (command->value.Connection->first);
|
||||
QUIT;
|
||||
exec_result = execute_command_internal (command->value.Connection->second,
|
||||
asynchronous, pipe_in, pipe_out,
|
||||
fds_to_close);
|
||||
executing_list--;
|
||||
break;
|
||||
|
||||
case '|':
|
||||
@@ -2107,6 +2113,7 @@ execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close)
|
||||
and the connector is OR_OR, then execute the second command,
|
||||
otherwise return. */
|
||||
|
||||
executing_list++;
|
||||
if (command->value.Connection->first)
|
||||
command->value.Connection->first->flags |= CMD_IGNORE_RETURN;
|
||||
|
||||
@@ -2122,6 +2129,7 @@ execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close)
|
||||
|
||||
exec_result = execute_command (command->value.Connection->second);
|
||||
}
|
||||
executing_list--;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -4502,6 +4510,8 @@ initialize_subshell ()
|
||||
/* We're no longer inside a shell function. */
|
||||
variable_context = return_catch_flag = 0;
|
||||
|
||||
executing_list = 0; /* XXX */
|
||||
|
||||
/* If we're not interactive, close the file descriptor from which we're
|
||||
reading the current shell script. */
|
||||
if (interactive_shell == 0)
|
||||
@@ -4543,6 +4553,7 @@ shell_execve (command, args, env)
|
||||
SETOSTYPE (0); /* Some systems use for USG/POSIX semantics */
|
||||
execve (command, args, env);
|
||||
i = errno; /* error from execve() */
|
||||
CHECK_TERMSIG;
|
||||
SETOSTYPE (1);
|
||||
|
||||
/* If we get to this point, then start checking out the file.
|
||||
|
||||
+225
-18
@@ -4,19 +4,20 @@
|
||||
|
||||
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 2, or (at your option)
|
||||
any later version.
|
||||
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.
|
||||
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; see the file COPYING. If not, write to the Free
|
||||
Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||
along with Bash. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#if !defined (__GNUC__) && !defined (HAVE_ALLOCA_H) && defined (_AIX)
|
||||
@@ -229,6 +230,9 @@ REDIRECT *exec_redirection_undo_list = (REDIRECT *)NULL;
|
||||
currently executing (e.g. `eval echo a' would have it set to 2). */
|
||||
int executing_builtin = 0;
|
||||
|
||||
/* Non-zero if we are executing a command list (a;b;c, etc.) */
|
||||
int executing_list = 0;
|
||||
|
||||
/* Non-zero if we have just forked and are currently running in a subshell
|
||||
environment. */
|
||||
int subshell_environment;
|
||||
@@ -1312,7 +1316,7 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close)
|
||||
do_piping (pipe_in, pipe_out);
|
||||
|
||||
#if defined (COPROCESS_SUPPORT)
|
||||
coproc_close (&sh_coproc);
|
||||
coproc_closeall ();
|
||||
#endif
|
||||
|
||||
/* If this is a user subshell, set a flag if stdin was redirected.
|
||||
@@ -1404,10 +1408,183 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close)
|
||||
}
|
||||
|
||||
#if defined (COPROCESS_SUPPORT)
|
||||
#define COPROC_MAX 16
|
||||
|
||||
typedef struct cpelement
|
||||
{
|
||||
struct cpelement *next;
|
||||
struct coproc *coproc;
|
||||
}
|
||||
cpelement_t;
|
||||
|
||||
typedef struct cplist
|
||||
{
|
||||
struct cpelement *head;
|
||||
struct cpelement *tail;
|
||||
int ncoproc;
|
||||
}
|
||||
cplist_t;
|
||||
|
||||
static struct cpelement *cpe_alloc __P((struct coproc *));
|
||||
static void cpe_dispose __P((struct cpelement *));
|
||||
static struct cpelement *cpl_add __P((struct coproc *));
|
||||
static struct cpelement *cpl_delete __P((pid_t));
|
||||
static void cpl_flush __P((void));
|
||||
static struct cpelement *cpl_search __P((pid_t));
|
||||
static struct cpelement *cpl_searchbyname __P((char *));
|
||||
static void cpl_prune __P((void));
|
||||
|
||||
Coproc sh_coproc = { 0, NO_PID, -1, -1, 0, 0 };
|
||||
|
||||
cplist_t coproc_list = {0, 0, 0};
|
||||
|
||||
/* Functions to manage the list of exited background pids whose status has
|
||||
been saved. */
|
||||
|
||||
static struct cpelement *
|
||||
cpe_alloc (cp)
|
||||
Coproc *cp;
|
||||
{
|
||||
struct cpelement *cpe;
|
||||
|
||||
cpe = (struct cpelement *)xmalloc (sizeof (struct cpelement));
|
||||
cpe->coproc = cp;
|
||||
cpe->next = (struct cpelement *)0;
|
||||
return cpe;
|
||||
}
|
||||
|
||||
static void
|
||||
cpe_dispose (cpe)
|
||||
struct cpelement *cpe;
|
||||
{
|
||||
free (cpe);
|
||||
}
|
||||
|
||||
static struct cpelement *
|
||||
cpl_add (cp)
|
||||
Coproc *cp;
|
||||
{
|
||||
struct cpelement *cpe;
|
||||
|
||||
cpe = cpe_alloc (cp);
|
||||
|
||||
if (coproc_list.head == 0)
|
||||
{
|
||||
coproc_list.head = coproc_list.tail = cpe;
|
||||
coproc_list.ncoproc = 0; /* just to make sure */
|
||||
}
|
||||
else
|
||||
{
|
||||
coproc_list.tail->next = cpe;
|
||||
coproc_list.tail = cpe;
|
||||
}
|
||||
coproc_list.ncoproc++;
|
||||
|
||||
return cpe;
|
||||
}
|
||||
|
||||
static struct cpelement *
|
||||
cpl_delete (pid)
|
||||
pid_t pid;
|
||||
{
|
||||
struct cpelement *prev, *p;
|
||||
|
||||
for (prev = p = coproc_list.head; p; prev = p, p = p->next)
|
||||
if (p->coproc->c_pid == pid)
|
||||
{
|
||||
prev->next = p->next; /* remove from list */
|
||||
break;
|
||||
}
|
||||
|
||||
if (p == 0)
|
||||
return 0; /* not found */
|
||||
|
||||
#if defined (DEBUG)
|
||||
itrace("cpl_delete: deleting %d", pid);
|
||||
#endif
|
||||
|
||||
/* Housekeeping in the border cases. */
|
||||
if (p == coproc_list.head)
|
||||
coproc_list.head = coproc_list.head->next;
|
||||
else if (p == coproc_list.tail)
|
||||
coproc_list.tail = prev;
|
||||
|
||||
coproc_list.ncoproc--;
|
||||
if (coproc_list.ncoproc == 0)
|
||||
coproc_list.head = coproc_list.tail = 0;
|
||||
else if (coproc_list.ncoproc == 1)
|
||||
coproc_list.tail = coproc_list.head; /* just to make sure */
|
||||
|
||||
return (p);
|
||||
}
|
||||
|
||||
/* Clear out the list of saved statuses */
|
||||
static void
|
||||
cpl_flush ()
|
||||
{
|
||||
struct cpelement *cpe, *p;
|
||||
|
||||
for (cpe = coproc_list.head; cpe; )
|
||||
{
|
||||
p = cpe;
|
||||
cpe = cpe->next;
|
||||
|
||||
coproc_dispose (p->coproc);
|
||||
cpe_dispose (p);
|
||||
}
|
||||
|
||||
coproc_list.head = coproc_list.tail = 0;
|
||||
coproc_list.ncoproc = 0;
|
||||
}
|
||||
|
||||
/* Search for PID in the list of coprocs; return the cpelement struct if
|
||||
found. If not found, return NULL. */
|
||||
static struct cpelement *
|
||||
cpl_search (pid)
|
||||
pid_t pid;
|
||||
{
|
||||
struct cpelement *cp;
|
||||
|
||||
for (cp = coproc_list.head ; cp; cp = cp->next)
|
||||
if (cp->coproc->c_pid == pid)
|
||||
return cp;
|
||||
return (struct cpelement *)NULL;
|
||||
}
|
||||
|
||||
/* Search for the coproc named NAME in the list of coprocs; return the
|
||||
cpelement struct if found. If not found, return NULL. */
|
||||
static struct cpelement *
|
||||
cpl_searchbyname (name)
|
||||
char *name;
|
||||
{
|
||||
struct cpelement *cp;
|
||||
|
||||
for (cp = coproc_list.head ; cp; cp = cp->next)
|
||||
if (STREQ (cp->coproc->c_name, name))
|
||||
return cp;
|
||||
return (struct cpelement *)NULL;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void
|
||||
cpl_prune ()
|
||||
{
|
||||
struct cpelement *cp;
|
||||
|
||||
while (coproc_list.head && coproc_list.ncoproc > COPROC_MAX)
|
||||
{
|
||||
cp = coproc_list.head;
|
||||
coproc_list.head = coproc_list.head->next;
|
||||
coproc_dispose (cp->coproc);
|
||||
cpe_dispose (cp);
|
||||
coproc_list.ncoproc--;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* These currently use a single global "shell coproc" but are written in a
|
||||
way to not preclude additional coprocs later */
|
||||
way to not preclude additional coprocs later (using the list management
|
||||
package above). */
|
||||
|
||||
struct coproc *
|
||||
getcoprocbypid (pid)
|
||||
@@ -1441,7 +1618,7 @@ coproc_alloc (name, pid)
|
||||
{
|
||||
struct coproc *cp;
|
||||
|
||||
cp = &sh_coproc;
|
||||
cp = &sh_coproc; /* XXX */
|
||||
coproc_init (cp);
|
||||
|
||||
cp->c_name = savestring (name);
|
||||
@@ -1463,6 +1640,13 @@ coproc_dispose (cp)
|
||||
coproc_init (cp);
|
||||
}
|
||||
|
||||
/* Placeholder for now. */
|
||||
void
|
||||
coproc_flush ()
|
||||
{
|
||||
coproc_dispose (&sh_coproc);
|
||||
}
|
||||
|
||||
void
|
||||
coproc_close (cp)
|
||||
struct coproc *cp;
|
||||
@@ -1480,6 +1664,12 @@ coproc_close (cp)
|
||||
cp->c_rsave = cp->c_wsave = -1;
|
||||
}
|
||||
|
||||
void
|
||||
coproc_closeall ()
|
||||
{
|
||||
coproc_close (&sh_coproc);
|
||||
}
|
||||
|
||||
void
|
||||
coproc_rclose (cp, fd)
|
||||
struct coproc *cp;
|
||||
@@ -1505,7 +1695,7 @@ coproc_wclose (cp, fd)
|
||||
}
|
||||
|
||||
void
|
||||
coproc_fdchk (cp, fd)
|
||||
coproc_checkfd (cp, fd)
|
||||
struct coproc *cp;
|
||||
int fd;
|
||||
{
|
||||
@@ -1520,6 +1710,13 @@ coproc_fdchk (cp, fd)
|
||||
coproc_setvars (cp);
|
||||
}
|
||||
|
||||
void
|
||||
coproc_fdchk (fd)
|
||||
int fd;
|
||||
{
|
||||
coproc_checkfd (&sh_coproc, fd);
|
||||
}
|
||||
|
||||
void
|
||||
coproc_fdclose (cp, fd)
|
||||
struct coproc *cp;
|
||||
@@ -1530,7 +1727,6 @@ coproc_fdclose (cp, fd)
|
||||
coproc_setvars (cp);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
coproc_fdsave (cp)
|
||||
struct coproc *cp;
|
||||
@@ -1554,6 +1750,10 @@ coproc_pidchk (pid)
|
||||
struct coproc *cp;
|
||||
|
||||
cp = getcoprocbypid (pid);
|
||||
#if 0
|
||||
if (cp)
|
||||
itrace("coproc_pidchk: pid %d has died", pid);
|
||||
#endif
|
||||
if (cp)
|
||||
coproc_dispose (cp);
|
||||
}
|
||||
@@ -1649,6 +1849,7 @@ execute_coproc (command, pipe_in, pipe_out, fds_to_close)
|
||||
Coproc *cp;
|
||||
char *tcmd;
|
||||
|
||||
/* XXX -- will require changes to handle multiple coprocs */
|
||||
if (sh_coproc.c_pid != NO_PID)
|
||||
{
|
||||
#if 0
|
||||
@@ -1687,7 +1888,7 @@ execute_coproc (command, pipe_in, pipe_out, fds_to_close)
|
||||
|
||||
coproc_setvars (cp);
|
||||
|
||||
#if defined (DEBUG)
|
||||
#if 0
|
||||
itrace ("execute_coproc: [%d] %s", coproc_pid, the_printed_command);
|
||||
#endif
|
||||
|
||||
@@ -1854,6 +2055,7 @@ execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close)
|
||||
tc->flags |= CMD_STDIN_REDIR;
|
||||
|
||||
exec_result = execute_command_internal (tc, 1, pipe_in, pipe_out, fds_to_close);
|
||||
QUIT;
|
||||
|
||||
if (tc->flags & CMD_STDIN_REDIR)
|
||||
tc->flags &= ~CMD_STDIN_REDIR;
|
||||
@@ -1878,12 +2080,14 @@ execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close)
|
||||
if (command->value.Connection->second)
|
||||
command->value.Connection->second->flags |= CMD_IGNORE_RETURN;
|
||||
}
|
||||
executing_list++;
|
||||
QUIT;
|
||||
execute_command (command->value.Connection->first);
|
||||
QUIT;
|
||||
exec_result = execute_command_internal (command->value.Connection->second,
|
||||
asynchronous, pipe_in, pipe_out,
|
||||
fds_to_close);
|
||||
executing_list--;
|
||||
break;
|
||||
|
||||
case '|':
|
||||
@@ -3014,7 +3218,7 @@ execute_null_command (redirects, pipe_in, pipe_out, async)
|
||||
do_piping (pipe_in, pipe_out);
|
||||
|
||||
#if defined (COPROCESS_SUPPORT)
|
||||
coproc_close (&sh_coproc);
|
||||
coproc_closeall ();
|
||||
#endif
|
||||
|
||||
subshell_environment = 0;
|
||||
@@ -3220,7 +3424,7 @@ execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close)
|
||||
do_piping (pipe_in, pipe_out);
|
||||
pipe_in = pipe_out = NO_PIPE;
|
||||
#if defined (COPROCESS_SUPPORT)
|
||||
coproc_close (&sh_coproc);
|
||||
coproc_closeall ();
|
||||
#endif
|
||||
|
||||
last_asynchronous_pid = old_last_async_pid;
|
||||
@@ -4304,6 +4508,8 @@ initialize_subshell ()
|
||||
/* We're no longer inside a shell function. */
|
||||
variable_context = return_catch_flag = 0;
|
||||
|
||||
executing_list = 0; /* XXX */
|
||||
|
||||
/* If we're not interactive, close the file descriptor from which we're
|
||||
reading the current shell script. */
|
||||
if (interactive_shell == 0)
|
||||
@@ -4345,6 +4551,7 @@ shell_execve (command, args, env)
|
||||
SETOSTYPE (0); /* Some systems use for USG/POSIX semantics */
|
||||
execve (command, args, env);
|
||||
i = errno; /* error from execve() */
|
||||
CHECK_TERMSIG;
|
||||
SETOSTYPE (1);
|
||||
|
||||
/* If we get to this point, then start checking out the file.
|
||||
|
||||
@@ -145,6 +145,7 @@ extern int subshell_environment, line_number;
|
||||
extern int posixly_correct, shell_level;
|
||||
extern int last_command_exit_value, last_command_exit_signal;
|
||||
extern int loop_level, breaking;
|
||||
extern int executing_list;
|
||||
extern int sourcelevel;
|
||||
extern int running_trap;
|
||||
extern sh_builtin_func_t *this_shell_builtin;
|
||||
@@ -2525,7 +2526,7 @@ if (job == NO_JOB)
|
||||
or until loop, act as if the shell received SIGINT as
|
||||
well, so the loop can be broken. This doesn't call the
|
||||
SIGINT signal handler; maybe it should. */
|
||||
if (signal_is_trapped (SIGINT) == 0 && loop_level)
|
||||
if (signal_is_trapped (SIGINT) == 0 && (loop_level || (shell_compatibility_level > 32 && executing_list)))
|
||||
ADDINTERRUPT;
|
||||
else
|
||||
{
|
||||
@@ -3834,6 +3835,7 @@ give_terminal_to (pgrp, force)
|
||||
|
||||
if (r == -1)
|
||||
errno = e;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
#include "bashintl.h"
|
||||
#include "shell.h"
|
||||
#include "jobs.h"
|
||||
#include "execute_cmd.h"
|
||||
#include "flags.h"
|
||||
|
||||
#include "builtins/builtext.h"
|
||||
@@ -144,6 +145,7 @@ extern int subshell_environment, line_number;
|
||||
extern int posixly_correct, shell_level;
|
||||
extern int last_command_exit_value, last_command_exit_signal;
|
||||
extern int loop_level, breaking;
|
||||
extern int executing_list;
|
||||
extern int sourcelevel;
|
||||
extern int running_trap;
|
||||
extern sh_builtin_func_t *this_shell_builtin;
|
||||
@@ -2524,7 +2526,7 @@ if (job == NO_JOB)
|
||||
or until loop, act as if the shell received SIGINT as
|
||||
well, so the loop can be broken. This doesn't call the
|
||||
SIGINT signal handler; maybe it should. */
|
||||
if (signal_is_trapped (SIGINT) == 0 && loop_level)
|
||||
if (signal_is_trapped (SIGINT) == 0 && (loop_level || executing_list))
|
||||
ADDINTERRUPT;
|
||||
else
|
||||
{
|
||||
@@ -3833,6 +3835,7 @@ give_terminal_to (pgrp, force)
|
||||
|
||||
if (r == -1)
|
||||
errno = e;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgstr ""
|
||||
"Project-Id-Version: bash 4.0-pre1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2008-08-25 11:13-0400\n"
|
||||
"PO-Revision-Date: 2008-09-10 22:16+0200\n"
|
||||
"PO-Revision-Date: 2008-09-14 22:01+0200\n"
|
||||
"Last-Translator: Nils Naumann <nnau@gmx.net>\n"
|
||||
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -50,12 +50,12 @@ msgstr ""
|
||||
#: bashline.c:3268
|
||||
#, c-format
|
||||
msgid "%s: first non-whitespace character is not `\"'"
|
||||
msgstr ""
|
||||
msgstr "%s: Das erste nicht Leerzeichen ist nicht `\\'."
|
||||
|
||||
#: bashline.c:3297
|
||||
#, c-format
|
||||
msgid "no closing `%c' in %s"
|
||||
msgstr ""
|
||||
msgstr "fehlende schließende `%c' in %s."
|
||||
|
||||
#: bashline.c:3331
|
||||
#, c-format
|
||||
@@ -65,17 +65,17 @@ msgstr "%s: Fehlender Doppelpunkt."
|
||||
#: builtins/bind.def:199
|
||||
#, c-format
|
||||
msgid "`%s': invalid keymap name"
|
||||
msgstr ""
|
||||
msgstr "`%s': Ungültiger KEYMAP Name."
|
||||
|
||||
#: builtins/bind.def:238
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "%s: cannot read: %s"
|
||||
msgstr "%s: Kann die Datei %s nicht erzeugen."
|
||||
msgstr "%s: Nicht lesbar: %s"
|
||||
|
||||
#: builtins/bind.def:253
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "`%s': cannot unbind"
|
||||
msgstr "%s: Kommando nicht gefunden."
|
||||
msgstr "`%s': Bindung kann nicht gelöst werden."
|
||||
|
||||
#: builtins/bind.def:288 builtins/bind.def:318
|
||||
#, c-format
|
||||
@@ -90,11 +90,11 @@ msgstr "%s ist keiner Taste zugeordnet.\n"
|
||||
#: builtins/bind.def:300
|
||||
#, c-format
|
||||
msgid "%s can be invoked via "
|
||||
msgstr ""
|
||||
msgstr "%s kann aufgerufen werden durch "
|
||||
|
||||
#: builtins/break.def:77 builtins/break.def:117
|
||||
msgid "loop count"
|
||||
msgstr ""
|
||||
msgstr "Schleifen Zähler"
|
||||
|
||||
#: builtins/break.def:137
|
||||
msgid "only meaningful in a `for', `while', or `until' loop"
|
||||
@@ -117,7 +117,7 @@ msgstr "Zeile %d: "
|
||||
#: builtins/common.c:124
|
||||
#, c-format
|
||||
msgid "%s: usage: "
|
||||
msgstr ""
|
||||
msgstr "%s: Gebrauch: "
|
||||
|
||||
#: builtins/common.c:137 test.c:822
|
||||
msgid "too many arguments"
|
||||
@@ -173,7 +173,7 @@ msgstr "%s: Ung
|
||||
#: builtins/common.c:228
|
||||
#, c-format
|
||||
msgid "`%s': not a pid or valid job spec"
|
||||
msgstr ""
|
||||
msgstr "`%s': Ist keine gültige Prozess- oder Jobbezeichnung."
|
||||
|
||||
#: builtins/common.c:235 error.c:453
|
||||
#, c-format
|
||||
@@ -197,7 +197,7 @@ msgstr "%s ist au
|
||||
#: builtins/common.c:253
|
||||
#, c-format
|
||||
msgid "%s: no such job"
|
||||
msgstr ""
|
||||
msgstr "%s: Kein solche Job."
|
||||
|
||||
#: builtins/common.c:261
|
||||
#, c-format
|
||||
@@ -211,16 +211,16 @@ msgstr "Keine Job Steuerung in dieser Shell."
|
||||
#: builtins/common.c:273
|
||||
#, c-format
|
||||
msgid "%s: restricted"
|
||||
msgstr ""
|
||||
msgstr "%s: gesperrt"
|
||||
|
||||
#: builtins/common.c:275
|
||||
msgid "restricted"
|
||||
msgstr ""
|
||||
msgstr "gesperrt"
|
||||
|
||||
#: builtins/common.c:283
|
||||
#, c-format
|
||||
msgid "%s: not a shell builtin"
|
||||
msgstr ""
|
||||
msgstr "%s: Ist kein Shell Kommando."
|
||||
|
||||
#: builtins/common.c:292
|
||||
#, c-format
|
||||
@@ -230,12 +230,12 @@ msgstr "Schreibfehler: %s."
|
||||
#: builtins/common.c:523
|
||||
#, c-format
|
||||
msgid "%s: error retrieving current directory: %s: %s\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Kann das nicht aktuelle Verzeichnis wiederfinden: %s: %s\n"
|
||||
|
||||
#: builtins/common.c:589 builtins/common.c:591
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "%s: ambiguous job spec"
|
||||
msgstr "%s: Mehrdeutige Umlenkung."
|
||||
msgstr "%s: Mehrdeutige Job Bezeichnung."
|
||||
|
||||
#: builtins/complete.def:270
|
||||
#, c-format
|
||||
@@ -261,13 +261,12 @@ msgid "not currently executing completion function"
|
||||
msgstr ""
|
||||
|
||||
#: builtins/declare.def:122
|
||||
#, fuzzy
|
||||
msgid "can only be used in a function"
|
||||
msgstr "kann nur innerhalb einer Funktion benutzt werden."
|
||||
|
||||
#: builtins/declare.def:353
|
||||
msgid "cannot use `-f' to make functions"
|
||||
msgstr ""
|
||||
msgstr "Mit `-f' können keine Funktionen erzeugt werden."
|
||||
|
||||
#: builtins/declare.def:365 execute_cmd.c:4696
|
||||
#, c-format
|
||||
@@ -289,9 +288,9 @@ msgid "dynamic loading not available"
|
||||
msgstr ""
|
||||
|
||||
#: builtins/enable.def:312
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "cannot open shared object %s: %s"
|
||||
msgstr "Kann die benannte Pipe %s für %s nicht öffnen: %s."
|
||||
msgstr ""
|
||||
|
||||
#: builtins/enable.def:335
|
||||
#, c-format
|
||||
@@ -322,7 +321,7 @@ msgstr "%s: Ist keine normale Datei."
|
||||
#: builtins/evalfile.c:147
|
||||
#, c-format
|
||||
msgid "%s: file is too large"
|
||||
msgstr ""
|
||||
msgstr "%s: Die Datei ist zu groß."
|
||||
|
||||
#: builtins/evalfile.c:185 execute_cmd.c:4623 shell.c:1449
|
||||
#, c-format
|
||||
@@ -335,9 +334,9 @@ msgid "%s: cannot execute: %s"
|
||||
msgstr "%s: Kann nicht ausführen: %s"
|
||||
|
||||
#: builtins/exit.def:65
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "logout\n"
|
||||
msgstr "Abmelden\n"
|
||||
msgstr "Abgemeldet\n"
|
||||
|
||||
#: builtins/exit.def:88
|
||||
msgid "not login shell: use `exit'"
|
||||
@@ -373,7 +372,7 @@ msgstr ""
|
||||
#: builtins/fg_bg.def:158
|
||||
#, c-format
|
||||
msgid "job %d started without job control"
|
||||
msgstr ""
|
||||
msgstr "Job %d wurde ohne Jobsteuerung gestartet."
|
||||
|
||||
#: builtins/getopt.c:110
|
||||
#, c-format
|
||||
@@ -447,21 +446,21 @@ msgstr ""
|
||||
#: builtins/history.def:366
|
||||
#, c-format
|
||||
msgid "%s: history expansion failed"
|
||||
msgstr ""
|
||||
msgstr "%s: History Substitution gescheitert."
|
||||
|
||||
#: builtins/inlib.def:71
|
||||
#, c-format
|
||||
msgid "%s: inlib failed"
|
||||
msgstr ""
|
||||
msgstr "%s: inlib gescheitert."
|
||||
|
||||
#: builtins/jobs.def:109
|
||||
msgid "no other options allowed with `-x'"
|
||||
msgstr ""
|
||||
msgstr "Keine weiteren Optionen mit `-x' erlaubt."
|
||||
|
||||
#: builtins/kill.def:197
|
||||
#, c-format
|
||||
msgid "%s: arguments must be process or job IDs"
|
||||
msgstr ""
|
||||
msgstr "%s: Die Argumente müssen Prozess- oder Jobbezeichnungen sein."
|
||||
|
||||
#: builtins/kill.def:260
|
||||
msgid "Unknown error"
|
||||
@@ -714,9 +713,8 @@ msgstr ""
|
||||
|
||||
# logout
|
||||
#: builtins/suspend.def:111
|
||||
#, fuzzy
|
||||
msgid "cannot suspend a login shell"
|
||||
msgstr "Beendet eine Loginshell."
|
||||
msgstr "Kann die Loginshell nicht unterbrechen."
|
||||
|
||||
#: builtins/type.def:234
|
||||
#, c-format
|
||||
@@ -729,9 +727,9 @@ msgid "%s is a shell keyword\n"
|
||||
msgstr ""
|
||||
|
||||
#: builtins/type.def:274
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "%s is a function\n"
|
||||
msgstr "%s: Schreibgeschützte Funktion."
|
||||
msgstr "%s ist eine Funktion.\n"
|
||||
|
||||
#: builtins/type.def:296
|
||||
#, c-format
|
||||
@@ -754,28 +752,27 @@ msgid "%s: invalid limit argument"
|
||||
msgstr ""
|
||||
|
||||
#: builtins/ulimit.def:398
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "`%c': bad command"
|
||||
msgstr "%c%c: Falsche Option"
|
||||
msgstr "`%c': Falsches Kommando."
|
||||
|
||||
#: builtins/ulimit.def:427
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "%s: cannot get limit: %s"
|
||||
msgstr "%s: Kann die Datei %s nicht erzeugen."
|
||||
msgstr ""
|
||||
|
||||
#: builtins/ulimit.def:453
|
||||
msgid "limit"
|
||||
msgstr "Grenze"
|
||||
|
||||
#: builtins/ulimit.def:465 builtins/ulimit.def:765
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "%s: cannot modify limit: %s"
|
||||
msgstr "%s: Kann die nicht Grenze: %s ändern."
|
||||
msgstr "%s: Kann die Grenze nicht ändern: %s"
|
||||
|
||||
#: builtins/umask.def:118
|
||||
#, fuzzy
|
||||
msgid "octal number"
|
||||
msgstr "Oktale Ziffer."
|
||||
msgstr ""
|
||||
|
||||
#: builtins/umask.def:231
|
||||
#, c-format
|
||||
@@ -792,9 +789,9 @@ msgid " line "
|
||||
msgstr " Zeile "
|
||||
|
||||
#: error.c:164
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "last command: %s\n"
|
||||
msgstr "`r', das zuletzt eingegebene Kommando wiederholt."
|
||||
msgstr "Letztes Kommando: %s\n"
|
||||
|
||||
#: error.c:172
|
||||
#, c-format
|
||||
@@ -802,14 +799,13 @@ msgid "Aborting..."
|
||||
msgstr "Abbruch..."
|
||||
|
||||
#: error.c:260
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "warning: "
|
||||
msgstr "Warnung: "
|
||||
|
||||
#: error.c:405
|
||||
#, fuzzy
|
||||
msgid "unknown command error"
|
||||
msgstr "Unbekannter Fehler %d."
|
||||
msgstr ""
|
||||
|
||||
#: error.c:406
|
||||
msgid "bad command type"
|
||||
@@ -817,9 +813,8 @@ msgstr ""
|
||||
|
||||
# Programmierfehler
|
||||
#: error.c:407
|
||||
#, fuzzy
|
||||
msgid "bad connector"
|
||||
msgstr "bad connector `%d'."
|
||||
msgstr ""
|
||||
|
||||
#: error.c:408
|
||||
#, fuzzy
|
||||
@@ -832,9 +827,9 @@ msgid "%s: unbound variable"
|
||||
msgstr "%s ist nicht gesetzt."
|
||||
|
||||
#: eval.c:181
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "\atimed out waiting for input: auto-logout\n"
|
||||
msgstr "%cZu lange keine Eingabe: Automatisch ausgeloggt.\n"
|
||||
msgstr "\aZu lange keine Eingabe: Automatisch ausgeloggt.\n"
|
||||
|
||||
#: execute_cmd.c:483
|
||||
#, c-format
|
||||
@@ -1277,14 +1272,13 @@ msgid "unexpected argument to conditional unary operator"
|
||||
msgstr ""
|
||||
|
||||
#: parse.y:3871
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "unexpected token `%s', conditional binary operator expected"
|
||||
msgstr "%s: Zweistelliger (binärer) Operator erwartet."
|
||||
msgstr ""
|
||||
|
||||
#: parse.y:3875
|
||||
#, fuzzy
|
||||
msgid "conditional binary operator expected"
|
||||
msgstr "%s: Zweistelliger (binärer) Operator erwartet."
|
||||
msgstr ""
|
||||
|
||||
#: parse.y:3892
|
||||
#, c-format
|
||||
@@ -1296,19 +1290,19 @@ msgid "unexpected argument to conditional binary operator"
|
||||
msgstr ""
|
||||
|
||||
#: parse.y:3907
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "unexpected token `%c' in conditional command"
|
||||
msgstr "`:' erwartet für ein bedingten Ausdruck."
|
||||
msgstr ""
|
||||
|
||||
#: parse.y:3910
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "unexpected token `%s' in conditional command"
|
||||
msgstr "`:' erwartet für ein bedingten Ausdruck."
|
||||
msgstr ""
|
||||
|
||||
#: parse.y:3914
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "unexpected token %d in conditional command"
|
||||
msgstr "`:' erwartet für ein bedingten Ausdruck."
|
||||
msgstr ""
|
||||
|
||||
#: parse.y:5181
|
||||
#, c-format
|
||||
@@ -1316,7 +1310,7 @@ msgid "syntax error near unexpected token `%s'"
|
||||
msgstr "Syntaxfehler beim unerwarteten Wort `%s'"
|
||||
|
||||
#: parse.y:5199
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "syntax error near `%s'"
|
||||
msgstr "Syntaxfehler beim unerwarteten Wort `%s'"
|
||||
|
||||
@@ -1335,9 +1329,8 @@ msgid "Use \"%s\" to leave the shell.\n"
|
||||
msgstr "Benutze \"%s\" um die Shell zu verlassen.\n"
|
||||
|
||||
#: parse.y:5433
|
||||
#, fuzzy
|
||||
msgid "unexpected EOF while looking for matching `)'"
|
||||
msgstr "Dateiende beim Suchen nach `%c' erreicht."
|
||||
msgstr "Dateiende beim Suchen nach passender `)' erreicht."
|
||||
|
||||
#: pcomplete.c:1016
|
||||
#, c-format
|
||||
@@ -1364,33 +1357,32 @@ msgid "file descriptor out of range"
|
||||
msgstr ""
|
||||
|
||||
#: redir.c:146
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "%s: ambiguous redirect"
|
||||
msgstr "%s: Mehrdeutige Umlenkung."
|
||||
|
||||
#: redir.c:150
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "%s: cannot overwrite existing file"
|
||||
msgstr "%s: Kann existierende Datei nicht überschreiben."
|
||||
|
||||
#: redir.c:155
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "%s: restricted: cannot redirect output"
|
||||
msgstr "%s: Verboten: `/' ist in Kommandonamen unzulässig."
|
||||
msgstr "%s: Gesperrt: Die Ausgabe darf nicht umgeleitet werden."
|
||||
|
||||
#: redir.c:160
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "cannot create temp file for here-document: %s"
|
||||
msgstr "Kann keine Pipe für die Prozeßersetzung erzeugen: %s."
|
||||
msgstr ""
|
||||
|
||||
#: redir.c:515
|
||||
msgid "/dev/(tcp|udp)/host/port not supported without networking"
|
||||
msgstr ""
|
||||
|
||||
#: redir.c:992
|
||||
#, fuzzy
|
||||
msgid "redirection error: cannot duplicate fd"
|
||||
msgstr "Umlenkfehler"
|
||||
msgstr ""
|
||||
|
||||
#: shell.c:328
|
||||
msgid "could not find /tmp, please create!"
|
||||
@@ -1401,9 +1393,9 @@ msgid "/tmp must be a valid directory name"
|
||||
msgstr "/tmp muß ein gültiger Verzeichnisname sein."
|
||||
|
||||
#: shell.c:876
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "%c%c: invalid option"
|
||||
msgstr "%c%c: Falsche Option"
|
||||
msgstr "%c%c: Ungültige Option"
|
||||
|
||||
#: shell.c:1637
|
||||
msgid "I have no name!"
|
||||
@@ -1431,9 +1423,7 @@ msgstr "Lange GNU Optionen:\n"
|
||||
msgid "Shell options:\n"
|
||||
msgstr "Shell-Optionen:\n"
|
||||
|
||||
# Was passiert hier?
|
||||
#: shell.c:1785
|
||||
#, fuzzy
|
||||
msgid "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n"
|
||||
msgstr "\t-irsD oder -c Kommando\t\t(Nur Aufruf)\n"
|
||||
|
||||
@@ -1501,9 +1491,8 @@ msgid "Floating point exception"
|
||||
msgstr "Gleitkommafehler"
|
||||
|
||||
#: siglist.c:86
|
||||
#, fuzzy
|
||||
msgid "Killed"
|
||||
msgstr "Abgebrochen"
|
||||
msgstr "Gekillt"
|
||||
|
||||
#: siglist.c:90
|
||||
msgid "Bus error"
|
||||
@@ -1649,40 +1638,36 @@ msgid "cannot make pipe for process substitution"
|
||||
msgstr "Kann keine Pipe für die Prozeßersetzung erzeugen."
|
||||
|
||||
#: subst.c:4496
|
||||
#, fuzzy
|
||||
msgid "cannot make child for process substitution"
|
||||
msgstr "Kann keinen Prozeß zum Ersetzen erzeugen: %s."
|
||||
msgstr ""
|
||||
|
||||
#: subst.c:4541
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "cannot open named pipe %s for reading"
|
||||
msgstr "Kann die benannte Pipe %s für %s nicht öffnen: %s."
|
||||
msgstr "Kann nicht die benannte Pipe %s zum lesen öffnen."
|
||||
|
||||
#: subst.c:4543
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "cannot open named pipe %s for writing"
|
||||
msgstr "Kann die benannte Pipe %s für %s nicht öffnen: %s."
|
||||
msgstr "Kann nicht die benannte Pipe %s zum schreiben öffnen."
|
||||
|
||||
#: subst.c:4561
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "cannot duplicate named pipe %s as fd %d"
|
||||
msgstr "Kann die benannte Pipe %s nicht auf fd %d verdoppeln: %s."
|
||||
msgstr "Kann die benannte Pipe %s nicht auf fd %d."
|
||||
|
||||
#: subst.c:4757
|
||||
#, fuzzy
|
||||
msgid "cannot make pipe for command substitution"
|
||||
msgstr "Kann keine Pipes für Kommandoersetzung erzeugen: %s."
|
||||
msgstr "Kann keine Pipes für Kommandoersetzung erzeugen."
|
||||
|
||||
#: subst.c:4791
|
||||
#, fuzzy
|
||||
msgid "cannot make child for command substitution"
|
||||
msgstr "Kann keinen Prozeß für die Kommandoersetzung erzeugen: %s."
|
||||
msgstr "Kann keinen Unterprozess für die Kommandoersetzung erzeugen."
|
||||
|
||||
# interner Fehler
|
||||
#: subst.c:4808
|
||||
#, fuzzy
|
||||
msgid "command_substitute: cannot duplicate pipe as fd 1"
|
||||
msgstr "Kommandoersetzung: Kann Pipe nicht als fd 1 duplizieren: %s."
|
||||
msgstr "Kommandoersetzung: Kann Pipe nicht als fd 1 duplizieren."
|
||||
|
||||
#: subst.c:5310
|
||||
#, c-format
|
||||
@@ -1706,14 +1691,14 @@ msgid "$%s: cannot assign in this way"
|
||||
msgstr "$%s: Kann so nicht zuweisen."
|
||||
|
||||
#: subst.c:7441
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "bad substitution: no closing \"`\" in %s"
|
||||
msgstr "Falsche Ersetzung: Keine schließende `}' in %s."
|
||||
msgstr "Falsche Ersetzung: Keine schließende \"`\" in %s."
|
||||
|
||||
#: subst.c:8314
|
||||
#, c-format
|
||||
msgid "no match: %s"
|
||||
msgstr ""
|
||||
msgstr "Keine Entsprechung: %s"
|
||||
|
||||
#: test.c:145
|
||||
msgid "argument expected"
|
||||
@@ -1748,9 +1733,8 @@ msgid "missing `]'"
|
||||
msgstr "Fehlende `]'"
|
||||
|
||||
#: trap.c:200
|
||||
#, fuzzy
|
||||
msgid "invalid signal number"
|
||||
msgstr "Falsche Signalnummer."
|
||||
msgstr "Ungültige Signalnummer."
|
||||
|
||||
#: trap.c:323
|
||||
#, c-format
|
||||
@@ -1764,7 +1748,7 @@ msgstr ""
|
||||
|
||||
# Programmierfehler
|
||||
#: trap.c:371
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "trap_handler: bad signal %d"
|
||||
msgstr "trap_handler: Falsches Signal %d."
|
||||
|
||||
@@ -1965,9 +1949,8 @@ msgid "exit [n]"
|
||||
msgstr "exit [n]"
|
||||
|
||||
#: builtins.c:100
|
||||
#, fuzzy
|
||||
msgid "logout [n]"
|
||||
msgstr "logout"
|
||||
msgstr "logout [n]"
|
||||
|
||||
#: builtins.c:103
|
||||
msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]"
|
||||
@@ -2057,9 +2040,7 @@ msgstr "test [Ausdruck]"
|
||||
msgid "[ arg... ]"
|
||||
msgstr "[ Argument... ]"
|
||||
|
||||
# Warum das übersetzen?
|
||||
#: builtins.c:162
|
||||
#, fuzzy
|
||||
msgid "times"
|
||||
msgstr "times"
|
||||
|
||||
@@ -2182,7 +2163,6 @@ msgid "mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c
|
||||
msgstr ""
|
||||
|
||||
#: builtins.c:250
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Define or display aliases.\n"
|
||||
" \n"
|
||||
@@ -2213,9 +2193,8 @@ msgstr ""
|
||||
" Options:\n"
|
||||
" -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"
|
||||
" defined."
|
||||
" Rückgabewert:\n"
|
||||
" Meldet Erfolg, außer wenn NAME nicht existiert."
|
||||
|
||||
#: builtins.c:272
|
||||
msgid ""
|
||||
|
||||
@@ -56,6 +56,7 @@ extern int last_command_exit_value;
|
||||
extern int last_command_exit_signal;
|
||||
extern int return_catch_flag;
|
||||
extern int loop_level, continuing, breaking;
|
||||
extern int executing_list;
|
||||
extern int parse_and_execute_level, shell_initialized;
|
||||
|
||||
/* Non-zero after SIGINT. */
|
||||
@@ -365,7 +366,7 @@ top_level_cleanup ()
|
||||
#endif /* PROCESS_SUBSTITUTION */
|
||||
|
||||
run_unwind_protects ();
|
||||
loop_level = continuing = breaking = 0;
|
||||
loop_level = continuing = breaking = executing_list = 0;
|
||||
return_catch_flag = 0;
|
||||
}
|
||||
|
||||
@@ -416,7 +417,7 @@ throw_to_top_level ()
|
||||
#endif /* PROCESS_SUBSTITUTION */
|
||||
|
||||
run_unwind_protects ();
|
||||
loop_level = continuing = breaking = 0;
|
||||
loop_level = continuing = breaking = executing_list = 0;
|
||||
return_catch_flag = 0;
|
||||
|
||||
if (interactive && print_newline)
|
||||
|
||||
Reference in New Issue
Block a user