From 22e63b05c844e8bc57786e8085f59c47e1728ebe Mon Sep 17 00:00:00 2001 From: Chet Ramey Date: Sat, 3 Dec 2011 13:37:00 -0500 Subject: [PATCH] commit bash-20040923 snapshot --- CWRU/CWRU.chlog | 43 + CWRU/CWRU.chlog~ | 44 + builtins/kill.def | 4 +- builtins/reserved.def | 10 +- command.h | 3 + command.h~ | 337 ++ doc/bash.0 | 1141 +++--- doc/bash.1 | 8 +- doc/bash.1~ | 14 +- doc/bash.html | 16 +- doc/bash.ps | 2486 ++++++------- doc/bashref.dvi | Bin 581772 -> 582000 bytes doc/bashref.html | 22 +- doc/bashref.info | 276 +- doc/bashref.log | 22 +- doc/bashref.ps | 283 +- doc/bashref.texi | 4 +- doc/bashref.texi~ | 4 +- doc/builtins.0 | 1081 +++--- doc/builtins.ps | 486 +-- doc/rbash.ps | 2 +- execute_cmd.c | 18 +- execute_cmd.c~ | 37 +- general.c | 59 +- general.c~ | 56 +- general.h | 1 + general.h~ | 314 ++ jobs.c | 4 +- jobs.c~ | 19 +- lib/tilde/tilde.c | 33 + lib/tilde/tilde.c~ | 489 +++ lib/tilde/tilde.h | 3 + lib/tilde/tilde.h~ | 81 + po/bash.pot | 575 +-- po/en@boldquot.gmo | Bin 120143 -> 117385 bytes po/en@boldquot.po | 781 +++-- po/en@boldquot.po~ | 4349 +++++++++++++++++++++++ po/en@quot.gmo | Bin 118583 -> 115881 bytes po/en@quot.po | 781 +++-- po/en@quot.po~ | 4283 +++++++++++++++++++++++ subst.c | 220 +- subst.c.orig | 268 +- subst.c.save1 | 223 +- subst.c.save2 | 7700 +++++++++++++++++++++++++++++++++++++++++ subst.c~ | 221 +- subst.h | 3 + subst.h~ | 6 + tests/errors.right | 2 +- tests/errors.right~ | 2 +- tests/more-exp.right | 18 +- tests/more-exp.right~ | 214 ++ tests/more-exp.tests | 5 +- tests/more-exp.tests~ | 501 +++ 53 files changed, 23343 insertions(+), 4209 deletions(-) create mode 100644 command.h~ create mode 100644 general.h~ create mode 100644 lib/tilde/tilde.c~ create mode 100644 lib/tilde/tilde.h~ create mode 100644 po/en@boldquot.po~ create mode 100644 po/en@quot.po~ create mode 100644 subst.c.save2 create mode 100644 tests/more-exp.right~ create mode 100644 tests/more-exp.tests~ diff --git a/CWRU/CWRU.chlog b/CWRU/CWRU.chlog index ae6b1ff3b..63804b23d 100644 --- a/CWRU/CWRU.chlog +++ b/CWRU/CWRU.chlog @@ -10112,3 +10112,46 @@ bashline.c directory under certain circumstances: a single instance found in $PATH when `.' is not in $PATH, and multiple instances found in the $PATH, even when `.' is in the $PATH + + 9/24 + ---- +command.h + - new word flag: W_ASSIGNRHS, means word is rhs of assignment statement + - new word flag: W_NOTILDE, means word is not to be tilde expanded + - new word flag (internal): W_ITILDE, means the next character is a + tilde that should be expanded + +general.c + - new set of tilde suffixes for use when parsing the RHS of an + assignment statement and =~ should not be subject to tilde expansion + - if ASSIGN_P argument to bash_tilde_expand is 2, use tilde prefixes + for parsing RHS of assignment statement + +general.[ch] + - new function bash_tilde_find_word, drop-in replacement for + tilde_find_word + +subst.c + - call bash_tilde_expand with secord argument of 2 when expanding rhs + of an assignment statement, so tildes after second and subsequent + `=' in an assignment are not expanded + - new function, expand_string_assignment, to expand the rhs of an + assignment statement + - add `~' to EXP_CHAR, the characters that will cause the word + expansion functions to be called + - move tilde expansion into expand_word_internal instead of many + different calls to bash_tilde_expand scattered across different + functions. NOTE: This means that double quotes surrounding a + {paramOPword} expansion will cause tilde expansion to NOT be + performed on `word'. I think this is right, what POSIX specifies, + and consistent with the behavior of other characters in the rhs + +execute_cmd.c + - take out calls to bash_tilde_expand before calling word expansion + functions + + 9/26 + ---- +execute_cmd.c + - make sure to call UNBLOCK_CHILD before returning on a pipe creation + failure in execute_pipeline diff --git a/CWRU/CWRU.chlog~ b/CWRU/CWRU.chlog~ index 81ca37a51..a65e1eaa9 100644 --- a/CWRU/CWRU.chlog~ +++ b/CWRU/CWRU.chlog~ @@ -10105,3 +10105,47 @@ lib/readline/complete.c - change append_to_match so that a non-zero value for rl_completion_suppress_append will cause no `/' to be appended to a directory name + +bashline.c + - experimental change to suppress appending a slash for a completed + filename that is found in PATH as well as a directory in the current + directory under certain circumstances: a single instance found in + $PATH when `.' is not in $PATH, and multiple instances found in the + $PATH, even when `.' is in the $PATH + + 9/24 + ---- +command.h + - new word flag: W_ASSIGNRHS, means word is rhs of assignment statement + - new word flag: W_NOTILDE, means word is not to be tilde expanded + - new word flag (internal): W_ITILDE, means the next character is a + tilde that should be expanded + +general.c + - new set of tilde suffixes for use when parsing the RHS of an + assignment statement and =~ should not be subject to tilde expansion + - if ASSIGN_P argument to bash_tilde_expand is 2, use tilde prefixes + for parsing RHS of assignment statement + +general.[ch] + - new function bash_tilde_find_word, drop-in replacement for + tilde_find_word + +subst.c + - call bash_tilde_expand with secord argument of 2 when expanding rhs + of an assignment statement, so tildes after second and subsequent + `=' in an assignment are not expanded + - new function, expand_string_assignment, to expand the rhs of an + assignment statement + - add `~' to EXP_CHAR, the characters that will cause the word + expansion functions to be called + - move tilde expansion into expand_word_internal instead of many + different calls to bash_tilde_expand scattered across different + functions. NOTE: This means that double quotes surrounding a + {paramOPword} expansion will cause tilde expansion to NOT be + performed on `word'. I think this is right, what POSIX specifies, + and consistent with the behavior of other characters in the rhs + +execute_cmd.c + - take out calls to bash_tilde_expand before calling word expansion + functions diff --git a/builtins/kill.def b/builtins/kill.def index d1b9f6daa..259801336 100644 --- a/builtins/kill.def +++ b/builtins/kill.def @@ -23,8 +23,8 @@ $PRODUCES kill.c $BUILTIN kill $FUNCTION kill_builtin -$SHORT_DOC kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l [sigspec] -Send the processes named by PID (or JOB) the signal SIGSPEC. If +$SHORT_DOC kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec] +Send the processes named by PID (or JOBSPEC) the signal SIGSPEC. If SIGSPEC is not present, then SIGTERM is assumed. An argument of `-l' lists the signal names; if arguments follow `-l' they are assumed to be signal numbers for which names should be listed. Kill is a shell diff --git a/builtins/reserved.def b/builtins/reserved.def index 47846bb31..870f85892 100644 --- a/builtins/reserved.def +++ b/builtins/reserved.def @@ -109,10 +109,12 @@ $END $BUILTIN % $DOCNAME fg_percent -$SHORT_DOC %JOBSPEC [&] -This is similar to the `fg' command. Resume a stopped or background -job specified by %JOBSPEC. Following the job specification with a `&' -places the job in the background. +$SHORT_DOC JOB_SPEC [&] +Equivalent to the JOB_SPEC argument to the `fg' command. Resume a +stopped or background job. JOB_SPEC can specify either a job name +or a job number. Following JOB_SPEC with a `&' places the job in +the background, as if the job specification had been supplied as an +argument to `bg'. $END $BUILTIN (( ... )) diff --git a/command.h b/command.h index 0e1375dc7..8d05376fb 100644 --- a/command.h +++ b/command.h @@ -78,6 +78,9 @@ enum command_type { cm_for, cm_case, cm_while, cm_if, cm_simple, cm_select, #define W_DOLLARAT 0x0100 /* $@ and its special handling */ #define W_DOLLARSTAR 0x0200 /* $* and its special handling */ #define W_NOCOMSUB 0x0400 /* Don't perform command substitution on this word */ +#define W_ASSIGNRHS 0x0800 /* Word is rhs of an assignment statement */ +#define W_NOTILDE 0x1000 /* Don't perform tilde expansion on this word */ +#define W_ITILDE 0x2000 /* Internal flag for word expansion */ /* Possible values for subshell_environment */ #define SUBSHELL_ASYNC 0x01 /* subshell caused by `command &' */ diff --git a/command.h~ b/command.h~ new file mode 100644 index 000000000..83aeea0d7 --- /dev/null +++ b/command.h~ @@ -0,0 +1,337 @@ +/* command.h -- The structures used internally to represent commands, and + the extern declarations of the functions used to create them. */ + +/* Copyright (C) 1993 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 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. */ + +#if !defined (_COMMAND_H_) +#define _COMMAND_H_ + +#include "stdc.h" + +/* Instructions describing what kind of thing to do for a redirection. */ +enum r_instruction { + r_output_direction, r_input_direction, r_inputa_direction, + r_appending_to, r_reading_until, r_reading_string, + r_duplicating_input, r_duplicating_output, r_deblank_reading_until, + r_close_this, r_err_and_out, r_input_output, r_output_force, + r_duplicating_input_word, r_duplicating_output_word, + r_move_input, r_move_output, r_move_input_word, r_move_output_word +}; + +/* Redirection errors. */ +#define AMBIGUOUS_REDIRECT -1 +#define NOCLOBBER_REDIRECT -2 +#define RESTRICTED_REDIRECT -3 /* can only happen in restricted shells. */ +#define HEREDOC_REDIRECT -4 /* here-doc temp file can't be created */ + +#define CLOBBERING_REDIRECT(ri) \ + (ri == r_output_direction || ri == r_err_and_out) + +#define OUTPUT_REDIRECT(ri) \ + (ri == r_output_direction || ri == r_input_output || ri == r_err_and_out) + +#define INPUT_REDIRECT(ri) \ + (ri == r_input_direction || ri == r_inputa_direction || ri == r_input_output) + +#define WRITE_REDIRECT(ri) \ + (ri == r_output_direction || \ + ri == r_input_output || \ + ri == r_err_and_out || \ + ri == r_appending_to || \ + ri == r_output_force) + +/* redirection needs translation */ +#define TRANSLATE_REDIRECT(ri) \ + (ri == r_duplicating_input_word || ri == r_duplicating_output_word || \ + ri == r_move_input_word || ri == r_move_output_word) + +/* Command Types: */ +enum command_type { cm_for, cm_case, cm_while, cm_if, cm_simple, cm_select, + cm_connection, cm_function_def, cm_until, cm_group, + cm_arith, cm_cond, cm_arith_for, cm_subshell }; + +/* Possible values for the `flags' field of a WORD_DESC. */ +#define W_HASDOLLAR 0x0001 /* Dollar sign present. */ +#define W_QUOTED 0x0002 /* Some form of quote character is present. */ +#define W_ASSIGNMENT 0x0004 /* This word is a variable assignment. */ +#define W_GLOBEXP 0x0008 /* This word is the result of a glob expansion. */ +#define W_NOSPLIT 0x0010 /* Do not perform word splitting on this word. */ +#define W_NOGLOB 0x0020 /* Do not perform globbing on this word. */ +#define W_NOSPLIT2 0x0040 /* Don't split word except for $@ expansion. */ +#define W_TILDEEXP 0x0080 /* Tilde expand this assignment word */ +#define W_DOLLARAT 0x0100 /* $@ and its special handling */ +#define W_DOLLARSTAR 0x0200 /* $* and its special handling */ +#define W_NOCOMSUB 0x0400 /* Don't perform command substitution on this word */ +#define W_ASSIGNRHS 0x0800 /* Word is rhs of an assignment statement */ +#define W_NOTILDE 0x1000 /* Don't perform tilde expansion on this word */ + +/* Possible values for subshell_environment */ +#define SUBSHELL_ASYNC 0x01 /* subshell caused by `command &' */ +#define SUBSHELL_PAREN 0x02 /* subshell caused by ( ... ) */ +#define SUBSHELL_COMSUB 0x04 /* subshell caused by `command` or $(command) */ +#define SUBSHELL_FORK 0x08 /* subshell caused by executing a disk command */ +#define SUBSHELL_PIPE 0x10 /* subshell from a pipeline element */ + +/* A structure which represents a word. */ +typedef struct word_desc { + char *word; /* Zero terminated string. */ + int flags; /* Flags associated with this word. */ +} WORD_DESC; + +/* A linked list of words. */ +typedef struct word_list { + struct word_list *next; + WORD_DESC *word; +} WORD_LIST; + + +/* **************************************************************** */ +/* */ +/* Shell Command Structs */ +/* */ +/* **************************************************************** */ + +/* What a redirection descriptor looks like. If the redirection instruction + is ri_duplicating_input or ri_duplicating_output, use DEST, otherwise + use the file in FILENAME. Out-of-range descriptors are identified by a + negative DEST. */ + +typedef union { + int dest; /* Place to redirect REDIRECTOR to, or ... */ + WORD_DESC *filename; /* filename to redirect to. */ +} REDIRECTEE; + +/* Structure describing a redirection. If REDIRECTOR is negative, the parser + (or translator in redir.c) encountered an out-of-range file descriptor. */ +typedef struct redirect { + struct redirect *next; /* Next element, or NULL. */ + int redirector; /* Descriptor to be redirected. */ + int flags; /* Flag value for `open'. */ + enum r_instruction instruction; /* What to do with the information. */ + REDIRECTEE redirectee; /* File descriptor or filename */ + char *here_doc_eof; /* The word that appeared in <flags. */ +#define CMD_WANT_SUBSHELL 0x01 /* User wants a subshell: ( command ) */ +#define CMD_FORCE_SUBSHELL 0x02 /* Shell needs to force a subshell. */ +#define CMD_INVERT_RETURN 0x04 /* Invert the exit value. */ +#define CMD_IGNORE_RETURN 0x08 /* Ignore the exit value. For set -e. */ +#define CMD_NO_FUNCTIONS 0x10 /* Ignore functions during command lookup. */ +#define CMD_INHIBIT_EXPANSION 0x20 /* Do not expand the command words. */ +#define CMD_NO_FORK 0x40 /* Don't fork; just call execve */ +#define CMD_TIME_PIPELINE 0x80 /* Time a pipeline */ +#define CMD_TIME_POSIX 0x100 /* time -p; use POSIX.2 time output spec. */ +#define CMD_AMPERSAND 0x200 /* command & */ +#define CMD_STDIN_REDIR 0x400 /* async command needs implicit = 1. If _n is greater than the number of - enclosing loops, the last enclosing loop (the ``top-level'' + sseelleecctt loop. If _n is specified, resume at the _nth enclosing + loop. _n must be >= 1. If _n is greater than the number of + enclosing loops, the last enclosing loop (the ``top-level'' loop) is resumed. The return value is 0 unless the shell is not executing a loop when ccoonnttiinnuuee is executed. ddeeccllaarree [--aaffFFiirrttxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] ttyyppeesseett [--aaffFFiirrttxx] [--pp] [_n_a_m_e[=_v_a_l_u_e] ...] - Declare variables and/or give them attributes. If no _n_a_m_es are - given then display the values of variables. The --pp option will - display the attributes and values of each _n_a_m_e. When --pp is - used, additional options are ignored. The --FF option inhibits - the display of function definitions; only the function name and + Declare variables and/or give them attributes. If no _n_a_m_es are + given then display the values of variables. The --pp option will + display the attributes and values of each _n_a_m_e. When --pp is + used, additional options are ignored. The --FF option inhibits + the display of function definitions; only the function name and attributes are printed. If the eexxttddeebbuugg shell option is enabled - using sshhoopptt, the source file name and line number where the - function is defined are displayed as well. The --FF option - implies --ff. The following options can be used to restrict out- - put to variables with the specified attribute or to give vari- + using sshhoopptt, the source file name and line number where the + function is defined are displayed as well. The --FF option + implies --ff. The following options can be used to restrict out- + put to variables with the specified attribute or to give vari- ables attributes: --aa Each _n_a_m_e is an array variable (see AArrrraayyss above). --ff Use function names only. --ii The variable is treated as an integer; arithmetic evalua- - tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN )) is performed when the + tion (see AARRIITTHHMMEETTIICC EEVVAALLUUAATTIIOONN )) is performed when the variable is assigned a value. --rr Make _n_a_m_es readonly. These names cannot then be assigned values by subsequent assignment statements or unset. - --tt Give each _n_a_m_e the _t_r_a_c_e attribute. Traced functions + --tt Give each _n_a_m_e the _t_r_a_c_e attribute. Traced functions inherit the DDEEBBUUGG trap from the calling shell. The trace attribute has no special meaning for variables. - --xx Mark _n_a_m_es for export to subsequent commands via the + --xx Mark _n_a_m_es for export to subsequent commands via the environment. - Using `+' instead of `-' turns off the attribute instead, with - the exception that ++aa may not be used to destroy an array vari- - able. When used in a function, makes each _n_a_m_e local, as with - the llooccaall command. If a variable name is followed by =_v_a_l_u_e, - the value of the variable is set to _v_a_l_u_e. The return value is + Using `+' instead of `-' turns off the attribute instead, with + the exception that ++aa may not be used to destroy an array vari- + able. When used in a function, makes each _n_a_m_e local, as with + the llooccaall command. If a variable name is followed by =_v_a_l_u_e, + the value of the variable is set to _v_a_l_u_e. The return value is 0 unless an invalid option is encountered, an attempt is made to - define a function using ``-f foo=bar'', an attempt is made to - assign a value to a readonly variable, an attempt is made to - assign a value to an array variable without using the compound - assignment syntax (see AArrrraayyss above), one of the _n_a_m_e_s is not a - valid shell variable name, an attempt is made to turn off read- - only status for a readonly variable, an attempt is made to turn + define a function using ``-f foo=bar'', an attempt is made to + assign a value to a readonly variable, an attempt is made to + assign a value to an array variable without using the compound + assignment syntax (see AArrrraayyss above), one of the _n_a_m_e_s is not a + valid shell variable name, an attempt is made to turn off read- + only status for a readonly variable, an attempt is made to turn off array status for an array variable, or an attempt is made to display a non-existent function with --ff. ddiirrss [[--ccllppvv]] [[++_n]] [[--_n]] - Without options, displays the list of currently remembered - directories. The default display is on a single line with - directory names separated by spaces. Directories are added to - the list with the ppuusshhdd command; the ppooppdd command removes + Without options, displays the list of currently remembered + directories. The default display is on a single line with + directory names separated by spaces. Directories are added to + the list with the ppuusshhdd command; the ppooppdd command removes entries from the list. ++_n Displays the _nth entry counting from the left of the list shown by ddiirrss when invoked without options, starting with zero. - --_n Displays the _nth entry counting from the right of the + --_n Displays the _nth entry counting from the right of the list shown by ddiirrss when invoked without options, starting with zero. --cc Clears the directory stack by deleting all of the entries. - --ll Produces a longer listing; the default listing format + --ll Produces a longer listing; the default listing format uses a tilde to denote the home directory. --pp Print the directory stack with one entry per line. - --vv Print the directory stack with one entry per line, pre- + --vv Print the directory stack with one entry per line, pre- fixing each entry with its index in the stack. - The return value is 0 unless an invalid option is supplied or _n + The return value is 0 unless an invalid option is supplied or _n indexes beyond the end of the directory stack. ddiissoowwnn [--aarr] [--hh] [_j_o_b_s_p_e_c ...] - Without options, each _j_o_b_s_p_e_c is removed from the table of - active jobs. If the --hh option is given, each _j_o_b_s_p_e_c is not + Without options, each _j_o_b_s_p_e_c is removed from the table of + active jobs. If the --hh option is given, each _j_o_b_s_p_e_c is not removed from the table, but is marked so that SSIIGGHHUUPP is not sent - to the job if the shell receives a SSIIGGHHUUPP. If no _j_o_b_s_p_e_c is - present, and neither the --aa nor the --rr option is supplied, the - _c_u_r_r_e_n_t _j_o_b is used. If no _j_o_b_s_p_e_c is supplied, the --aa option - means to remove or mark all jobs; the --rr option without a _j_o_b_- - _s_p_e_c argument restricts operation to running jobs. The return + to the job if the shell receives a SSIIGGHHUUPP. If no _j_o_b_s_p_e_c is + present, and neither the --aa nor the --rr option is supplied, the + _c_u_r_r_e_n_t _j_o_b is used. If no _j_o_b_s_p_e_c is supplied, the --aa option + means to remove or mark all jobs; the --rr option without a _j_o_b_- + _s_p_e_c argument restricts operation to running jobs. The return value is 0 unless a _j_o_b_s_p_e_c does not specify a valid job. eecchhoo [--nneeEE] [_a_r_g ...] - Output the _a_r_gs, separated by spaces, followed by a newline. + Output the _a_r_gs, separated by spaces, followed by a newline. The return status is always 0. If --nn is specified, the trailing - newline is suppressed. If the --ee option is given, interpreta- - tion of the following backslash-escaped characters is enabled. - The --EE option disables the interpretation of these escape char- - acters, even on systems where they are interpreted by default. - The xxppgg__eecchhoo shell option may be used to dynamically determine - whether or not eecchhoo expands these escape characters by default. - eecchhoo does not interpret ---- to mean the end of options. eecchhoo + newline is suppressed. If the --ee option is given, interpreta- + tion of the following backslash-escaped characters is enabled. + The --EE option disables the interpretation of these escape char- + acters, even on systems where they are interpreted by default. + The xxppgg__eecchhoo shell option may be used to dynamically determine + whether or not eecchhoo expands these escape characters by default. + eecchhoo does not interpret ---- to mean the end of options. eecchhoo interprets the following escape sequences: \\aa alert (bell) \\bb backspace @@ -3696,188 +3701,188 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS \\tt horizontal tab \\vv vertical tab \\\\ backslash - \\00_n_n_n the eight-bit character whose value is the octal value + \\00_n_n_n the eight-bit character whose value is the octal value _n_n_n (zero to three octal digits) - \\_n_n_n the eight-bit character whose value is the octal value + \\_n_n_n the eight-bit character whose value is the octal value _n_n_n (one to three octal digits) - \\xx_H_H the eight-bit character whose value is the hexadecimal + \\xx_H_H the eight-bit character whose value is the hexadecimal value _H_H (one or two hex digits) eennaabbllee [--aaddnnppss] [--ff _f_i_l_e_n_a_m_e] [_n_a_m_e ...] - Enable and disable builtin shell commands. Disabling a builtin + Enable and disable builtin shell commands. Disabling a builtin allows a disk command which has the same name as a shell builtin - to be executed without specifying a full pathname, even though - the shell normally searches for builtins before disk commands. - If --nn is used, each _n_a_m_e is disabled; otherwise, _n_a_m_e_s are + to be executed without specifying a full pathname, even though + the shell normally searches for builtins before disk commands. + If --nn is used, each _n_a_m_e is disabled; otherwise, _n_a_m_e_s are enabled. For example, to use the tteesstt binary found via the PPAATTHH - instead of the shell builtin version, run ``enable -n test''. - The --ff option means to load the new builtin command _n_a_m_e from + instead of the shell builtin version, run ``enable -n test''. + The --ff option means to load the new builtin command _n_a_m_e from shared object _f_i_l_e_n_a_m_e, on systems that support dynamic loading. - The --dd option will delete a builtin previously loaded with --ff. + The --dd option will delete a builtin previously loaded with --ff. If no _n_a_m_e arguments are given, or if the --pp option is supplied, a list of shell builtins is printed. With no other option argu- - ments, the list consists of all enabled shell builtins. If --nn - is supplied, only disabled builtins are printed. If --aa is sup- - plied, the list printed includes all builtins, with an indica- - tion of whether or not each is enabled. If --ss is supplied, the - output is restricted to the POSIX _s_p_e_c_i_a_l builtins. The return - value is 0 unless a _n_a_m_e is not a shell builtin or there is an + ments, the list consists of all enabled shell builtins. If --nn + is supplied, only disabled builtins are printed. If --aa is sup- + plied, the list printed includes all builtins, with an indica- + tion of whether or not each is enabled. If --ss is supplied, the + output is restricted to the POSIX _s_p_e_c_i_a_l builtins. The return + value is 0 unless a _n_a_m_e is not a shell builtin or there is an error loading a new builtin from a shared object. eevvaall [_a_r_g ...] - The _a_r_gs are read and concatenated together into a single com- - mand. This command is then read and executed by the shell, and - its exit status is returned as the value of eevvaall. If there are + The _a_r_gs are read and concatenated together into a single com- + mand. This command is then read and executed by the shell, and + its exit status is returned as the value of eevvaall. If there are no _a_r_g_s, or only null arguments, eevvaall returns 0. eexxeecc [--ccll] [--aa _n_a_m_e] [_c_o_m_m_a_n_d [_a_r_g_u_m_e_n_t_s]] - If _c_o_m_m_a_n_d is specified, it replaces the shell. No new process - is created. The _a_r_g_u_m_e_n_t_s become the arguments to _c_o_m_m_a_n_d. If + If _c_o_m_m_a_n_d is specified, it replaces the shell. No new process + is created. The _a_r_g_u_m_e_n_t_s become the arguments to _c_o_m_m_a_n_d. If the --ll option is supplied, the shell places a dash at the begin- ning of the zeroth arg passed to _c_o_m_m_a_n_d. This is what _l_o_g_i_n(1) does. The --cc option causes _c_o_m_m_a_n_d to be executed with an empty - environment. If --aa is supplied, the shell passes _n_a_m_e as the - zeroth argument to the executed command. If _c_o_m_m_a_n_d cannot be - executed for some reason, a non-interactive shell exits, unless - the shell option eexxeeccffaaiill is enabled, in which case it returns - failure. An interactive shell returns failure if the file can- - not be executed. If _c_o_m_m_a_n_d is not specified, any redirections - take effect in the current shell, and the return status is 0. + environment. If --aa is supplied, the shell passes _n_a_m_e as the + zeroth argument to the executed command. If _c_o_m_m_a_n_d cannot be + executed for some reason, a non-interactive shell exits, unless + the shell option eexxeeccffaaiill is enabled, in which case it returns + failure. An interactive shell returns failure if the file can- + not be executed. If _c_o_m_m_a_n_d is not specified, any redirections + take effect in the current shell, and the return status is 0. If there is a redirection error, the return status is 1. eexxiitt [_n] - Cause the shell to exit with a status of _n. If _n is omitted, + Cause the shell to exit with a status of _n. If _n is omitted, the exit status is that of the last command executed. A trap on EEXXIITT is executed before the shell terminates. eexxppoorrtt [--ffnn] [_n_a_m_e[=_w_o_r_d]] ... eexxppoorrtt --pp - The supplied _n_a_m_e_s are marked for automatic export to the envi- - ronment of subsequently executed commands. If the --ff option is - given, the _n_a_m_e_s refer to functions. If no _n_a_m_e_s are given, or - if the --pp option is supplied, a list of all names that are - exported in this shell is printed. The --nn option causes the - export property to be removed from each _n_a_m_e. If a variable - name is followed by =_w_o_r_d, the value of the variable is set to - _w_o_r_d. eexxppoorrtt returns an exit status of 0 unless an invalid - option is encountered, one of the _n_a_m_e_s is not a valid shell + The supplied _n_a_m_e_s are marked for automatic export to the envi- + ronment of subsequently executed commands. If the --ff option is + given, the _n_a_m_e_s refer to functions. If no _n_a_m_e_s are given, or + if the --pp option is supplied, a list of all names that are + exported in this shell is printed. The --nn option causes the + export property to be removed from each _n_a_m_e. If a variable + name is followed by =_w_o_r_d, the value of the variable is set to + _w_o_r_d. eexxppoorrtt returns an exit status of 0 unless an invalid + option is encountered, one of the _n_a_m_e_s is not a valid shell variable name, or --ff is supplied with a _n_a_m_e that is not a func- tion. ffcc [--ee _e_n_a_m_e] [--nnllrr] [_f_i_r_s_t] [_l_a_s_t] ffcc --ss [_p_a_t=_r_e_p] [_c_m_d] - Fix Command. In the first form, a range of commands from _f_i_r_s_t - to _l_a_s_t is selected from the history list. _F_i_r_s_t and _l_a_s_t may - be specified as a string (to locate the last command beginning - with that string) or as a number (an index into the history + Fix Command. In the first form, a range of commands from _f_i_r_s_t + to _l_a_s_t is selected from the history list. _F_i_r_s_t and _l_a_s_t may + be specified as a string (to locate the last command beginning + with that string) or as a number (an index into the history list, where a negative number is used as an offset from the cur- rent command number). If _l_a_s_t is not specified it is set to the - current command for listing (so that ``fc -l -10'' prints the + current command for listing (so that ``fc -l -10'' prints the last 10 commands) and to _f_i_r_s_t otherwise. If _f_i_r_s_t is not spec- - ified it is set to the previous command for editing and -16 for + ified it is set to the previous command for editing and -16 for listing. - The --nn option suppresses the command numbers when listing. The - --rr option reverses the order of the commands. If the --ll option - is given, the commands are listed on standard output. Other- - wise, the editor given by _e_n_a_m_e is invoked on a file containing - those commands. If _e_n_a_m_e is not given, the value of the FFCCEEDDIITT - variable is used, and the value of EEDDIITTOORR if FFCCEEDDIITT is not set. - If neither variable is set, _v_i is used. When editing is com- + The --nn option suppresses the command numbers when listing. The + --rr option reverses the order of the commands. If the --ll option + is given, the commands are listed on standard output. Other- + wise, the editor given by _e_n_a_m_e is invoked on a file containing + those commands. If _e_n_a_m_e is not given, the value of the FFCCEEDDIITT + variable is used, and the value of EEDDIITTOORR if FFCCEEDDIITT is not set. + If neither variable is set, _v_i is used. When editing is com- plete, the edited commands are echoed and executed. - In the second form, _c_o_m_m_a_n_d is re-executed after each instance - of _p_a_t is replaced by _r_e_p. A useful alias to use with this is - ``r="fc -s"'', so that typing ``r cc'' runs the last command + In the second form, _c_o_m_m_a_n_d is re-executed after each instance + of _p_a_t is replaced by _r_e_p. A useful alias to use with this is + ``r="fc -s"'', so that typing ``r cc'' runs the last command beginning with ``cc'' and typing ``r'' re-executes the last com- mand. - If the first form is used, the return value is 0 unless an - invalid option is encountered or _f_i_r_s_t or _l_a_s_t specify history - lines out of range. If the --ee option is supplied, the return + If the first form is used, the return value is 0 unless an + invalid option is encountered or _f_i_r_s_t or _l_a_s_t specify history + lines out of range. If the --ee option is supplied, the return value is the value of the last command executed or failure if an error occurs with the temporary file of commands. If the second - form is used, the return status is that of the command re-exe- - cuted, unless _c_m_d does not specify a valid history line, in + form is used, the return status is that of the command re-exe- + cuted, unless _c_m_d does not specify a valid history line, in which case ffcc returns failure. ffgg [_j_o_b_s_p_e_c] - Resume _j_o_b_s_p_e_c in the foreground, and make it the current job. + Resume _j_o_b_s_p_e_c in the foreground, and make it the current job. If _j_o_b_s_p_e_c is not present, the shell's notion of the _c_u_r_r_e_n_t _j_o_b - is used. The return value is that of the command placed into - the foreground, or failure if run when job control is disabled + is used. The return value is that of the command placed into + the foreground, or failure if run when job control is disabled or, when run with job control enabled, if _j_o_b_s_p_e_c does not spec- - ify a valid job or _j_o_b_s_p_e_c specifies a job that was started + ify a valid job or _j_o_b_s_p_e_c specifies a job that was started without job control. ggeettooppttss _o_p_t_s_t_r_i_n_g _n_a_m_e [_a_r_g_s] - ggeettooppttss is used by shell procedures to parse positional parame- - ters. _o_p_t_s_t_r_i_n_g contains the option characters to be recog- - nized; if a character is followed by a colon, the option is - expected to have an argument, which should be separated from it - by white space. The colon and question mark characters may not - be used as option characters. Each time it is invoked, ggeettooppttss - places the next option in the shell variable _n_a_m_e, initializing + ggeettooppttss is used by shell procedures to parse positional parame- + ters. _o_p_t_s_t_r_i_n_g contains the option characters to be recog- + nized; if a character is followed by a colon, the option is + expected to have an argument, which should be separated from it + by white space. The colon and question mark characters may not + be used as option characters. Each time it is invoked, ggeettooppttss + places the next option in the shell variable _n_a_m_e, initializing _n_a_m_e if it does not exist, and the index of the next argument to be processed into the variable OOPPTTIINNDD. OOPPTTIINNDD is initialized to - 1 each time the shell or a shell script is invoked. When an - option requires an argument, ggeettooppttss places that argument into - the variable OOPPTTAARRGG. The shell does not reset OOPPTTIINNDD automati- - cally; it must be manually reset between multiple calls to + 1 each time the shell or a shell script is invoked. When an + option requires an argument, ggeettooppttss places that argument into + the variable OOPPTTAARRGG. The shell does not reset OOPPTTIINNDD automati- + cally; it must be manually reset between multiple calls to ggeettooppttss within the same shell invocation if a new set of parame- ters is to be used. - When the end of options is encountered, ggeettooppttss exits with a - return value greater than zero. OOPPTTIINNDD is set to the index of + When the end of options is encountered, ggeettooppttss exits with a + return value greater than zero. OOPPTTIINNDD is set to the index of the first non-option argument, and nnaammee is set to ?. - ggeettooppttss normally parses the positional parameters, but if more + ggeettooppttss normally parses the positional parameters, but if more arguments are given in _a_r_g_s, ggeettooppttss parses those instead. - ggeettooppttss can report errors in two ways. If the first character - of _o_p_t_s_t_r_i_n_g is a colon, _s_i_l_e_n_t error reporting is used. In - normal operation diagnostic messages are printed when invalid - options or missing option arguments are encountered. If the - variable OOPPTTEERRRR is set to 0, no error messages will be dis- + ggeettooppttss can report errors in two ways. If the first character + of _o_p_t_s_t_r_i_n_g is a colon, _s_i_l_e_n_t error reporting is used. In + normal operation diagnostic messages are printed when invalid + options or missing option arguments are encountered. If the + variable OOPPTTEERRRR is set to 0, no error messages will be dis- played, even if the first character of _o_p_t_s_t_r_i_n_g is not a colon. If an invalid option is seen, ggeettooppttss places ? into _n_a_m_e and, if - not silent, prints an error message and unsets OOPPTTAARRGG. If - ggeettooppttss is silent, the option character found is placed in + not silent, prints an error message and unsets OOPPTTAARRGG. If + ggeettooppttss is silent, the option character found is placed in OOPPTTAARRGG and no diagnostic message is printed. - If a required argument is not found, and ggeettooppttss is not silent, - a question mark (??) is placed in _n_a_m_e, OOPPTTAARRGG is unset, and a - diagnostic message is printed. If ggeettooppttss is silent, then a - colon (::) is placed in _n_a_m_e and OOPPTTAARRGG is set to the option + If a required argument is not found, and ggeettooppttss is not silent, + a question mark (??) is placed in _n_a_m_e, OOPPTTAARRGG is unset, and a + diagnostic message is printed. If ggeettooppttss is silent, then a + colon (::) is placed in _n_a_m_e and OOPPTTAARRGG is set to the option character found. - ggeettooppttss returns true if an option, specified or unspecified, is + ggeettooppttss returns true if an option, specified or unspecified, is found. It returns false if the end of options is encountered or an error occurs. hhaasshh [--llrr] [--pp _f_i_l_e_n_a_m_e] [--ddtt] [_n_a_m_e] - For each _n_a_m_e, the full file name of the command is determined + For each _n_a_m_e, the full file name of the command is determined by searching the directories in $$PPAATTHH and remembered. If the --pp option is supplied, no path search is performed, and _f_i_l_e_n_a_m_e is used as the full file name of the command. The --rr option causes - the shell to forget all remembered locations. The --dd option + the shell to forget all remembered locations. The --dd option causes the shell to forget the remembered location of each _n_a_m_e. - If the --tt option is supplied, the full pathname to which each - _n_a_m_e corresponds is printed. If multiple _n_a_m_e arguments are - supplied with --tt, the _n_a_m_e is printed before the hashed full + If the --tt option is supplied, the full pathname to which each + _n_a_m_e corresponds is printed. If multiple _n_a_m_e arguments are + supplied with --tt, the _n_a_m_e is printed before the hashed full pathname. The --ll option causes output to be displayed in a for- - mat that may be reused as input. If no arguments are given, or + mat that may be reused as input. If no arguments are given, or if only --ll is supplied, information about remembered commands is - printed. The return status is true unless a _n_a_m_e is not found + printed. The return status is true unless a _n_a_m_e is not found or an invalid option is supplied. hheellpp [--ss] [_p_a_t_t_e_r_n] - Display helpful information about builtin commands. If _p_a_t_t_e_r_n - is specified, hheellpp gives detailed help on all commands matching - _p_a_t_t_e_r_n; otherwise help for all the builtins and shell control - structures is printed. The --ss option restricts the information - displayed to a short usage synopsis. The return status is 0 + Display helpful information about builtin commands. If _p_a_t_t_e_r_n + is specified, hheellpp gives detailed help on all commands matching + _p_a_t_t_e_r_n; otherwise help for all the builtins and shell control + structures is printed. The --ss option restricts the information + displayed to a short usage synopsis. The return status is 0 unless no command matches _p_a_t_t_e_r_n. hhiissttoorryy [[_n]] @@ -3888,41 +3893,41 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS hhiissttoorryy --ss _a_r_g [_a_r_g _._._.] With no options, display the command history list with line num- bers. Lines listed with a ** have been modified. An argument of - _n lists only the last _n lines. If the shell variable HHIISSTTTTIIMMEE-- - FFOORRMMAATT is set and not null, it is used as a format string for - _s_t_r_f_t_i_m_e(3) to display the time stamp associated with each dis- - played history entry. No intervening blank is printed between - the formatted time stamp and the history line. If _f_i_l_e_n_a_m_e is - supplied, it is used as the name of the history file; if not, - the value of HHIISSTTFFIILLEE is used. Options, if supplied, have the + _n lists only the last _n lines. If the shell variable HHIISSTTTTIIMMEE-- + FFOORRMMAATT is set and not null, it is used as a format string for + _s_t_r_f_t_i_m_e(3) to display the time stamp associated with each dis- + played history entry. No intervening blank is printed between + the formatted time stamp and the history line. If _f_i_l_e_n_a_m_e is + supplied, it is used as the name of the history file; if not, + the value of HHIISSTTFFIILLEE is used. Options, if supplied, have the following meanings: --cc Clear the history list by deleting all the entries. --dd _o_f_f_s_e_t Delete the history entry at position _o_f_f_s_e_t. - --aa Append the ``new'' history lines (history lines entered - since the beginning of the current bbaasshh session) to the + --aa Append the ``new'' history lines (history lines entered + since the beginning of the current bbaasshh session) to the history file. - --nn Read the history lines not already read from the history - file into the current history list. These are lines - appended to the history file since the beginning of the + --nn Read the history lines not already read from the history + file into the current history list. These are lines + appended to the history file since the beginning of the current bbaasshh session. --rr Read the contents of the history file and use them as the current history. - --ww Write the current history to the history file, overwrit- + --ww Write the current history to the history file, overwrit- ing the history file's contents. - --pp Perform history substitution on the following _a_r_g_s and - display the result on the standard output. Does not - store the results in the history list. Each _a_r_g must be + --pp Perform history substitution on the following _a_r_g_s and + display the result on the standard output. Does not + store the results in the history list. Each _a_r_g must be quoted to disable normal history expansion. - --ss Store the _a_r_g_s in the history list as a single entry. - The last command in the history list is removed before + --ss Store the _a_r_g_s in the history list as a single entry. + The last command in the history list is removed before the _a_r_g_s are added. If the HHIISSTTTTIIMMEEFFOORRMMAATT is set, the time stamp information associ- - ated with each history entry is written to the history file. - The return value is 0 unless an invalid option is encountered, - an error occurs while reading or writing the history file, an - invalid _o_f_f_s_e_t is supplied as an argument to --dd, or the history + ated with each history entry is written to the history file. + The return value is 0 unless an invalid option is encountered, + an error occurs while reading or writing the history file, an + invalid _o_f_f_s_e_t is supplied as an argument to --dd, or the history expansion supplied as an argument to --pp fails. jjoobbss [--llnnpprrss] [ _j_o_b_s_p_e_c ... ] @@ -3930,144 +3935,144 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS The first form lists the active jobs. The options have the fol- lowing meanings: --ll List process IDs in addition to the normal information. - --pp List only the process ID of the job's process group + --pp List only the process ID of the job's process group leader. - --nn Display information only about jobs that have changed - status since the user was last notified of their status. + --nn Display information only about jobs that have changed + status since the user was last notified of their status. --rr Restrict output to running jobs. --ss Restrict output to stopped jobs. - If _j_o_b_s_p_e_c is given, output is restricted to information about - that job. The return status is 0 unless an invalid option is + If _j_o_b_s_p_e_c is given, output is restricted to information about + that job. The return status is 0 unless an invalid option is encountered or an invalid _j_o_b_s_p_e_c is supplied. If the --xx option is supplied, jjoobbss replaces any _j_o_b_s_p_e_c found in - _c_o_m_m_a_n_d or _a_r_g_s with the corresponding process group ID, and + _c_o_m_m_a_n_d or _a_r_g_s with the corresponding process group ID, and executes _c_o_m_m_a_n_d passing it _a_r_g_s, returning its exit status. kkiillll [--ss _s_i_g_s_p_e_c | --nn _s_i_g_n_u_m | --_s_i_g_s_p_e_c] [_p_i_d | _j_o_b_s_p_e_c] ... kkiillll --ll [_s_i_g_s_p_e_c | _e_x_i_t___s_t_a_t_u_s] - Send the signal named by _s_i_g_s_p_e_c or _s_i_g_n_u_m to the processes - named by _p_i_d or _j_o_b_s_p_e_c. _s_i_g_s_p_e_c is either a case-insensitive - signal name such as SSIIGGKKIILLLL (with or without the SSIIGG prefix) or - a signal number; _s_i_g_n_u_m is a signal number. If _s_i_g_s_p_e_c is not - present, then SSIIGGTTEERRMM is assumed. An argument of --ll lists the - signal names. If any arguments are supplied when --ll is given, - the names of the signals corresponding to the arguments are + Send the signal named by _s_i_g_s_p_e_c or _s_i_g_n_u_m to the processes + named by _p_i_d or _j_o_b_s_p_e_c. _s_i_g_s_p_e_c is either a case-insensitive + signal name such as SSIIGGKKIILLLL (with or without the SSIIGG prefix) or + a signal number; _s_i_g_n_u_m is a signal number. If _s_i_g_s_p_e_c is not + present, then SSIIGGTTEERRMM is assumed. An argument of --ll lists the + signal names. If any arguments are supplied when --ll is given, + the names of the signals corresponding to the arguments are listed, and the return status is 0. The _e_x_i_t___s_t_a_t_u_s argument to - --ll is a number specifying either a signal number or the exit - status of a process terminated by a signal. kkiillll returns true - if at least one signal was successfully sent, or false if an + --ll is a number specifying either a signal number or the exit + status of a process terminated by a signal. kkiillll returns true + if at least one signal was successfully sent, or false if an error occurs or an invalid option is encountered. lleett _a_r_g [_a_r_g ...] Each _a_r_g is an arithmetic expression to be evaluated (see AARRIITTHH-- - MMEETTIICC EEVVAALLUUAATTIIOONN). If the last _a_r_g evaluates to 0, lleett returns + MMEETTIICC EEVVAALLUUAATTIIOONN). If the last _a_r_g evaluates to 0, lleett returns 1; 0 is returned otherwise. llooccaall [_o_p_t_i_o_n] [_n_a_m_e[=_v_a_l_u_e] ...] - For each argument, a local variable named _n_a_m_e is created, and - assigned _v_a_l_u_e. The _o_p_t_i_o_n can be any of the options accepted + For each argument, a local variable named _n_a_m_e is created, and + assigned _v_a_l_u_e. The _o_p_t_i_o_n can be any of the options accepted by ddeeccllaarree. When llooccaall is used within a function, it causes the - variable _n_a_m_e to have a visible scope restricted to that func- + variable _n_a_m_e to have a visible scope restricted to that func- tion and its children. With no operands, llooccaall writes a list of - local variables to the standard output. It is an error to use + local variables to the standard output. It is an error to use llooccaall when not within a function. The return status is 0 unless - llooccaall is used outside a function, an invalid _n_a_m_e is supplied, + llooccaall is used outside a function, an invalid _n_a_m_e is supplied, or _n_a_m_e is a readonly variable. llooggoouutt Exit a login shell. ppooppdd [-nn] [+_n] [-_n] - Removes entries from the directory stack. With no arguments, - removes the top directory from the stack, and performs a ccdd to + Removes entries from the directory stack. With no arguments, + removes the top directory from the stack, and performs a ccdd to the new top directory. Arguments, if supplied, have the follow- ing meanings: - ++_n Removes the _nth entry counting from the left of the list - shown by ddiirrss, starting with zero. For example: ``popd + ++_n Removes the _nth entry counting from the left of the list + shown by ddiirrss, starting with zero. For example: ``popd +0'' removes the first directory, ``popd +1'' the second. --_n Removes the _nth entry counting from the right of the list - shown by ddiirrss, starting with zero. For example: ``popd - -0'' removes the last directory, ``popd -1'' the next to + shown by ddiirrss, starting with zero. For example: ``popd + -0'' removes the last directory, ``popd -1'' the next to last. - --nn Suppresses the normal change of directory when removing - directories from the stack, so that only the stack is + --nn Suppresses the normal change of directory when removing + directories from the stack, so that only the stack is manipulated. - If the ppooppdd command is successful, a ddiirrss is performed as well, - and the return status is 0. ppooppdd returns false if an invalid + If the ppooppdd command is successful, a ddiirrss is performed as well, + and the return status is 0. ppooppdd returns false if an invalid option is encountered, the directory stack is empty, a non-exis- tent directory stack entry is specified, or the directory change fails. pprriinnttff _f_o_r_m_a_t [_a_r_g_u_m_e_n_t_s] - Write the formatted _a_r_g_u_m_e_n_t_s to the standard output under the - control of the _f_o_r_m_a_t. The _f_o_r_m_a_t is a character string which - contains three types of objects: plain characters, which are - simply copied to standard output, character escape sequences, - which are converted and copied to the standard output, and for- - mat specifications, each of which causes printing of the next + Write the formatted _a_r_g_u_m_e_n_t_s to the standard output under the + control of the _f_o_r_m_a_t. The _f_o_r_m_a_t is a character string which + contains three types of objects: plain characters, which are + simply copied to standard output, character escape sequences, + which are converted and copied to the standard output, and for- + mat specifications, each of which causes printing of the next successive _a_r_g_u_m_e_n_t. In addition to the standard _p_r_i_n_t_f(1) for- - mats, %%bb causes pprriinnttff to expand backslash escape sequences in - the corresponding _a_r_g_u_m_e_n_t (except that \\cc terminates output, + mats, %%bb causes pprriinnttff to expand backslash escape sequences in + the corresponding _a_r_g_u_m_e_n_t (except that \\cc terminates output, backslashes in \\'', \\"", and \\?? are not removed, and octal escapes - beginning with \\00 may contain up to four digits), and %%qq causes + beginning with \\00 may contain up to four digits), and %%qq causes pprriinnttff to output the corresponding _a_r_g_u_m_e_n_t in a format that can be reused as shell input. - The _f_o_r_m_a_t is reused as necessary to consume all of the _a_r_g_u_- + The _f_o_r_m_a_t is reused as necessary to consume all of the _a_r_g_u_- _m_e_n_t_s. If the _f_o_r_m_a_t requires more _a_r_g_u_m_e_n_t_s than are supplied, - the extra format specifications behave as if a zero value or - null string, as appropriate, had been supplied. The return + the extra format specifications behave as if a zero value or + null string, as appropriate, had been supplied. The return value is zero on success, non-zero on failure. ppuusshhdd [--nn] [_d_i_r] ppuusshhdd [--nn] [+_n] [-_n] - Adds a directory to the top of the directory stack, or rotates - the stack, making the new top of the stack the current working + Adds a directory to the top of the directory stack, or rotates + the stack, making the new top of the stack the current working directory. With no arguments, exchanges the top two directories - and returns 0, unless the directory stack is empty. Arguments, + and returns 0, unless the directory stack is empty. Arguments, if supplied, have the following meanings: - ++_n Rotates the stack so that the _nth directory (counting - from the left of the list shown by ddiirrss, starting with + ++_n Rotates the stack so that the _nth directory (counting + from the left of the list shown by ddiirrss, starting with zero) is at the top. - --_n Rotates the stack so that the _nth directory (counting - from the right of the list shown by ddiirrss, starting with + --_n Rotates the stack so that the _nth directory (counting + from the right of the list shown by ddiirrss, starting with zero) is at the top. - --nn Suppresses the normal change of directory when adding - directories to the stack, so that only the stack is + --nn Suppresses the normal change of directory when adding + directories to the stack, so that only the stack is manipulated. _d_i_r Adds _d_i_r to the directory stack at the top, making it the new current working directory. If the ppuusshhdd command is successful, a ddiirrss is performed as well. - If the first form is used, ppuusshhdd returns 0 unless the cd to _d_i_r - fails. With the second form, ppuusshhdd returns 0 unless the direc- - tory stack is empty, a non-existent directory stack element is - specified, or the directory change to the specified new current + If the first form is used, ppuusshhdd returns 0 unless the cd to _d_i_r + fails. With the second form, ppuusshhdd returns 0 unless the direc- + tory stack is empty, a non-existent directory stack element is + specified, or the directory change to the specified new current directory fails. ppwwdd [--LLPP] - Print the absolute pathname of the current working directory. + Print the absolute pathname of the current working directory. The pathname printed contains no symbolic links if the --PP option is supplied or the --oo pphhyyssiiccaall option to the sseett builtin command - is enabled. If the --LL option is used, the pathname printed may - contain symbolic links. The return status is 0 unless an error - occurs while reading the name of the current directory or an + is enabled. If the --LL option is used, the pathname printed may + contain symbolic links. The return status is 0 unless an error + occurs while reading the name of the current directory or an invalid option is supplied. rreeaadd [--eerrss] [--uu _f_d] [--tt _t_i_m_e_o_u_t] [--aa _a_n_a_m_e] [--pp _p_r_o_m_p_t] [--nn _n_c_h_a_r_s] [--dd _d_e_l_i_m] [_n_a_m_e ...] - One line is read from the standard input, or from the file - descriptor _f_d supplied as an argument to the --uu option, and the + One line is read from the standard input, or from the file + descriptor _f_d supplied as an argument to the --uu option, and the first word is assigned to the first _n_a_m_e, the second word to the - second _n_a_m_e, and so on, with leftover words and their interven- - ing separators assigned to the last _n_a_m_e. If there are fewer + second _n_a_m_e, and so on, with leftover words and their interven- + ing separators assigned to the last _n_a_m_e. If there are fewer words read from the input stream than names, the remaining names - are assigned empty values. The characters in IIFFSS are used to - split the line into words. The backslash character (\\) may be - used to remove any special meaning for the next character read - and for line continuation. Options, if supplied, have the fol- + are assigned empty values. The characters in IIFFSS are used to + split the line into words. The backslash character (\\) may be + used to remove any special meaning for the next character read + and for line continuation. Options, if supplied, have the fol- lowing meanings: --aa _a_n_a_m_e The words are assigned to sequential indices of the array @@ -4075,98 +4080,98 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS new values are assigned. Other _n_a_m_e arguments are ignored. --dd _d_e_l_i_m - The first character of _d_e_l_i_m is used to terminate the + The first character of _d_e_l_i_m is used to terminate the input line, rather than newline. --ee If the standard input is coming from a terminal, rreeaaddlliinnee (see RREEAADDLLIINNEE above) is used to obtain the line. --nn _n_c_h_a_r_s - rreeaadd returns after reading _n_c_h_a_r_s characters rather than + rreeaadd returns after reading _n_c_h_a_r_s characters rather than waiting for a complete line of input. --pp _p_r_o_m_p_t Display _p_r_o_m_p_t on standard error, without a trailing new- line, before attempting to read any input. The prompt is displayed only if input is coming from a terminal. --rr Backslash does not act as an escape character. The back- - slash is considered to be part of the line. In particu- - lar, a backslash-newline pair may not be used as a line + slash is considered to be part of the line. In particu- + lar, a backslash-newline pair may not be used as a line continuation. --ss Silent mode. If input is coming from a terminal, charac- ters are not echoed. --tt _t_i_m_e_o_u_t - Cause rreeaadd to time out and return failure if a complete - line of input is not read within _t_i_m_e_o_u_t seconds. This - option has no effect if rreeaadd is not reading input from + Cause rreeaadd to time out and return failure if a complete + line of input is not read within _t_i_m_e_o_u_t seconds. This + option has no effect if rreeaadd is not reading input from the terminal or a pipe. --uu _f_d Read input from file descriptor _f_d. If no _n_a_m_e_s are supplied, the line read is assigned to the vari- - able RREEPPLLYY. The return code is zero, unless end-of-file is - encountered, rreeaadd times out, or an invalid file descriptor is + able RREEPPLLYY. The return code is zero, unless end-of-file is + encountered, rreeaadd times out, or an invalid file descriptor is supplied as the argument to --uu. rreeaaddoonnllyy [--aappff] [_n_a_m_e[=_w_o_r_d] ...] - The given _n_a_m_e_s are marked readonly; the values of these _n_a_m_e_s - may not be changed by subsequent assignment. If the --ff option - is supplied, the functions corresponding to the _n_a_m_e_s are so + The given _n_a_m_e_s are marked readonly; the values of these _n_a_m_e_s + may not be changed by subsequent assignment. If the --ff option + is supplied, the functions corresponding to the _n_a_m_e_s are so marked. The --aa option restricts the variables to arrays. If no - _n_a_m_e arguments are given, or if the --pp option is supplied, a - list of all readonly names is printed. The --pp option causes - output to be displayed in a format that may be reused as input. - If a variable name is followed by =_w_o_r_d, the value of the vari- - able is set to _w_o_r_d. The return status is 0 unless an invalid - option is encountered, one of the _n_a_m_e_s is not a valid shell - variable name, or --ff is supplied with a _n_a_m_e that is not a func- - tion. + _n_a_m_e arguments are given, or if the --pp option is supplied, a + list of all readonly names is printed. The --pp option causes + output to be displayed in a format that may be reused as input. + If a variable name is followed by =_w_o_r_d, the value of the vari- + able is set to _w_o_r_d. The return status is 0 unless an invalid + option is encountered, one of the _n_a_m_e_s is not a valid shell + variable name, or --ff is supplied with a _n_a_m_e that is not a + function. rreettuurrnn [_n] - Causes a function to exit with the return value specified by _n. - If _n is omitted, the return status is that of the last command - executed in the function body. If used outside a function, but - during execution of a script by the .. (ssoouurrccee) command, it + Causes a function to exit with the return value specified by _n. + If _n is omitted, the return status is that of the last command + executed in the function body. If used outside a function, but + during execution of a script by the .. (ssoouurrccee) command, it causes the shell to stop executing that script and return either - _n or the exit status of the last command executed within the - script as the exit status of the script. If used outside a - function and not during execution of a script by .., the return + _n or the exit status of the last command executed within the + script as the exit status of the script. If used outside a + function and not during execution of a script by .., the return status is false. Any command associated with the RREETTUURRNN trap is - executed before execution resumes after the function or script. + executed before execution resumes after the function or script. sseett [----aabbeeffhhkkmmnnppttuuvvxxBBCCHHPP] [--oo _o_p_t_i_o_n] [_a_r_g ...] - Without options, the name and value of each shell variable are - displayed in a format that can be reused as input. The output - is sorted according to the current locale. When options are - specified, they set or unset shell attributes. Any arguments - remaining after the options are processed are treated as values + Without options, the name and value of each shell variable are + displayed in a format that can be reused as input. The output + is sorted according to the current locale. When options are + specified, they set or unset shell attributes. Any arguments + remaining after the options are processed are treated as values for the positional parameters and are assigned, in order, to $$11, - $$22, ...... $$_n. Options, if specified, have the following mean- + $$22, ...... $$_n. Options, if specified, have the following mean- ings: - --aa Automatically mark variables and functions which are - modified or created for export to the environment of + --aa Automatically mark variables and functions which are + modified or created for export to the environment of subsequent commands. - --bb Report the status of terminated background jobs immedi- + --bb Report the status of terminated background jobs immedi- ately, rather than before the next primary prompt. This is effective only when job control is enabled. - --ee Exit immediately if a _s_i_m_p_l_e _c_o_m_m_a_n_d (see SSHHEELLLL GGRRAAMMMMAARR + --ee Exit immediately if a _s_i_m_p_l_e _c_o_m_m_a_n_d (see SSHHEELLLL GGRRAAMMMMAARR above) exits with a non-zero status. The shell does not - exit if the command that fails is part of the command - list immediately following a wwhhiillee or uunnttiill keyword, - part of the test in an _i_f statement, part of a &&&& or |||| + exit if the command that fails is part of the command + list immediately following a wwhhiillee or uunnttiill keyword, + part of the test in an _i_f statement, part of a &&&& or |||| list, or if the command's return value is being inverted - via !!. A trap on EERRRR, if set, is executed before the + via !!. A trap on EERRRR, if set, is executed before the shell exits. --ff Disable pathname expansion. - --hh Remember the location of commands as they are looked up + --hh Remember the location of commands as they are looked up for execution. This is enabled by default. - --kk All arguments in the form of assignment statements are - placed in the environment for a command, not just those + --kk All arguments in the form of assignment statements are + placed in the environment for a command, not just those that precede the command name. - --mm Monitor mode. Job control is enabled. This option is - on by default for interactive shells on systems that - support it (see JJOOBB CCOONNTTRROOLL above). Background pro- - cesses run in a separate process group and a line con- - taining their exit status is printed upon their comple- + --mm Monitor mode. Job control is enabled. This option is + on by default for interactive shells on systems that + support it (see JJOOBB CCOONNTTRROOLL above). Background pro- + cesses run in a separate process group and a line con- + taining their exit status is printed upon their comple- tion. --nn Read commands but do not execute them. This may be used - to check a shell script for syntax errors. This is + to check a shell script for syntax errors. This is ignored by interactive shells. --oo _o_p_t_i_o_n_-_n_a_m_e The _o_p_t_i_o_n_-_n_a_m_e can be one of the following: @@ -4174,7 +4179,7 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS Same as --aa. bbrraacceeeexxppaanndd Same as --BB. - eemmaaccss Use an emacs-style command line editing inter- + eemmaaccss Use an emacs-style command line editing inter- face. This is enabled by default when the shell is interactive, unless the shell is started with the ----nnooeeddiittiinngg option. @@ -4190,8 +4195,8 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS HHIISSTTOORRYY. This option is on by default in inter- active shells. iiggnnoorreeeeooff - The effect is as if the shell command - ``IGNOREEOF=10'' had been executed (see SShheellll + The effect is as if the shell command + ``IGNOREEOF=10'' had been executed (see SShheellll VVaarriiaabblleess above). kkeeyywwoorrdd Same as --kk. mmoonniittoorr Same as --mm. @@ -4205,12 +4210,12 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS pphhyyssiiccaall Same as --PP. ppiippeeffaaiill - If set, the return value of a pipeline is the - value of the last (rightmost) command to exit - with a non-zero status, or zero if all commands - in the pipeline exit successfully. This option + If set, the return value of a pipeline is the + value of the last (rightmost) command to exit + with a non-zero status, or zero if all commands + in the pipeline exit successfully. This option is disabled by default. - ppoossiixx Change the behavior of bbaasshh where the default + ppoossiixx Change the behavior of bbaasshh where the default operation differs from the POSIX 1003.2 standard to match the standard (_`_p_o_s_i_x _m_o_d_e). pprriivviilleeggeedd @@ -4219,224 +4224,224 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS vvii Use a vi-style command line editing interface. xxttrraaccee Same as --xx. If --oo is supplied with no _o_p_t_i_o_n_-_n_a_m_e, the values of the - current options are printed. If ++oo is supplied with no - _o_p_t_i_o_n_-_n_a_m_e, a series of sseett commands to recreate the - current option settings is displayed on the standard + current options are printed. If ++oo is supplied with no + _o_p_t_i_o_n_-_n_a_m_e, a series of sseett commands to recreate the + current option settings is displayed on the standard output. - --pp Turn on _p_r_i_v_i_l_e_g_e_d mode. In this mode, the $$EENNVV and - $$BBAASSHH__EENNVV files are not processed, shell functions are - not inherited from the environment, and the SSHHEELLLLOOPPTTSS - variable, if it appears in the environment, is ignored. - If the shell is started with the effective user (group) - id not equal to the real user (group) id, and the --pp - option is not supplied, these actions are taken and the + --pp Turn on _p_r_i_v_i_l_e_g_e_d mode. In this mode, the $$EENNVV and + $$BBAASSHH__EENNVV files are not processed, shell functions are + not inherited from the environment, and the SSHHEELLLLOOPPTTSS + variable, if it appears in the environment, is ignored. + If the shell is started with the effective user (group) + id not equal to the real user (group) id, and the --pp + option is not supplied, these actions are taken and the effective user id is set to the real user id. If the --pp - option is supplied at startup, the effective user id is + option is supplied at startup, the effective user id is not reset. Turning this option off causes the effective - user and group ids to be set to the real user and group + user and group ids to be set to the real user and group ids. --tt Exit after reading and executing one command. --uu Treat unset variables as an error when performing param- - eter expansion. If expansion is attempted on an unset + eter expansion. If expansion is attempted on an unset variable, the shell prints an error message, and, if not interactive, exits with a non-zero status. --vv Print shell input lines as they are read. - --xx After expanding each _s_i_m_p_l_e _c_o_m_m_a_n_d, ffoorr command, ccaassee + --xx After expanding each _s_i_m_p_l_e _c_o_m_m_a_n_d, ffoorr command, ccaassee command, sseelleecctt command, or arithmetic ffoorr command, dis- - play the expanded value of PPSS44, followed by the command + play the expanded value of PPSS44, followed by the command and its expanded arguments or associated word list. - --BB The shell performs brace expansion (see BBrraaccee EExxppaannssiioonn + --BB The shell performs brace expansion (see BBrraaccee EExxppaannssiioonn above). This is on by default. - --CC If set, bbaasshh does not overwrite an existing file with - the >>, >>&&, and <<>> redirection operators. This may be + --CC If set, bbaasshh does not overwrite an existing file with + the >>, >>&&, and <<>> redirection operators. This may be overridden when creating output files by using the redi- rection operator >>|| instead of >>. --EE If set, any trap on EERRRR is inherited by shell functions, - command substitutions, and commands executed in a sub- - shell environment. The EERRRR trap is normally not inher- + command substitutions, and commands executed in a sub- + shell environment. The EERRRR trap is normally not inher- ited in such cases. --HH Enable !! style history substitution. This option is on by default when the shell is interactive. - --PP If set, the shell does not follow symbolic links when - executing commands such as ccdd that change the current + --PP If set, the shell does not follow symbolic links when + executing commands such as ccdd that change the current working directory. It uses the physical directory structure instead. By default, bbaasshh follows the logical - chain of directories when performing commands which + chain of directories when performing commands which change the current directory. - --TT If set, any trap on DDEEBBUUGG is inherited by shell func- + --TT If set, any trap on DDEEBBUUGG is inherited by shell func- tions, command substitutions, and commands executed in a - subshell environment. The DDEEBBUUGG trap is normally not + subshell environment. The DDEEBBUUGG trap is normally not inherited in such cases. - ---- If no arguments follow this option, then the positional + ---- If no arguments follow this option, then the positional parameters are unset. Otherwise, the positional parame- - ters are set to the _a_r_gs, even if some of them begin + ters are set to the _a_r_gs, even if some of them begin with a --. - -- Signal the end of options, cause all remaining _a_r_gs to + -- Signal the end of options, cause all remaining _a_r_gs to be assigned to the positional parameters. The --xx and --vv options are turned off. If there are no _a_r_gs, the posi- tional parameters remain unchanged. - The options are off by default unless otherwise noted. Using + - rather than - causes these options to be turned off. The - options can also be specified as arguments to an invocation of - the shell. The current set of options may be found in $$--. The + The options are off by default unless otherwise noted. Using + + rather than - causes these options to be turned off. The + options can also be specified as arguments to an invocation of + the shell. The current set of options may be found in $$--. The return status is always true unless an invalid option is encoun- tered. sshhiifftt [_n] - The positional parameters from _n+1 ... are renamed to $$11 ........ - Parameters represented by the numbers $$## down to $$##-_n+1 are - unset. _n must be a non-negative number less than or equal to - $$##. If _n is 0, no parameters are changed. If _n is not given, - it is assumed to be 1. If _n is greater than $$##, the positional - parameters are not changed. The return status is greater than + The positional parameters from _n+1 ... are renamed to $$11 ........ + Parameters represented by the numbers $$## down to $$##-_n+1 are + unset. _n must be a non-negative number less than or equal to + $$##. If _n is 0, no parameters are changed. If _n is not given, + it is assumed to be 1. If _n is greater than $$##, the positional + parameters are not changed. The return status is greater than zero if _n is greater than $$## or less than zero; otherwise 0. sshhoopptt [--ppqqssuu] [--oo] [_o_p_t_n_a_m_e ...] Toggle the values of variables controlling optional shell behav- ior. With no options, or with the --pp option, a list of all set- table options is displayed, with an indication of whether or not - each is set. The --pp option causes output to be displayed in a - form that may be reused as input. Other options have the fol- - lowing meanings: + each is set. The --pp option causes output to be displayed in a + form that may be reused as input. Other options have the + following meanings: --ss Enable (set) each _o_p_t_n_a_m_e. --uu Disable (unset) each _o_p_t_n_a_m_e. - --qq Suppresses normal output (quiet mode); the return status + --qq Suppresses normal output (quiet mode); the return status indicates whether the _o_p_t_n_a_m_e is set or unset. If multi- - ple _o_p_t_n_a_m_e arguments are given with --qq, the return sta- - tus is zero if all _o_p_t_n_a_m_e_s are enabled; non-zero other- + ple _o_p_t_n_a_m_e arguments are given with --qq, the return sta- + tus is zero if all _o_p_t_n_a_m_e_s are enabled; non-zero other- wise. - --oo Restricts the values of _o_p_t_n_a_m_e to be those defined for + --oo Restricts the values of _o_p_t_n_a_m_e to be those defined for the --oo option to the sseett builtin. - If either --ss or --uu is used with no _o_p_t_n_a_m_e arguments, the dis- + If either --ss or --uu is used with no _o_p_t_n_a_m_e arguments, the dis- play is limited to those options which are set or unset, respec- - tively. Unless otherwise noted, the sshhoopptt options are disabled + tively. Unless otherwise noted, the sshhoopptt options are disabled (unset) by default. - The return status when listing options is zero if all _o_p_t_n_a_m_e_s - are enabled, non-zero otherwise. When setting or unsetting - options, the return status is zero unless an _o_p_t_n_a_m_e is not a + The return status when listing options is zero if all _o_p_t_n_a_m_e_s + are enabled, non-zero otherwise. When setting or unsetting + options, the return status is zero unless an _o_p_t_n_a_m_e is not a valid shell option. The list of sshhoopptt options is: ccddaabbllee__vvaarrss - If set, an argument to the ccdd builtin command that is - not a directory is assumed to be the name of a variable + If set, an argument to the ccdd builtin command that is + not a directory is assumed to be the name of a variable whose value is the directory to change to. ccddssppeellll If set, minor errors in the spelling of a directory com- - ponent in a ccdd command will be corrected. The errors + ponent in a ccdd command will be corrected. The errors checked for are transposed characters, a missing charac- - ter, and one character too many. If a correction is - found, the corrected file name is printed, and the com- - mand proceeds. This option is only used by interactive + ter, and one character too many. If a correction is + found, the corrected file name is printed, and the com- + mand proceeds. This option is only used by interactive shells. cchheecckkhhaasshh If set, bbaasshh checks that a command found in the hash ta- - ble exists before trying to execute it. If a hashed - command no longer exists, a normal path search is per- + ble exists before trying to execute it. If a hashed + command no longer exists, a normal path search is per- formed. cchheecckkwwiinnssiizzee - If set, bbaasshh checks the window size after each command - and, if necessary, updates the values of LLIINNEESS and + If set, bbaasshh checks the window size after each command + and, if necessary, updates the values of LLIINNEESS and CCOOLLUUMMNNSS. - ccmmddhhiisstt If set, bbaasshh attempts to save all lines of a multiple- - line command in the same history entry. This allows + ccmmddhhiisstt If set, bbaasshh attempts to save all lines of a multiple- + line command in the same history entry. This allows easy re-editing of multi-line commands. - ddoottgglloobb If set, bbaasshh includes filenames beginning with a `.' in + ddoottgglloobb If set, bbaasshh includes filenames beginning with a `.' in the results of pathname expansion. eexxeeccffaaiill If set, a non-interactive shell will not exit if it can- - not execute the file specified as an argument to the - eexxeecc builtin command. An interactive shell does not + not execute the file specified as an argument to the + eexxeecc builtin command. An interactive shell does not exit if eexxeecc fails. eexxppaanndd__aalliiaasseess - If set, aliases are expanded as described above under + If set, aliases are expanded as described above under AALLIIAASSEESS. This option is enabled by default for interac- tive shells. eexxttddeebbuugg - If set, behavior intended for use by debuggers is + If set, behavior intended for use by debuggers is enabled: 11.. The --FF option to the ddeeccllaarree builtin displays the source file name and line number corresponding to each function name supplied as an argument. - 22.. If the command run by the DDEEBBUUGG trap returns a - non-zero value, the next command is skipped and + 22.. If the command run by the DDEEBBUUGG trap returns a + non-zero value, the next command is skipped and not executed. - 33.. If the command run by the DDEEBBUUGG trap returns a - value of 2, and the shell is executing in a sub- - routine (a shell function or a shell script exe- - cuted by the .. or ssoouurrccee builtins), a call to + 33.. If the command run by the DDEEBBUUGG trap returns a + value of 2, and the shell is executing in a sub- + routine (a shell function or a shell script exe- + cuted by the .. or ssoouurrccee builtins), a call to rreettuurrnn is simulated. eexxttgglloobb If set, the extended pattern matching features described above under PPaatthhnnaammee EExxppaannssiioonn are enabled. eexxttqquuoottee - If set, $$'_s_t_r_i_n_g' and $$"_s_t_r_i_n_g" quoting is performed - within $${{_p_a_r_a_m_e_t_e_r}} expansions enclosed in double + If set, $$'_s_t_r_i_n_g' and $$"_s_t_r_i_n_g" quoting is performed + within $${{_p_a_r_a_m_e_t_e_r}} expansions enclosed in double quotes. This option is enabled by default. ffaaiillgglloobb - If set, patterns which fail to match filenames during + If set, patterns which fail to match filenames during pathname expansion result in an expansion error. ffoorrccee__ffiiggnnoorree - If set, the suffixes specified by the FFIIGGNNOORREE shell - variable cause words to be ignored when performing word + If set, the suffixes specified by the FFIIGGNNOORREE shell + variable cause words to be ignored when performing word completion even if the ignored words are the only possi- ble completions. See SSHHEELLLL VVAARRIIAABBLLEESS above for a - description of FFIIGGNNOORREE. This option is enabled by + description of FFIIGGNNOORREE. This option is enabled by default. ggnnuu__eerrrrffmmtt If set, shell error messages are written in the standard GNU error message format. hhiissttaappppeenndd - If set, the history list is appended to the file named - by the value of the HHIISSTTFFIILLEE variable when the shell + If set, the history list is appended to the file named + by the value of the HHIISSTTFFIILLEE variable when the shell exits, rather than overwriting the file. hhiissttrreeeeddiitt - If set, and rreeaaddlliinnee is being used, a user is given the + If set, and rreeaaddlliinnee is being used, a user is given the opportunity to re-edit a failed history substitution. hhiissttvveerriiffyy - If set, and rreeaaddlliinnee is being used, the results of his- - tory substitution are not immediately passed to the - shell parser. Instead, the resulting line is loaded + If set, and rreeaaddlliinnee is being used, the results of his- + tory substitution are not immediately passed to the + shell parser. Instead, the resulting line is loaded into the rreeaaddlliinnee editing buffer, allowing further modi- fication. hhoossttccoommpplleettee If set, and rreeaaddlliinnee is being used, bbaasshh will attempt to - perform hostname completion when a word containing a @@ - is being completed (see CCoommpplleettiinngg under RREEAADDLLIINNEE + perform hostname completion when a word containing a @@ + is being completed (see CCoommpplleettiinngg under RREEAADDLLIINNEE above). This is enabled by default. hhuuppoonneexxiitt If set, bbaasshh will send SSIIGGHHUUPP to all jobs when an inter- active login shell exits. iinntteerraaccttiivvee__ccoommmmeennttss If set, allow a word beginning with ## to cause that word - and all remaining characters on that line to be ignored - in an interactive shell (see CCOOMMMMEENNTTSS above). This + and all remaining characters on that line to be ignored + in an interactive shell (see CCOOMMMMEENNTTSS above). This option is enabled by default. - lliitthhiisstt If set, and the ccmmddhhiisstt option is enabled, multi-line + lliitthhiisstt If set, and the ccmmddhhiisstt option is enabled, multi-line commands are saved to the history with embedded newlines rather than using semicolon separators where possible. llooggiinn__sshheellll - The shell sets this option if it is started as a login - shell (see IINNVVOOCCAATTIIOONN above). The value may not be + The shell sets this option if it is started as a login + shell (see IINNVVOOCCAATTIIOONN above). The value may not be changed. mmaaiillwwaarrnn - If set, and a file that bbaasshh is checking for mail has - been accessed since the last time it was checked, the - message ``The mail in _m_a_i_l_f_i_l_e has been read'' is dis- + If set, and a file that bbaasshh is checking for mail has + been accessed since the last time it was checked, the + message ``The mail in _m_a_i_l_f_i_l_e has been read'' is dis- played. nnoo__eemmppttyy__ccmmdd__ccoommpplleettiioonn - If set, and rreeaaddlliinnee is being used, bbaasshh will not + If set, and rreeaaddlliinnee is being used, bbaasshh will not attempt to search the PPAATTHH for possible completions when completion is attempted on an empty line. nnooccaasseegglloobb - If set, bbaasshh matches filenames in a case-insensitive + If set, bbaasshh matches filenames in a case-insensitive fashion when performing pathname expansion (see PPaatthhnnaammee EExxppaannssiioonn above). nnuullllgglloobb - If set, bbaasshh allows patterns which match no files (see - PPaatthhnnaammee EExxppaannssiioonn above) to expand to a null string, + If set, bbaasshh allows patterns which match no files (see + PPaatthhnnaammee EExxppaannssiioonn above) to expand to a null string, rather than themselves. pprrooggccoommpp If set, the programmable completion facilities (see PPrroo-- @@ -4444,44 +4449,44 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS enabled by default. pprroommppttvvaarrss If set, prompt strings undergo parameter expansion, com- - mand substitution, arithmetic expansion, and quote - removal after being expanded as described in PPRROOMMPPTTIINNGG + mand substitution, arithmetic expansion, and quote + removal after being expanded as described in PPRROOMMPPTTIINNGG above. This option is enabled by default. rreessttrriicctteedd__sshheellll - The shell sets this option if it is started in + The shell sets this option if it is started in restricted mode (see RREESSTTRRIICCTTEEDD SSHHEELLLL below). The value - may not be changed. This is not reset when the startup - files are executed, allowing the startup files to dis- + may not be changed. This is not reset when the startup + files are executed, allowing the startup files to dis- cover whether or not a shell is restricted. sshhiifftt__vveerrbboossee - If set, the sshhiifftt builtin prints an error message when + If set, the sshhiifftt builtin prints an error message when the shift count exceeds the number of positional parame- ters. ssoouurrcceeppaatthh If set, the ssoouurrccee (..) builtin uses the value of PPAATTHH to - find the directory containing the file supplied as an + find the directory containing the file supplied as an argument. This option is enabled by default. xxppgg__eecchhoo - If set, the eecchhoo builtin expands backslash-escape + If set, the eecchhoo builtin expands backslash-escape sequences by default. ssuussppeenndd [--ff] - Suspend the execution of this shell until it receives a SSIIGGCCOONNTT - signal. The --ff option says not to complain if this is a login - shell; just suspend anyway. The return status is 0 unless the + Suspend the execution of this shell until it receives a SSIIGGCCOONNTT + signal. The --ff option says not to complain if this is a login + shell; just suspend anyway. The return status is 0 unless the shell is a login shell and --ff is not supplied, or if job control is not enabled. tteesstt _e_x_p_r [[ _e_x_p_r ]] - Return a status of 0 or 1 depending on the evaluation of the - conditional expression _e_x_p_r. Each operator and operand must be - a separate argument. Expressions are composed of the primaries + Return a status of 0 or 1 depending on the evaluation of the + conditional expression _e_x_p_r. Each operator and operand must be + a separate argument. Expressions are composed of the primaries described above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS. - Expressions may be combined using the following operators, + Expressions may be combined using the following operators, listed in decreasing order of precedence. !! _e_x_p_r True if _e_x_p_r is false. (( _e_x_p_r )) - Returns the value of _e_x_p_r. This may be used to override + Returns the value of _e_x_p_r. This may be used to override the normal precedence of operators. _e_x_p_r_1 -aa _e_x_p_r_2 True if both _e_x_p_r_1 and _e_x_p_r_2 are true. @@ -4498,109 +4503,109 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS null. 2 arguments If the first argument is !!, the expression is true if and - only if the second argument is null. If the first argu- - ment is one of the unary conditional operators listed - above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS, the expression is + only if the second argument is null. If the first argu- + ment is one of the unary conditional operators listed + above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS, the expression is true if the unary test is true. If the first argument is not a valid unary conditional operator, the expression is false. 3 arguments - If the second argument is one of the binary conditional + If the second argument is one of the binary conditional operators listed above under CCOONNDDIITTIIOONNAALL EEXXPPRREESSSSIIOONNSS, the result of the expression is the result of the binary test - using the first and third arguments as operands. If the - first argument is !!, the value is the negation of the - two-argument test using the second and third arguments. + using the first and third arguments as operands. If the + first argument is !!, the value is the negation of the + two-argument test using the second and third arguments. If the first argument is exactly (( and the third argument - is exactly )), the result is the one-argument test of the - second argument. Otherwise, the expression is false. - The --aa and --oo operators are considered binary operators + is exactly )), the result is the one-argument test of the + second argument. Otherwise, the expression is false. + The --aa and --oo operators are considered binary operators in this case. 4 arguments If the first argument is !!, the result is the negation of - the three-argument expression composed of the remaining + the three-argument expression composed of the remaining arguments. Otherwise, the expression is parsed and eval- - uated according to precedence using the rules listed + uated according to precedence using the rules listed above. 5 or more arguments - The expression is parsed and evaluated according to + The expression is parsed and evaluated according to precedence using the rules listed above. - ttiimmeess Print the accumulated user and system times for the shell and + ttiimmeess Print the accumulated user and system times for the shell and for processes run from the shell. The return status is 0. ttrraapp [--llpp] [[_a_r_g] _s_i_g_s_p_e_c ...] - The command _a_r_g is to be read and executed when the shell - receives signal(s) _s_i_g_s_p_e_c. If _a_r_g is absent (and there is a - single _s_i_g_s_p_e_c) or --, each specified signal is reset to its - original disposition (the value it had upon entrance to the - shell). If _a_r_g is the null string the signal specified by each - _s_i_g_s_p_e_c is ignored by the shell and by the commands it invokes. - If _a_r_g is not present and --pp has been supplied, then the trap - commands associated with each _s_i_g_s_p_e_c are displayed. If no - arguments are supplied or if only --pp is given, ttrraapp prints the - list of commands associated with each signal. The --ll option - causes the shell to print a list of signal names and their cor- - responding numbers. Each _s_i_g_s_p_e_c is either a signal name - defined in <_s_i_g_n_a_l_._h>, or a signal number. Signal names are - case insensitive and the SIG prefix is optional. If a _s_i_g_s_p_e_c - is EEXXIITT (0) the command _a_r_g is executed on exit from the shell. - If a _s_i_g_s_p_e_c is DDEEBBUUGG, the command _a_r_g is executed before every + The command _a_r_g is to be read and executed when the shell + receives signal(s) _s_i_g_s_p_e_c. If _a_r_g is absent (and there is a + single _s_i_g_s_p_e_c) or --, each specified signal is reset to its + original disposition (the value it had upon entrance to the + shell). If _a_r_g is the null string the signal specified by each + _s_i_g_s_p_e_c is ignored by the shell and by the commands it invokes. + If _a_r_g is not present and --pp has been supplied, then the trap + commands associated with each _s_i_g_s_p_e_c are displayed. If no + arguments are supplied or if only --pp is given, ttrraapp prints the + list of commands associated with each signal. The --ll option + causes the shell to print a list of signal names and their cor- + responding numbers. Each _s_i_g_s_p_e_c is either a signal name + defined in <_s_i_g_n_a_l_._h>, or a signal number. Signal names are + case insensitive and the SIG prefix is optional. If a _s_i_g_s_p_e_c + is EEXXIITT (0) the command _a_r_g is executed on exit from the shell. + If a _s_i_g_s_p_e_c is DDEEBBUUGG, the command _a_r_g is executed before every _s_i_m_p_l_e _c_o_m_m_a_n_d, _f_o_r command, _c_a_s_e command, _s_e_l_e_c_t command, every arithmetic _f_o_r command, and before the first command executes in - a shell function (see SSHHEELLLL GGRRAAMMMMAARR above). Refer to the - description of the eexxttddeebbuugg option to the sshhoopptt builtin for - details of its effect on the DDEEBBUUGG trap. If a _s_i_g_s_p_e_c is EERRRR, - the command _a_r_g is executed whenever a simple command has a - non-zero exit status, subject to the following conditions. The - EERRRR trap is not executed if the failed command is part of the - command list immediately following a wwhhiillee or uunnttiill keyword, + a shell function (see SSHHEELLLL GGRRAAMMMMAARR above). Refer to the + description of the eexxttddeebbuugg option to the sshhoopptt builtin for + details of its effect on the DDEEBBUUGG trap. If a _s_i_g_s_p_e_c is EERRRR, + the command _a_r_g is executed whenever a simple command has a + non-zero exit status, subject to the following conditions. The + EERRRR trap is not executed if the failed command is part of the + command list immediately following a wwhhiillee or uunnttiill keyword, part of the test in an _i_f statement, part of a &&&& or |||| list, or - if the command's return value is being inverted via !!. These - are the same conditions obeyed by the eerrrreexxiitt option. If a + if the command's return value is being inverted via !!. These + are the same conditions obeyed by the eerrrreexxiitt option. If a _s_i_g_s_p_e_c is RREETTUURRNN, the command _a_r_g is executed each time a shell function or a script executed with the .. or ssoouurrccee builtins fin- ishes executing. Signals ignored upon entry to the shell cannot - be trapped or reset. Trapped signals are reset to their origi- - nal values in a child process when it is created. The return - status is false if any _s_i_g_s_p_e_c is invalid; otherwise ttrraapp + be trapped or reset. Trapped signals are reset to their origi- + nal values in a child process when it is created. The return + status is false if any _s_i_g_s_p_e_c is invalid; otherwise ttrraapp returns true. ttyyppee [--aaffttppPP] _n_a_m_e [_n_a_m_e ...] - With no options, indicate how each _n_a_m_e would be interpreted if + With no options, indicate how each _n_a_m_e would be interpreted if used as a command name. If the --tt option is used, ttyyppee prints a - string which is one of _a_l_i_a_s, _k_e_y_w_o_r_d, _f_u_n_c_t_i_o_n, _b_u_i_l_t_i_n, or - _f_i_l_e if _n_a_m_e is an alias, shell reserved word, function, - builtin, or disk file, respectively. If the _n_a_m_e is not found, - then nothing is printed, and an exit status of false is - returned. If the --pp option is used, ttyyppee either returns the + string which is one of _a_l_i_a_s, _k_e_y_w_o_r_d, _f_u_n_c_t_i_o_n, _b_u_i_l_t_i_n, or + _f_i_l_e if _n_a_m_e is an alias, shell reserved word, function, + builtin, or disk file, respectively. If the _n_a_m_e is not found, + then nothing is printed, and an exit status of false is + returned. If the --pp option is used, ttyyppee either returns the name of the disk file that would be executed if _n_a_m_e were speci- fied as a command name, or nothing if ``type -t name'' would not - return _f_i_l_e. The --PP option forces a PPAATTHH search for each _n_a_m_e, + return _f_i_l_e. The --PP option forces a PPAATTHH search for each _n_a_m_e, even if ``type -t name'' would not return _f_i_l_e. If a command is - hashed, --pp and --PP print the hashed value, not necessarily the + hashed, --pp and --PP print the hashed value, not necessarily the file that appears first in PPAATTHH. If the --aa option is used, ttyyppee - prints all of the places that contain an executable named _n_a_m_e. - This includes aliases and functions, if and only if the --pp - option is not also used. The table of hashed commands is not - consulted when using --aa. The --ff option suppresses shell func- - tion lookup, as with the ccoommmmaanndd builtin. ttyyppee returns true if + prints all of the places that contain an executable named _n_a_m_e. + This includes aliases and functions, if and only if the --pp + option is not also used. The table of hashed commands is not + consulted when using --aa. The --ff option suppresses shell func- + tion lookup, as with the ccoommmmaanndd builtin. ttyyppee returns true if any of the arguments are found, false if none are found. uulliimmiitt [--SSHHaaccddffllmmnnppssttuuvv [_l_i_m_i_t]] - Provides control over the resources available to the shell and - to processes started by it, on systems that allow such control. + Provides control over the resources available to the shell and + to processes started by it, on systems that allow such control. The --HH and --SS options specify that the hard or soft limit is set - for the given resource. A hard limit cannot be increased once - it is set; a soft limit may be increased up to the value of the - hard limit. If neither --HH nor --SS is specified, both the soft - and hard limits are set. The value of _l_i_m_i_t can be a number in + for the given resource. A hard limit cannot be increased once + it is set; a soft limit may be increased up to the value of the + hard limit. If neither --HH nor --SS is specified, both the soft + and hard limits are set. The value of _l_i_m_i_t can be a number in the unit specified for the resource or one of the special values - hhaarrdd, ssoofftt, or uunnlliimmiitteedd, which stand for the current hard - limit, the current soft limit, and no limit, respectively. If - _l_i_m_i_t is omitted, the current value of the soft limit of the - resource is printed, unless the --HH option is given. When more - than one resource is specified, the limit name and unit are + hhaarrdd, ssoofftt, or uunnlliimmiitteedd, which stand for the current hard + limit, the current soft limit, and no limit, respectively. If + _l_i_m_i_t is omitted, the current value of the soft limit of the + resource is printed, unless the --HH option is given. When more + than one resource is specified, the limit name and unit are printed before the value. Other options are interpreted as fol- lows: --aa All current limits are reported @@ -4614,63 +4619,63 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS --pp The pipe size in 512-byte blocks (this may not be set) --ss The maximum stack size --tt The maximum amount of cpu time in seconds - --uu The maximum number of processes available to a single + --uu The maximum number of processes available to a single user - --vv The maximum amount of virtual memory available to the + --vv The maximum amount of virtual memory available to the shell If _l_i_m_i_t is given, it is the new value of the specified resource (the --aa option is display only). If no option is given, then --ff - is assumed. Values are in 1024-byte increments, except for --tt, - which is in seconds, --pp, which is in units of 512-byte blocks, - and --nn and --uu, which are unscaled values. The return status is - 0 unless an invalid option or argument is supplied, or an error + is assumed. Values are in 1024-byte increments, except for --tt, + which is in seconds, --pp, which is in units of 512-byte blocks, + and --nn and --uu, which are unscaled values. The return status is + 0 unless an invalid option or argument is supplied, or an error occurs while setting a new limit. uummaasskk [--pp] [--SS] [_m_o_d_e] The user file-creation mask is set to _m_o_d_e. If _m_o_d_e begins with - a digit, it is interpreted as an octal number; otherwise it is - interpreted as a symbolic mode mask similar to that accepted by - _c_h_m_o_d(1). If _m_o_d_e is omitted, the current value of the mask is - printed. The --SS option causes the mask to be printed in sym- - bolic form; the default output is an octal number. If the --pp + a digit, it is interpreted as an octal number; otherwise it is + interpreted as a symbolic mode mask similar to that accepted by + _c_h_m_o_d(1). If _m_o_d_e is omitted, the current value of the mask is + printed. The --SS option causes the mask to be printed in sym- + bolic form; the default output is an octal number. If the --pp option is supplied, and _m_o_d_e is omitted, the output is in a form that may be reused as input. The return status is 0 if the mode - was successfully changed or if no _m_o_d_e argument was supplied, + was successfully changed or if no _m_o_d_e argument was supplied, and false otherwise. uunnaalliiaass [-aa] [_n_a_m_e ...] - Remove each _n_a_m_e from the list of defined aliases. If --aa is - supplied, all alias definitions are removed. The return value + Remove each _n_a_m_e from the list of defined aliases. If --aa is + supplied, all alias definitions are removed. The return value is true unless a supplied _n_a_m_e is not a defined alias. uunnsseett [-ffvv] [_n_a_m_e ...] - For each _n_a_m_e, remove the corresponding variable or function. + For each _n_a_m_e, remove the corresponding variable or function. If no options are supplied, or the --vv option is given, each _n_a_m_e - refers to a shell variable. Read-only variables may not be + refers to a shell variable. Read-only variables may not be unset. If --ff is specifed, each _n_a_m_e refers to a shell function, - and the function definition is removed. Each unset variable or - function is removed from the environment passed to subsequent + and the function definition is removed. Each unset variable or + function is removed from the environment passed to subsequent commands. If any of RRAANNDDOOMM, SSEECCOONNDDSS, LLIINNEENNOO, HHIISSTTCCMMDD, FFUUNNCCNNAAMMEE, - GGRROOUUPPSS, or DDIIRRSSTTAACCKK are unset, they lose their special proper- - ties, even if they are subsequently reset. The exit status is + GGRROOUUPPSS, or DDIIRRSSTTAACCKK are unset, they lose their special proper- + ties, even if they are subsequently reset. The exit status is true unless a _n_a_m_e is readonly. wwaaiitt [_n] - Wait for the specified process and return its termination sta- - tus. _n may be a process ID or a job specification; if a job - spec is given, all processes in that job's pipeline are waited - for. If _n is not given, all currently active child processes + Wait for the specified process and return its termination sta- + tus. _n may be a process ID or a job specification; if a job + spec is given, all processes in that job's pipeline are waited + for. If _n is not given, all currently active child processes are waited for, and the return status is zero. If _n specifies a - non-existent process or job, the return status is 127. Other- - wise, the return status is the exit status of the last process + non-existent process or job, the return status is 127. Other- + wise, the return status is the exit status of the last process or job waited for. RREESSTTRRIICCTTEEDD SSHHEELLLL If bbaasshh is started with the name rrbbaasshh, or the --rr option is supplied at - invocation, the shell becomes restricted. A restricted shell is used - to set up an environment more controlled than the standard shell. It - behaves identically to bbaasshh with the exception that the following are + invocation, the shell becomes restricted. A restricted shell is used + to set up an environment more controlled than the standard shell. It + behaves identically to bbaasshh with the exception that the following are disallowed or not performed: +o changing directories with ccdd @@ -4679,28 +4684,28 @@ RREESSTTRRIICCTTEEDD SSHHEELLLL +o specifying command names containing // - +o specifying a file name containing a // as an argument to the .. + +o specifying a file name containing a // as an argument to the .. builtin command - +o Specifying a filename containing a slash as an argument to the + +o Specifying a filename containing a slash as an argument to the --pp option to the hhaasshh builtin command - +o importing function definitions from the shell environment at + +o importing function definitions from the shell environment at startup - +o parsing the value of SSHHEELLLLOOPPTTSS from the shell environment at + +o parsing the value of SSHHEELLLLOOPPTTSS from the shell environment at startup - +o redirecting output using the >, >|, <>, >&, &>, and >> redirec- + +o redirecting output using the >, >|, <>, >&, &>, and >> redirec- tion operators +o using the eexxeecc builtin command to replace the shell with another command - +o adding or deleting builtin commands with the --ff and --dd options + +o adding or deleting builtin commands with the --ff and --dd options to the eennaabbllee builtin command - +o Using the eennaabbllee builtin command to enable disabled shell + +o Using the eennaabbllee builtin command to enable disabled shell builtins +o specifying the --pp option to the ccoommmmaanndd builtin command @@ -4710,14 +4715,14 @@ RREESSTTRRIICCTTEEDD SSHHEELLLL These restrictions are enforced after any startup files are read. When a command that is found to be a shell script is executed (see CCOOMM-- - MMAANNDD EEXXEECCUUTTIIOONN above), rrbbaasshh turns off any restrictions in the shell + MMAANNDD EEXXEECCUUTTIIOONN above), rrbbaasshh turns off any restrictions in the shell spawned to execute the script. SSEEEE AALLSSOO _B_a_s_h _R_e_f_e_r_e_n_c_e _M_a_n_u_a_l, Brian Fox and Chet Ramey _T_h_e _G_n_u _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y, Brian Fox and Chet Ramey _T_h_e _G_n_u _H_i_s_t_o_r_y _L_i_b_r_a_r_y, Brian Fox and Chet Ramey - _P_o_r_t_a_b_l_e _O_p_e_r_a_t_i_n_g _S_y_s_t_e_m _I_n_t_e_r_f_a_c_e _(_P_O_S_I_X_) _P_a_r_t _2_: _S_h_e_l_l _a_n_d _U_t_i_l_i_- + _P_o_r_t_a_b_l_e _O_p_e_r_a_t_i_n_g _S_y_s_t_e_m _I_n_t_e_r_f_a_c_e _(_P_O_S_I_X_) _P_a_r_t _2_: _S_h_e_l_l _a_n_d _U_t_i_l_i_- _t_i_e_s, IEEE _s_h(1), _k_s_h(1), _c_s_h(1) _e_m_a_c_s(1), _v_i(1) @@ -4733,7 +4738,7 @@ FFIILLEESS _~_/_._b_a_s_h_r_c The individual per-interactive-shell startup file _~_/_._b_a_s_h___l_o_g_o_u_t - The individual login shell cleanup file, executed when a login + The individual login shell cleanup file, executed when a login shell exits _~_/_._i_n_p_u_t_r_c Individual _r_e_a_d_l_i_n_e initialization file @@ -4747,14 +4752,14 @@ AAUUTTHHOORRSS BBUUGG RREEPPOORRTTSS If you find a bug in bbaasshh,, you should report it. But first, you should - make sure that it really is a bug, and that it appears in the latest - version of bbaasshh. The latest version is always available from + make sure that it really is a bug, and that it appears in the latest + version of bbaasshh. The latest version is always available from _f_t_p_:_/_/_f_t_p_._g_n_u_._o_r_g_/_p_u_b_/_b_a_s_h_/. - Once you have determined that a bug actually exists, use the _b_a_s_h_b_u_g - command to submit a bug report. If you have a fix, you are encouraged - to mail that as well! Suggestions and `philosophical' bug reports may - be mailed to _b_u_g_-_b_a_s_h_@_g_n_u_._o_r_g or posted to the Usenet newsgroup + Once you have determined that a bug actually exists, use the _b_a_s_h_b_u_g + command to submit a bug report. If you have a fix, you are encouraged + to mail that as well! Suggestions and `philosophical' bug reports may + be mailed to _b_u_g_-_b_a_s_h_@_g_n_u_._o_r_g or posted to the Usenet newsgroup ggnnuu..bbaasshh..bbuugg. ALL bug reports should include: @@ -4765,7 +4770,7 @@ BBUUGG RREEPPOORRTTSS A description of the bug behaviour A short script or `recipe' which exercises the bug - _b_a_s_h_b_u_g inserts the first three items automatically into the template + _b_a_s_h_b_u_g inserts the first three items automatically into the template it provides for filing a bug report. Comments and bug reports concerning this manual page should be directed @@ -4782,19 +4787,19 @@ BBUUGGSS Shell builtin commands and functions are not stoppable/restartable. Compound commands and command sequences of the form `a ; b ; c' are not - handled gracefully when process suspension is attempted. When a pro- + handled gracefully when process suspension is attempted. When a pro- cess is stopped, the shell immediately executes the next command in the sequence. It suffices to place the sequence of commands between paren- theses to force it into a subshell, which may be stopped as a unit. - Commands inside of $$((...)) command substitution are not parsed until - substitution is attempted. This will delay error reporting until some + Commands inside of $$((...)) command substitution are not parsed until + substitution is attempted. This will delay error reporting until some time after the command is entered. For example, unmatched parentheses, - even inside shell comments, will result in error messages while the + even inside shell comments, will result in error messages while the construct is being read. Array variables may not (yet) be exported. -GNU Bash-3.0 2004 June 26 BASH(1) +GNU Bash-3.0 2004 Sep 17 BASH(1) diff --git a/doc/bash.1 b/doc/bash.1 index 348343c93..cbd986df6 100644 --- a/doc/bash.1 +++ b/doc/bash.1 @@ -115,7 +115,7 @@ when invoking an interactive shell. .TP .B \-D A list of all double-quoted strings preceded by \fB$\fP -is printed on the standard ouput. +is printed on the standard output. These are the strings that are subject to language translation when the current locale is not \fBC\fP or \fBPOSIX\fP. @@ -1963,9 +1963,7 @@ job identifier (see .B JOB CONTROL below). If set to any other value, the supplied string must be a prefix of a stopped job's name; this provides functionality -analogous to the -.B % -job identifier. +analogous to the \fB%\fP\fIstring\fP job identifier. .TP .B histchars The two or three characters which control history expansion @@ -5287,7 +5285,7 @@ of an \fIinputrc\fP file. .TP .B dump\-macros Print all of the readline key sequences bound to macros and the -strings they ouput. If a numeric argument is supplied, +strings they output. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an \fIinputrc\fP file. .TP diff --git a/doc/bash.1~ b/doc/bash.1~ index 5fb9b630d..cf7a9d030 100644 --- a/doc/bash.1~ +++ b/doc/bash.1~ @@ -6,12 +6,12 @@ .\" Case Western Reserve University .\" chet@po.CWRU.Edu .\" -.\" Last Change: Fri Aug 27 12:14:46 EDT 2004 +.\" Last Change: Fri Sep 17 22:44:17 EDT 2004 .\" .\" bash_builtins, strip all but Built-Ins section .if \n(zZ=1 .ig zZ .if \n(zY=1 .ig zY -.TH BASH 1 "2004 June 26" "GNU Bash-3.0" +.TH BASH 1 "2004 Sep 17" "GNU Bash-3.0" .\" .\" There's some problem with having a `@' .\" in a tagged paragraph with the BSD man macros. @@ -115,7 +115,7 @@ when invoking an interactive shell. .TP .B \-D A list of all double-quoted strings preceded by \fB$\fP -is printed on the standard ouput. +is printed on the standard output. These are the strings that are subject to language translation when the current locale is not \fBC\fP or \fBPOSIX\fP. @@ -1228,8 +1228,8 @@ The command argument to the \fB\-c\fP invocation option. An array variable whose members are the line numbers in source files corresponding to each member of \fBFUNCNAME\fP. \fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP is the line number in the source -file where \fB${FUNCNAME[\fP\fI$i + 1\fP\fB]}\fP was called. -The corresponding source file name is \fB${BASH_SOURCE[\fP\fI$i + 1\fP\fB]}\fB. +file where \fB${FUNCNAME[\fP\fI$ifP\fB]}\fP was called. +The corresponding source file name is \fB${BASH_SOURCE[\fP\fI$i\fP\fB]}\fB. Use \fBLINENO\fP to obtain the current line number. .TP .B BASH_REMATCH @@ -1963,9 +1963,7 @@ job identifier (see .B JOB CONTROL below). If set to any other value, the supplied string must be a prefix of a stopped job's name; this provides functionality -analogous to the -.B % -job identifier. +analogous to the \fB%\fP\fIstring\fP job identifier. .TP .B histchars The two or three characters which control history expansion diff --git a/doc/bash.html b/doc/bash.html index 706270dfa..c2e579ce5 100644 --- a/doc/bash.html +++ b/doc/bash.html @@ -2,7 +2,7 @@ BASH(1) Manual Page -
BASH(1)2004 June 26BASH(1) +BASH(1)2004 Sep 17BASH(1)

Index
@@ -1603,8 +1603,8 @@ The command argument to the -c invocation option. An array variable whose members are the line numbers in source files corresponding to each member of FUNCNAME. ${BASH_LINENO[$i]} is the line number in the source -file where ${FUNCNAME[$i + 1]} was called. -The corresponding source file name is ${BASH_SOURCE[$i + 1]}. +file where ${FUNCNAME[$ifP]} was called. +The corresponding source file name is ${BASH_SOURCE[$i]}. Use LINENO to obtain the current line number.
BASH_REMATCH @@ -5096,7 +5096,7 @@ sends a to all jobs when an interactive login shell exits.

-If Bbash is waiting for a command to complete and receives a signal +If bash is waiting for a command to complete and receives a signal for which a trap has been set, the trap will not be executed until the command completes. When bash is waiting for an asynchronous command via the wait @@ -8023,6 +8023,12 @@ suppressing trailing spaces). Intended to be used with shell functions.

Tell readline not to append a space (the default) to words completed at the end of the line. +
plusdirs + +
+After any matches defined by the compspec are generated, +directory name completion is attempted and any +matches are added to the results of the other actions.
-A action
@@ -11367,6 +11373,6 @@ Array variables may not (yet) be exported.
This document was created by man2html from bash.1.
-Time: 30 August 2004 08:27:20 EDT +Time: 21 September 2004 11:57:09 EDT diff --git a/doc/bash.ps b/doc/bash.ps index 33df4405e..2e8788d9b 100644 --- a/doc/bash.ps +++ b/doc/bash.ps @@ -1,6 +1,6 @@ %!PS-Adobe-3.0 %%Creator: groff version 1.18.1 -%%CreationDate: Mon Aug 30 08:27:13 2004 +%%CreationDate: Tue Sep 21 11:57:02 2004 %%DocumentNeededResources: font Times-Roman %%+ font Times-Bold %%+ font Times-Italic @@ -321,7 +321,7 @@ E F2(po)2.5 E F0(\(portable object\) \214le format.)2.5 E F2 144 686.4 Q .3 -.15(ve \()-.25 H(see).15 E F4(INV)2.5 E(OCA)-.405 E (TION)-.855 E F0(belo)2.25 E(w\).)-.25 E F2(\255\255login)108 703.2 Q F0 (Equi)144 715.2 Q -.25(va)-.25 G(lent to).25 E F22.5 E F0(.)A -(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(1)202.335 E 0 Cg EP +(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(1)204 E 0 Cg EP %%Page: 2 2 %%BeginPageSetup BP @@ -443,7 +443,7 @@ F(ariable)-.25 E F3 -.27(BA)108 679.2 S(SH_ENV).27 E F0 1.01(in the en) 108 727.2 S 2.5(tt).2 G(he v)-2.5 E(alue of the)-.25 E F3 -.666(PA)2.5 G (TH)-.189 E F0 -.25(va)2.25 G (riable is not used to search for the \214le name.).25 E(GNU Bash-3.0)72 -768 Q(2004 June 26)147.345 E(2)202.335 E 0 Cg EP +768 Q(2004 Sep 17)149.01 E(2)204 E 0 Cg EP %%Page: 3 3 %%BeginPageSetup BP @@ -568,7 +568,7 @@ F1(Pipelines)87 679.2 Q F0(A)108 691.2 Q F2(pipeline)2.919 E F0 .419 F F1(|)2.92 E F0 5.42(.T)C .42(he format for a pipeline)-5.42 F(is:)108 703.2 Q([)144 720 Q F1(time)A F0([)2.5 E F1A F0(]] [ ! ])A F2 (command)2.5 E F0([)2.5 E F1(|)2.5 E F2(command2)2.5 E F0(... ])2.5 E -(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(3)202.335 E 0 Cg EP +(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(3)204 E 0 Cg EP %%Page: 4 4 %%BeginPageSetup BP @@ -688,8 +688,8 @@ A({)108 573.6 Q F1(list)2.5 E F0 2.5(;})C F1(list)3.89 E F0 .402 F(SIONS)144 727.2 Q F5(.)A F0 -.8(Wo)5.633 G 1.133 (rd splitting and pathname e).8 F 1.133 (xpansion are not performed on the w)-.15 F 1.133(ords between the)-.1 F -F3([[)3.632 E F0(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(4)202.335 -E 0 Cg EP +F3([[)3.632 E F0(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(4)204 E 0 Cg +EP %%Page: 5 5 %%BeginPageSetup BP @@ -828,8 +828,8 @@ F F2(name)144 727.2 Q F0 .759(to be set to null.)3.439 F .759 (The line read is sa)5.759 F -.15(ve)-.2 G 3.26(di).15 G 3.26(nt)-3.26 G .76(he v)-3.26 F(ariable)-.25 E F1(REPL)3.26 E(Y)-.92 E F0 5.76(.T)C(he) -5.76 E F2(list)3.35 E F0 .76(is e)3.94 F -.15(xe)-.15 G .76 -(cuted after).15 F(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(5) -202.335 E 0 Cg EP +(cuted after).15 F(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(5)204 E 0 +Cg EP %%Page: 6 6 %%BeginPageSetup BP @@ -964,7 +964,7 @@ E(xpansion.)-.15 E(There are three quoting mechanisms: the)108 708 Q F2 G(he)-2.974 E F2 .474(escape c)2.974 F(har)-.15 E(acter)-.15 E F0 5.474 (.I).73 G 2.974(tp)-5.474 G(reserv)-2.974 E .474(es the literal v)-.15 F .474(alue of the ne)-.25 F .474(xt character that)-.15 F(GNU Bash-3.0)72 -768 Q(2004 June 26)147.345 E(6)202.335 E 0 Cg EP +768 Q(2004 Sep 17)149.01 E(6)204 E 0 Cg EP %%Page: 7 7 %%BeginPageSetup BP @@ -1081,7 +1081,7 @@ d by one or more digits, other than the single digit 0.)3.935 F(Posi-) 5.706 E .445(tional parameters are assigned from the shell')108 729.6 R 2.944(sa)-.55 G -.18(rg)-2.944 G .444(uments when it is in).18 F -.2(vo) -.4 G -.1(ke).2 G .444(d, and may be reassigned using).1 F(GNU Bash-3.0) -72 768 Q(2004 June 26)147.345 E(7)202.335 E 0 Cg EP +72 768 Q(2004 Sep 17)149.01 E(7)204 E 0 Cg EP %%Page: 8 8 %%BeginPageSetup BP @@ -1197,8 +1197,8 @@ F F1 -.3(BA)144 655.2 S(SH_ARGV).3 E F0(.)A F1 -.3(BA)108 667.2 S 691.2 Q -.15(xe)-.15 G(cuting at the time of the trap.).15 E F1 -.3(BA) 108 703.2 S(SH_EXECUTION_STRING).3 E F0(The command ar)144 715.2 Q (gument to the)-.18 E F12.5 E F0(in)2.5 E -.2(vo)-.4 G -(cation option.).2 E(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(8) -202.335 E 0 Cg EP +(cation option.).2 E(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(8)204 E +0 Cg EP %%Page: 9 9 %%BeginPageSetup BP @@ -1210,16 +1210,15 @@ BP F1(FUNCN)5.444 E(AME)-.2 E F0(.)A F1(${B)7.944 E(ASH_LINENO[)-.3 E/F2 10 /Times-Italic@0 SF($i)A F1(]})A F0 2.944 (is the line number in the source \214le where)5.444 F F1(${FUNCN)144 -120 Q(AME[)-.2 E F2 8.951($i + 1)B F1(]})A F0 -.1(wa)11.451 G 11.451(sc) -.1 G 11.451(alled. The)-11.451 F 8.951 -(corresponding source \214le name is)11.451 F F1(${B)144 132 Q -(ASH_SOURCE[)-.3 E F2($i + 1)A F1 2.5(]}. Use)B -(LINENO to obtain the curr)2.5 E(ent line number)-.18 E(.)-1 E -.3(BA) -108 144 S(SH_REMA).3 E(TCH)-.95 E F0 .005(An array v)144 156 R .005 -(ariable whose members are assigned by the)-.25 F F1(=~)2.506 E F0 .006 -(binary operator to the)2.506 F F1([[)2.506 E F0 .006(conditional com-) -2.506 F 2.507(mand. The)144 168 R .007(element with inde)2.507 F 2.507 -(x0i)-.15 G 2.507(st)-2.507 G .007 +120 Q(AME[)-.2 E F2($ifP)A F1(]})A F2 12.109(was called.)14.609 F 12.109 +(The corr)17.109 F 12.109(esponding sour)-.37 F 12.108 +(ce \214le name is)-.37 F F1(${B)144 132 Q(ASH_SOURCE[)-.3 E F2($i)A F1 +2.5(]}. Use)B(LINENO to obtain the curr)2.5 E(ent line number)-.18 E(.) +-1 E -.3(BA)108 144 S(SH_REMA).3 E(TCH)-.95 E F0 .005(An array v)144 156 +R .005(ariable whose members are assigned by the)-.25 F F1(=~)2.506 E F0 +.006(binary operator to the)2.506 F F1([[)2.506 E F0 .006 +(conditional com-)2.506 F 2.507(mand. The)144 168 R .007 +(element with inde)2.507 F 2.507(x0i)-.15 G 2.507(st)-2.507 G .007 (he portion of the string matching the entire re)-2.507 F .006(gular e) -.15 F(xpression.)-.15 E .997(The element with inde)144 180 R(x)-.15 E F2(n)3.497 E F0 .997(is the portion of the string matching the)3.497 F @@ -1298,7 +1297,7 @@ F(in)144 577.2 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(db).1 G 2.5(yt)-2.5 G 1.094(Directories appear in the stack in the order the)144 723.6 R 3.594 (ya)-.15 G 1.095(re displayed by the)-3.594 F F1(dirs)3.595 E F0 -.2(bu) 3.595 G 3.595(iltin. Assigning).2 F(to)3.595 E(GNU Bash-3.0)72 768 Q -(2004 June 26)147.345 E(9)202.335 E 0 Cg EP +(2004 Sep 17)149.01 E(9)204 E 0 Cg EP %%Page: 10 10 %%BeginPageSetup BP @@ -1387,7 +1386,7 @@ s the operating system on which)144 633.6 R F1(bash)2.829 E F0 .329 (ground pipeline \(which may contain only a single command\).)-.15 E F1 (PPID)108 703.2 Q F0(The process ID of the shell')12.67 E 2.5(sp)-.55 G 2.5(arent. This)-2.5 F -.25(va)2.5 G(riable is readonly).25 E(.)-.65 E -(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(10)197.335 E 0 Cg EP +(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(10)199 E 0 Cg EP %%Page: 11 11 %%BeginPageSetup BP @@ -1488,7 +1487,7 @@ me e)-3.118 F(xpan-)-.15 E 3.131(sion. If)144 710.4 R 3.132<618c>3.131 G (xpansion pattern also matches one of the patterns in)-.15 F F2 (GLOBIGNORE)144 722.4 Q F3(,)A F0(it is remo)2.25 E -.15(ve)-.15 G 2.5 (df).15 G(rom the list of matches.)-2.5 E(GNU Bash-3.0)72 768 Q -(2004 June 26)147.345 E(11)197.335 E 0 Cg EP +(2004 Sep 17)149.01 E(11)199 E 0 Cg EP %%Page: 12 12 %%BeginPageSetup BP @@ -1610,7 +1609,7 @@ F3(EOF)2.5 E F0(signi\214es the end of input to the shell.)2.25 E F1 3.936 G(adline).18 E F0 1.436(startup \214le, o)3.936 F -.15(ve)-.15 G 1.436(rriding the def).15 F 1.436(ault of)-.1 F F2(~/.inputr)5.602 E(c) -.37 E F0(\(see)5.602 E F3(READLINE)3.936 E F0(belo)144 708 Q(w\).)-.25 -E(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(12)197.335 E 0 Cg EP +E(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(12)199 E 0 Cg EP %%Page: 13 13 %%BeginPageSetup BP @@ -1713,7 +1712,7 @@ E F0(enables)2.5 E F4(posix mode)2.5 E F0 2.5(,a)C 2.5(si)-2.5 G 2.5(ft) (alue of this parameter is used as the prompt for the)-.25 F F1(select) 3.615 E F0 1.116(command \(see)3.616 F F2 1.116(SHELL GRAM-)3.616 F(MAR) 144 720 Q F0(abo)2.25 E -.15(ve)-.15 G(\).).15 E(GNU Bash-3.0)72 768 Q -(2004 June 26)147.345 E(13)197.335 E 0 Cg EP +(2004 Sep 17)149.01 E(13)199 E 0 Cg EP %%Page: 14 14 %%BeginPageSetup BP @@ -1831,7 +1830,7 @@ char)144 694.8 R(-)-.2 E 1.293(acter of a w)144 706.8 R 1.293 (skipped for the remaining w)144 718.8 R .38(ords on the line.)-.1 F .379(It does not necessarily cause the shell parser to treat)5.379 F (the rest of the line as a comment.)144 730.8 Q(GNU Bash-3.0)72 768 Q -(2004 June 26)147.345 E(14)197.335 E 0 Cg EP +(2004 Sep 17)149.01 E(14)199 E 0 Cg EP %%Page: 15 15 %%BeginPageSetup BP @@ -1978,7 +1977,7 @@ resulting string, e)108 696 R .659(xpanding left to)-.15 F(right.)108 708 Q .719(Brace e)108 724.8 R .719(xpansions may be nested.)-.15 F .719 (The results of each e)5.719 F .719 (xpanded string are not sorted; left to right order is)-.15 F -(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(15)197.335 E 0 Cg EP +(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(15)199 E 0 Cg EP %%Page: 16 16 %%BeginPageSetup BP @@ -2104,8 +2103,8 @@ F1($)A F0 4.106('c)C 1.606(haracter introduces parameter e)-4.106 F 693.6 R F1(})A F0 3.69('n)C 1.19(ot escaped by a backslash or within a) -3.69 F .053(quoted string, and not within an embedded arithmetic e)108 705.6 R .052(xpansion, command substitution, or paramter e)-.15 F(xpan-) --.15 E(sion.)108 717.6 Q(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E -(16)197.335 E 0 Cg EP +-.15 E(sion.)108 717.6 Q(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(16) +199 E 0 Cg EP %%Page: 17 17 %%BeginPageSetup BP @@ -2229,8 +2228,8 @@ E -.25(va)144 700.8 S 1.749 E F1(par)5.498 E(ameter)-.15 E F0 1.748(is an array name sub-)4.978 F (scripted by)144 712.8 Q F2(*)2.5 E F0(or)2.5 E F2(@)2.5 E F0 2.5(,t)C (he v)-2.5 E(alue substituted is the number of elements in the array) --.25 E(.)-.65 E(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(17)197.335 -E 0 Cg EP +-.25 E(.)-.65 E(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(17)199 E 0 Cg +EP %%Page: 18 18 %%BeginPageSetup BP @@ -2344,8 +2343,8 @@ F F1(command).833 E F0 3.887(\)f)1.666 G 1.386 (quotes with backslashes.)108 662.4 Q .422 (If the substitution appears within double quotes, w)108 679.2 R .422 (ord splitting and pathname e)-.1 F .422(xpansion are not performed)-.15 -F(on the results.)108 691.2 Q(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 -E(18)197.335 E 0 Cg EP +F(on the results.)108 691.2 Q(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E +(18)199 E 0 Cg EP %%Page: 19 19 %%BeginPageSetup BP @@ -2487,8 +2486,8 @@ so matches one of the patterns in)4.265 F F3(GLOBIGNORE)4.515 E F0(is) (shell option, so all other \214le names be)108 724.8 R .614 (ginning with a)-.15 F F1 -.63(``)3.114 G -.55(.').63 G(')-.08 E F0 .614 (will match.)5.614 F 2.214 -.8(To g)5.614 H .614(et the old beha).8 F -.614(vior of ignoring)-.2 F(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E -(19)197.335 E 0 Cg EP +.614(vior of ignoring)-.2 F(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E +(19)199 E 0 Cg EP %%Page: 20 20 %%BeginPageSetup BP @@ -2596,7 +2595,7 @@ ted, and the \214rst character of the redirec-)-.25 F .365 (tion operator is)108 728.4 R F1(<)2.865 E F0 2.865(,t)C .366 (he redirection refers to the standard input \(\214le descriptor 0\).) -2.865 F .366(If the \214rst character of the)5.366 F(GNU Bash-3.0)72 -768 Q(2004 June 26)147.345 E(20)197.335 E 0 Cg EP +768 Q(2004 Sep 17)149.01 E(20)199 E 0 Cg EP %%Page: 21 21 %%BeginPageSetup BP @@ -2691,8 +2690,8 @@ F0 .547(and the)3.047 F F1(noclob)3.047 E(ber)-.1 E F0 .547 2.974(,o).24 G 2.974(rt)-2.974 G .474 (he standard output \(\214le descriptor 1\) if)-2.974 F F2(n)3.333 E F0 .473(is not speci\214ed.)3.213 F(If)5.473 E(the \214le does not e)108 -717.6 Q(xist it is created.)-.15 E(GNU Bash-3.0)72 768 Q(2004 June 26) -147.345 E(21)197.335 E 0 Cg EP +717.6 Q(xist it is created.)-.15 E(GNU Bash-3.0)72 768 Q(2004 Sep 17) +149.01 E(21)199 E 0 Cg EP %%Page: 22 22 %%BeginPageSetup BP @@ -2775,8 +2774,8 @@ utput, a redirection error)4.627 F 2.597(occurs. As)108 676.8 R 2.597 2.596 F .096(xpand to one or more digits, the standard out-)-.15 F (put and standard error are redirected as described pre)108 688.8 Q (viously)-.25 E(.)-.65 E F2(Mo)87 705.6 Q(ving File Descriptors)-.1 E F0 -(The redirection operator)108 717.6 Q(GNU Bash-3.0)72 768 Q -(2004 June 26)147.345 E(22)197.335 E 0 Cg EP +(The redirection operator)108 717.6 Q(GNU Bash-3.0)72 768 Q(2004 Sep 17) +149.01 E(22)199 E 0 Cg EP %%Page: 23 23 %%BeginPageSetup BP @@ -2910,7 +2909,7 @@ E 1.961(TIN COM-)-.828 F(MANDS)108 727.2 Q F0(belo)2.343 E .092 (w\) is not inherited unless the function has been gi)-.25 F -.15(ve) -.25 G 2.592(nt).15 G(he)-2.592 E F2(trace)2.592 E F0(attrib)2.592 E .092(ute \(see the description of)-.2 F(GNU Bash-3.0)72 768 Q -(2004 June 26)147.345 E(23)197.335 E 0 Cg EP +(2004 Sep 17)149.01 E(23)199 E 0 Cg EP %%Page: 24 24 %%BeginPageSetup BP @@ -3015,7 +3014,7 @@ F F2(declar)3.89 E 3.89(e-)-.18 G(i)-3.89 E F0(is)3.89 E .344 .343(hell v)-2.843 F .343(ariable need not ha)-.25 F .643 -.15(ve i)-.2 H .343(ts inte).15 F .343(ger attrib)-.15 F .343(ute turned on)-.2 F (to be used in an e)108 729.6 Q(xpression.)-.15 E(GNU Bash-3.0)72 768 Q -(2004 June 26)147.345 E(24)197.335 E 0 Cg EP +(2004 Sep 17)149.01 E(24)199 E 0 Cg EP %%Page: 25 25 %%BeginPageSetup BP @@ -3126,8 +3125,8 @@ F 1.144(See the list of options under the description of the)6.143 F F3 -.35(Tr)144 674.4 S(ue if the length of).35 E F1(string)2.5 E F0 (is zero.)2.5 E F1(string)108 686.4 Q F3108 698.4 Q F1(string)2.5 E F0 -.35(Tr)144 710.4 S(ue if the length of).35 E F1(string)2.84 E F0 -(is non-zero.)2.72 E(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(25) -197.335 E 0 Cg EP +(is non-zero.)2.72 E(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(25)199 E +0 Cg EP %%Page: 26 26 %%BeginPageSetup BP @@ -3235,7 +3234,7 @@ re slashes, the shell e)108 700.8 R -.15(xe)-.15 G 1.089(cutes the).15 F (n, and the remain-).15 F(ing ar)108 724.8 Q (guments to the command are set to the ar)-.18 E(guments gi)-.18 E -.15 (ve)-.25 G(n, if an).15 E -.65(y.)-.15 G(GNU Bash-3.0)72 768 Q -(2004 June 26)147.345 E(26)197.335 E 0 Cg EP +(2004 Sep 17)149.01 E(26)199 E 0 Cg EP %%Page: 27 27 %%BeginPageSetup BP @@ -3339,7 +3338,7 @@ G 2.858(cation. Builtin).2 F .359(commands that are in)2.859 F -.2(vo) (.O)C .198(therwise, the in)-5.198 F -.2(vo)-.4 G -.1(ke).2 G 2.698(dc) .1 G .197(ommand inherits the \214le descriptors of the calling shell) -2.698 F(as modi\214ed by redirections.)108 724.8 Q(GNU Bash-3.0)72 768 -Q(2004 June 26)147.345 E(27)197.335 E 0 Cg EP +Q(2004 Sep 17)149.01 E(27)199 E 0 Cg EP %%Page: 28 28 %%BeginPageSetup BP @@ -3462,17 +3461,19 @@ G .93(rom the)-3.43 F 1.357(jobs table with the)108 621.6 R F3(diso) (shell option has been set with)2.666 F F3(shopt)2.666 E F0(,)A F3(bash) 2.666 E F0 .166(sends a)2.666 F F4(SIGHUP)2.666 E F0 .166 (to all jobs when an interacti)2.416 F -.15(ve)-.25 G(login shell e)108 -662.4 Q(xits.)-.15 E .077 -(If 0for which a trap has been set, the trap will not be e)108 679.2 R --.15(xe)-.15 G .076(cuted until the command completes.).15 F(When)5.076 -E F3(bash)2.576 E F0(is)2.576 E -.1(wa)108 691.2 S .826 -(iting for an asynchronous command via the).1 F F3(wait)3.326 E F0 -.2 -(bu)3.326 G .826(iltin, the reception of a signal for which a trap has) -.2 F .37(been set will cause the)108 703.2 R F3(wait)2.87 E F0 -.2(bu) -2.87 G .369(iltin to return immediately with an e).2 F .369 -(xit status greater than 128, immediately)-.15 F -(after which the trap is e)108 715.2 Q -.15(xe)-.15 G(cuted.).15 E -(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(28)197.335 E 0 Cg EP +662.4 Q(xits.)-.15 E(If)108 679.2 Q F3(bash)3.047 E F0 .547(is w)3.047 F +.546(aiting for a command to complete and recei)-.1 F -.15(ve)-.25 G +3.046(sas).15 G .546(ignal for which a trap has been set, the trap) +-3.046 F .662(will not be e)108 691.2 R -.15(xe)-.15 G .662 +(cuted until the command completes.).15 F(When)5.663 E F3(bash)3.163 E +F0 .663(is w)3.163 F .663(aiting for an asynchronous command)-.1 F .99 +(via the)108 703.2 R F3(wait)3.49 E F0 -.2(bu)3.49 G .99(iltin, the rec\ +eption of a signal for which a trap has been set will cause the).2 F F3 +(wait)3.49 E F0 -.2(bu)3.49 G .99(iltin to).2 F +(return immediately with an e)108 715.2 Q +(xit status greater than 128, immediately after which the trap is e)-.15 +E -.15(xe)-.15 G(cuted.).15 E(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E +(28)199 E 0 Cg EP %%Page: 29 29 %%BeginPageSetup BP @@ -3607,8 +3608,8 @@ F0 .645(displays the primary prompt)3.145 F F4(PS1)3.145 E F0 .645 (when it needs more input to complete a command.)4.075 F F3(Bash)6.826 E F0(allo)4.326 E 1.826(ws these)-.25 F 1.499(prompt strings to be custom\ ized by inserting a number of backslash-escaped special characters that\ - are)108 720 R(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(29)197.335 E -0 Cg EP + are)108 720 R(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(29)199 E 0 Cg +EP %%Page: 30 30 %%BeginPageSetup BP @@ -3714,8 +3715,8 @@ F2 -.1(ke)C(y)-.2 E F0 3.652(,s)C 3.652(oM)-3.652 G 1.152 1.018(auses that command to act in a backw)-3.518 F 1.019 (ard direction.)-.1 F(Com-)6.019 E(mands whose beha)108 715.2 Q (vior with ar)-.2 E(guments de)-.18 E(viates from this are noted belo) --.25 E -.65(w.)-.25 G(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(30) -197.335 E 0 Cg EP +-.25 E -.65(w.)-.25 G(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(30)199 +E 0 Cg EP %%Page: 31 31 %%BeginPageSetup BP @@ -3822,8 +3823,8 @@ G(rsal\255ar).1 E(gument)-.1 E F0(.)A F1 .315(C\255x C\255r)5.155 F F0 (Function Key 1)2.5 E F0(.)A (The full set of GNU Emacs style escape sequences is)108 693.6 Q F2 <5c43ad>144 705.6 Q F0(control pre\214x)20.3 E F2<5c4dad>144 717.6 Q F0 -(meta pre\214x)18.08 E(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(31) -197.335 E 0 Cg EP +(meta pre\214x)18.08 E(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(31)199 +E 0 Cg EP %%Page: 32 32 %%BeginPageSetup BP @@ -3913,7 +3914,7 @@ F0(.)A F1(editing\255mode \(emacs\))108 705.6 Q F0 .252 F .553 -.15(ey b)-.1 H .253(indings similar to).15 F F2(emacs)2.753 E F0 (or)2.753 E F2(vi)2.753 E F0(.)A F1(editing\255mode)5.253 E F0 (can be set to either)144 729.6 Q F1(emacs)2.5 E F0(or)2.5 E F1(vi)2.5 E -F0(.)A(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(32)197.335 E 0 Cg EP +F0(.)A(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(32)199 E 0 Cg EP %%Page: 33 33 %%BeginPageSetup BP @@ -4011,7 +4012,7 @@ isted immediately instead of ringing the)144 648 R(bell.)144 660 Q F1 (ossible partial completion \(the possible completions don')-3.539 F 3.539(ts)-.18 G 1.04(hare a common pre\214x\))-3.539 F(cause the matche\ s to be listed immediately instead of ringing the bell.)144 720 Q -(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(33)197.335 E 0 Cg EP +(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(33)199 E 0 Cg EP %%Page: 34 34 %%BeginPageSetup BP @@ -4115,7 +4116,7 @@ F -.15(xe)-.15 G .175(cute that command.).15 F -.15(Fo)5.175 G(r).15 E .541(instance, a)108 724.8 R F2(ne)3.041 E(wline)-.15 E F0 .541 (will terminate the search and accept the line, thereby e)3.041 F -.15 (xe)-.15 G .54(cuting the command from the).15 F(GNU Bash-3.0)72 768 Q -(2004 June 26)147.345 E(34)197.335 E 0 Cg EP +(2004 Sep 17)149.01 E(34)199 E 0 Cg EP %%Page: 35 35 %%BeginPageSetup BP @@ -4198,8 +4199,7 @@ F(.)-.65 E(This is an incremental search.)144 684 Q F1(non\255incr)108 (ch\255history \(M\255p\))-.18 E F0 .164(Search backw)144 708 R .164(ar\ d through the history starting at the current line using a non-incremen\ tal search for)-.1 F 2.5(as)144 720 S(tring supplied by the user)-2.5 E -(.)-.55 E(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(35)197.335 E 0 Cg -EP +(.)-.55 E(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(35)199 E 0 Cg EP %%Page: 36 36 %%BeginPageSetup BP @@ -4297,7 +4297,7 @@ A F1(backward\255delete\255char \(Rubout\))108 616.8 Q F0 .552 (erbatim. This)-.15 F .779(is ho)3.279 F 3.279(wt)-.25 G 3.279(oi)-3.279 G .779(nsert characters lik)-3.279 F(e)-.1 E F1(C\255q)3.279 E F0 3.279 (,f)C(or)-3.279 E -.15(ex)144 712.8 S(ample.).15 E(GNU Bash-3.0)72 768 Q -(2004 June 26)147.345 E(36)197.335 E 0 Cg EP +(2004 Sep 17)149.01 E(36)199 E 0 Cg EP %%Page: 37 37 %%BeginPageSetup BP @@ -4388,7 +4388,7 @@ F 5.364(.T)-.65 G .364(he killed te)-5.364 F .364(xt is sa)-.15 F -.15 -.15 E(gion.)-.15 E F1(copy\255r)108 700.8 Q(egion\255as\255kill)-.18 E F0(Cop)144 712.8 Q 2.5(yt)-.1 G(he te)-2.5 E(xt in the re)-.15 E (gion to the kill b)-.15 E(uf)-.2 E(fer)-.25 E(.)-.55 E(GNU Bash-3.0)72 -768 Q(2004 June 26)147.345 E(37)197.335 E 0 Cg EP +768 Q(2004 Sep 17)149.01 E(37)199 E 0 Cg EP %%Page: 38 38 %%BeginPageSetup BP @@ -4486,7 +4486,7 @@ F0(List the possible completions of the te)144 657.6 Q 108 693.6 Q(name\255completions \(C\255x ~\))-.15 E F0 (List the possible completions of the te)144 705.6 Q (xt before point, treating it as a username.)-.15 E(GNU Bash-3.0)72 768 -Q(2004 June 26)147.345 E(38)197.335 E 0 Cg EP +Q(2004 Sep 17)149.01 E(38)199 E 0 Cg EP %%Page: 39 39 %%BeginPageSetup BP @@ -4570,7 +4570,7 @@ F0 1.095(command enough times to)3.595 F (The current cursor position is set to the sa)5.283 F -.15(ve)-.2 G 2.783(dp).15 G .283(osition, and the old)-2.783 F(cursor position is sa) 144 705.6 Q -.15(ve)-.2 G 2.5(da).15 G 2.5(st)-2.5 G(he mark.)-2.5 E -(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(39)197.335 E 0 Cg EP +(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(39)199 E 0 Cg EP %%Page: 40 40 %%BeginPageSetup BP @@ -4680,8 +4680,7 @@ R .463(Only matches which are pre\214x)5.464 F .463(ed by the w)-.15 F .085(ompletions speci\214ed by a \214lename e)-2.585 F .085 (xpansion pattern to the)-.15 F F12.585 E F0 .085 (option are generated ne)2.585 F 2.585(xt. The)-.15 F -.1(wo)2.585 G -(rds).1 E(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(40)197.335 E 0 Cg -EP +(rds).1 E(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(40)199 E 0 Cg EP %%Page: 41 41 %%BeginPageSetup BP @@ -4825,7 +4824,7 @@ S 4.065(ta).2 G 1.565(fter history e)-4.065 F 1.565 (xpansion is performed, subject to the v)-.15 F 1.565 (alues of the shell v)-.25 F(ariables)-.25 E F1(HISTIGNORE)4.065 E F0 (and)3.816 E F1(HISTCONTR)108 724.8 Q(OL)-.27 E F3(.)A F0(GNU Bash-3.0) -72 768 Q(2004 June 26)147.345 E(41)197.335 E 0 Cg EP +72 768 Q(2004 Sep 17)149.01 E(41)199 E 0 Cg EP %%Page: 42 42 %%BeginPageSetup BP @@ -4966,7 +4965,7 @@ Q F4(histchars)2.5 E F0(abo)2.5 E .3 -.15(ve u)-.15 H(nder).15 E F4 (Shell V)2.5 E(ariables)-.92 E F0(\).)A F4(Ev)87 703.2 Q (ent Designators)-.1 E F0(An e)108 715.2 Q -.15(ve)-.25 G(nt designator\ is a reference to a command line entry in the history list.).15 E -(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(42)197.335 E 0 Cg EP +(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(42)199 E 0 Cg EP %%Page: 43 43 %%BeginPageSetup BP @@ -5072,7 +5071,7 @@ F1(/)A F0 1.218('\) or `)B F1(:&)A F0 3.718('. If)B 1.218(used with `) (delimiter is optional if it is the last character of the e)144 696 R -.15(ve)-.25 G .089(nt line.).15 F(An)5.089 E F1(a)2.589 E F0 .089 (may be used as a synon)2.589 F .089(ym for)-.15 F F1(g)144 708 Q F0(.)A -(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(43)197.335 E 0 Cg EP +(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(43)199 E 0 Cg EP %%Page: 44 44 %%BeginPageSetup BP @@ -5197,7 +5196,7 @@ F1 -.18(re)2.5 G(adline).18 E F0(function names and bindings.)2.5 E F1 G 1.155(equences bound to macros and the strings the)-3.655 F 3.655(yo) -.15 G 1.155(utput in such a)-3.655 F -.1(wa)180 726 S 2.5(yt).1 G (hat the)-2.5 E 2.5(yc)-.15 G(an be re-read.)-2.5 E(GNU Bash-3.0)72 768 -Q(2004 June 26)147.345 E(44)197.335 E 0 Cg EP +Q(2004 Sep 17)149.01 E(44)199 E 0 Cg EP %%Page: 45 45 %%BeginPageSetup BP @@ -5323,7 +5322,7 @@ F1144 664.8 Q F0 .249(option produces a more v)2.749 F .249 (xit status is 127.)-.15 F 1.599(Otherwise, the e)6.599 F 1.599 (xit status of the)-.15 F F1(command)4.099 E F0 -.2(bu)144 700.8 S (iltin is the e).2 E(xit status of)-.15 E F2(command)2.5 E F0(.).77 E -(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(45)197.335 E 0 Cg EP +(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(45)199 E 0 Cg EP %%Page: 46 46 %%BeginPageSetup BP @@ -5403,1875 +5402,1884 @@ F(ing trailing spaces\).)224 556.8 Q (Intended to be used with shell functions.)5 E F1(nospace)184 568.8 Q F0 -.7(Te)6.11 G .22(ll readline not to append a space \(the def).7 F .22 (ault\) to w)-.1 F .22(ords completed at the end)-.1 F(of the line.)224 -580.8 Q F1144 592.8 Q F2(action)2.5 E F0(The)184 604.8 Q F2 +580.8 Q F1(plusdirs)184 592.8 Q F0 1.985(After an)5.54 F 4.485(ym)-.15 G +1.985(atches de\214ned by the compspec are generated, directory name) +-4.485 F .584(completion is attempted and an)224 604.8 R 3.084(ym)-.15 G +.584(atches are added to the results of the other)-3.084 F(actions.)224 +616.8 Q F1144 628.8 Q F2(action)2.5 E F0(The)184 640.8 Q F2 (action)2.5 E F0(may be one of the follo)2.5 E (wing to generate a list of possible completions:)-.25 E F1(alias)184 -616.8 Q F0(Alias names.)20.55 E(May also be speci\214ed as)5 E F1 -2.5 E F0(.)A F1(arrayv)184 628.8 Q(ar)-.1 E F0(Array v)224 640.8 Q -(ariable names.)-.25 E F1 4.7(binding Readline)184 652.8 R F0 -.1(ke)2.5 -G 2.5(yb)-.05 G(inding names.)-2.5 E F1 -.2(bu)184 664.8 S(iltin).2 E F0 +652.8 Q F0(Alias names.)20.55 E(May also be speci\214ed as)5 E F1 +2.5 E F0(.)A F1(arrayv)184 664.8 Q(ar)-.1 E F0(Array v)224 676.8 Q +(ariable names.)-.25 E F1 4.7(binding Readline)184 688.8 R F0 -.1(ke)2.5 +G 2.5(yb)-.05 G(inding names.)-2.5 E F1 -.2(bu)184 700.8 S(iltin).2 E F0 (Names of shell b)11.85 E(uiltin commands.)-.2 E -(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(command)184 -676.8 Q F0(Command names.)224 688.8 Q(May also be speci\214ed as)5 E F1 -2.5 E F0(.)A F1(dir)184 700.8 Q(ectory)-.18 E F0(Directory names.) -224 712.8 Q(May also be speci\214ed as)5 E F12.5 E F0(.)A -(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(46)197.335 E 0 Cg EP +(May also be speci\214ed as)5 E F12.5 E F0(.)A(GNU Bash-3.0)72 768 +Q(2004 Sep 17)149.01 E(46)199 E 0 Cg EP %%Page: 47 47 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Times-Bold@0 SF(disabled)184 84 Q F0 -(Names of disabled shell b)224 96 Q(uiltins.)-.2 E F1(enabled)184 108 Q -F0(Names of enabled shell b)6.66 E(uiltins.)-.2 E F1(export)184 120 Q F0 +-.35 E/F1 10/Times-Bold@0 SF(command)184 84 Q F0(Command names.)224 96 Q +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(dir)184 108 Q +(ectory)-.18 E F0(Directory names.)224 120 Q(May also be speci\214ed as) +5 E F12.5 E F0(.)A F1(disabled)184 132 Q F0 +(Names of disabled shell b)224 144 Q(uiltins.)-.2 E F1(enabled)184 156 Q +F0(Names of enabled shell b)6.66 E(uiltins.)-.2 E F1(export)184 168 Q F0 (Names of e)12.23 E(xported shell v)-.15 E 2.5(ariables. May)-.25 F -(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1(\214le)184 132 Q +(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1(\214le)184 180 Q F0(File names.)27.22 E(May also be speci\214ed as)5 E F12.5 E F0 -(.)A F1(function)184 144 Q F0(Names of shell functions.)224 156 Q F1(gr) -184 168 Q(oup)-.18 E F0(Group names.)14.62 E(May also be speci\214ed as) -5 E F12.5 E F0(.)A F1(helptopic)184 180 Q F0 -(Help topics as accepted by the)224 192 Q F1(help)2.5 E F0 -.2(bu)2.5 G -(iltin.).2 E F1(hostname)184 204 Q F0(Hostnames, as tak)224 216 Q +(.)A F1(function)184 192 Q F0(Names of shell functions.)224 204 Q F1(gr) +184 216 Q(oup)-.18 E F0(Group names.)14.62 E(May also be speci\214ed as) +5 E F12.5 E F0(.)A F1(helptopic)184 228 Q F0 +(Help topics as accepted by the)224 240 Q F1(help)2.5 E F0 -.2(bu)2.5 G +(iltin.).2 E F1(hostname)184 252 Q F0(Hostnames, as tak)224 264 Q (en from the \214le speci\214ed by the)-.1 E/F2 9/Times-Bold@0 SF -(HOSTFILE)2.5 E F0(shell v)2.25 E(ariable.)-.25 E F1(job)184 228 Q F0 +(HOSTFILE)2.5 E F0(shell v)2.25 E(ariable.)-.25 E F1(job)184 276 Q F0 (Job names, if job control is acti)26.11 E -.15(ve)-.25 G 5(.M).15 G -(ay also be speci\214ed as)-5 E F12.5 E F0(.)A F1 -.1(ke)184 240 S -(yw).1 E(ord)-.1 E F0(Shell reserv)224 252 Q(ed w)-.15 E 2.5(ords. May) +(ay also be speci\214ed as)-5 E F12.5 E F0(.)A F1 -.1(ke)184 288 S +(yw).1 E(ord)-.1 E F0(Shell reserv)224 300 Q(ed w)-.15 E 2.5(ords. May) -.1 F(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1(running)184 -264 Q F0(Names of running jobs, if job control is acti)5.54 E -.15(ve) --.25 G(.).15 E F1(ser)184 276 Q(vice)-.1 E F0(Service names.)10.67 E -(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(setopt)184 288 Q +312 Q F0(Names of running jobs, if job control is acti)5.54 E -.15(ve) +-.25 G(.).15 E F1(ser)184 324 Q(vice)-.1 E F0(Service names.)10.67 E +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1(setopt)184 336 Q F0 -1.11(Va)14.45 G(lid ar)1.11 E(guments for the)-.18 E F12.5 E F0(option to the)2.5 E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1 -(shopt)184 300 Q F0(Shell option names as accepted by the)16.66 E F1 -(shopt)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(signal)184 312 Q F0 -(Signal names.)14.99 E F1(stopped)184 324 Q F0 +(shopt)184 348 Q F0(Shell option names as accepted by the)16.66 E F1 +(shopt)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(signal)184 360 Q F0 +(Signal names.)14.99 E F1(stopped)184 372 Q F0 (Names of stopped jobs, if job control is acti)6.66 E -.15(ve)-.25 G(.) -.15 E F1(user)184 336 Q F0(User names.)21.67 E -(May also be speci\214ed as)5 E F12.5 E F0(.)A F1 -.1(va)184 348 S +.15 E F1(user)184 384 Q F0(User names.)21.67 E +(May also be speci\214ed as)5 E F12.5 E F0(.)A F1 -.1(va)184 396 S (riable).1 E F0(Names of all shell v)5.1 E 2.5(ariables. May)-.25 F -(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1144 360 Q/F3 -10/Times-Italic@0 SF(globpat)2.5 E F0 1.41(The \214lename e)184 372 R +(also be speci\214ed as)2.5 E F12.5 E F0(.)A F1144 408 Q/F3 +10/Times-Italic@0 SF(globpat)2.5 E F0 1.41(The \214lename e)184 420 R 1.411(xpansion pattern)-.15 F F3(globpat)3.911 E F0 1.411(is e)3.911 F -1.411(xpanded to generate the possible comple-)-.15 F(tions.)184 384 Q -F1144 396 Q F3(wor)2.5 E(dlist)-.37 E F0(The)184 408 Q F3(wor)3.64 +1.411(xpanded to generate the possible comple-)-.15 F(tions.)184 432 Q +F1144 444 Q F3(wor)2.5 E(dlist)-.37 E F0(The)184 456 Q F3(wor)3.64 E(dlist)-.37 E F0 1.14(is split using the characters in the)3.64 F F2 (IFS)3.64 E F0 1.139(special v)3.39 F 1.139(ariable as delimiters, and) --.25 F 2.007(each resultant w)184 420 R 2.007(ord is e)-.1 F 4.507 +-.25 F 2.007(each resultant w)184 468 R 2.007(ord is e)-.1 F 4.507 (xpanded. The)-.15 F 2.008(possible completions are the members of the) -4.507 F(resultant list which match the w)184 432 Q(ord being completed.) --.1 E F1144 444 Q F3(command)2.5 E(command)184 456 Q F0 1.056 +4.507 F(resultant list which match the w)184 480 Q(ord being completed.) +-.1 E F1144 492 Q F3(command)2.5 E(command)184 504 Q F0 1.056 (is e)3.556 F -.15(xe)-.15 G 1.056(cuted in a subshell en).15 F 1.056 (vironment, and its output is used as the possible)-.4 F(completions.) -184 468 Q F1144 480 Q F3(function)2.5 E F0 1.18 -(The shell function)184 492 R F3(function)3.68 E F0 1.181(is e)3.681 F +184 516 Q F1144 528 Q F3(function)2.5 E F0 1.18 +(The shell function)184 540 R F3(function)3.68 E F0 1.181(is e)3.681 F -.15(xe)-.15 G 1.181(cuted in the current shell en).15 F 3.681 (vironment. When)-.4 F 1.181(it \214n-)3.681 F .932 -(ishes, the possible completions are retrie)184 504 R -.15(ve)-.25 G +(ishes, the possible completions are retrie)184 552 R -.15(ve)-.25 G 3.432(df).15 G .932(rom the v)-3.432 F .932(alue of the)-.25 F F2 -(COMPREPL)3.431 E(Y)-.828 E F0(array)3.181 E -.25(va)184 516 S(riable.) -.25 E F1144 528 Q F3(\214lterpat)2.5 E(\214lterpat)184 540 Q F0 +(COMPREPL)3.431 E(Y)-.828 E F0(array)3.181 E -.25(va)184 564 S(riable.) +.25 E F1144 576 Q F3(\214lterpat)2.5 E(\214lterpat)184 588 Q F0 .733(is a pattern as used for \214lename e)3.233 F 3.233(xpansion. It) -.15 F .733(is applied to the list of possible)3.233 F 1.596 -(completions generated by the preceding options and ar)184 552 R 1.596 -(guments, and each completion)-.18 F(matching)184 564 Q F3(\214lterpat) +(completions generated by the preceding options and ar)184 600 R 1.596 +(guments, and each completion)-.18 F(matching)184 612 Q F3(\214lterpat) 3.204 E F0 .704(is remo)3.204 F -.15(ve)-.15 G 3.204(df).15 G .704 (rom the list.)-3.204 F 3.204(Al)5.704 G(eading)-3.204 E F1(!)3.204 E F0 (in)3.204 E F3(\214lterpat)3.205 E F0(ne)3.205 E -.05(ga)-.15 G .705 -(tes the pattern;).05 F(in this case, an)184 576 Q 2.5(yc)-.15 G +(tes the pattern;).05 F(in this case, an)184 624 Q 2.5(yc)-.15 G (ompletion not matching)-2.5 E F3(\214lterpat)2.5 E F0(is remo)2.5 E --.15(ve)-.15 G(d.).15 E F1144 588 Q F3(pr)2.5 E(e\214x)-.37 E(pr) -184 600 Q(e\214x)-.37 E F0 .535(is added at the be)3.035 F .534 +-.15(ve)-.15 G(d.).15 E F1144 636 Q F3(pr)2.5 E(e\214x)-.37 E(pr) +184 648 Q(e\214x)-.37 E F0 .535(is added at the be)3.035 F .534 (ginning of each possible completion after all other options ha)-.15 F --.15(ve)-.2 G(been applied.)184 612 Q F1144 624 Q F3(suf)2.5 E +-.15(ve)-.2 G(been applied.)184 660 Q F1144 672 Q F3(suf)2.5 E 2.81(\214x suf)-.18 F<8c78>-.18 E F0 (is appended to each possible completion after all other options ha)2.5 -E .3 -.15(ve b)-.2 H(een applied.).15 E .466(The return v)144 640.8 R +E .3 -.15(ve b)-.2 H(een applied.).15 E .466(The return v)144 688.8 R .466(alue is true unless an in)-.25 F -.25(va)-.4 G .466 (lid option is supplied, an option other than).25 F F12.967 E F0 (or)2.967 E F12.967 E F0 .467(is sup-)2.967 F 1.362 -(plied without a)144 652.8 R F3(name)3.862 E F0(ar)3.862 E 1.361 +(plied without a)144 700.8 R F3(name)3.862 E F0(ar)3.862 E 1.361 (gument, an attempt is made to remo)-.18 F 1.661 -.15(ve a c)-.15 H -1.361(ompletion speci\214cation for a).15 F F3(name)144 664.8 Q F0 +1.361(ompletion speci\214cation for a).15 F F3(name)144 712.8 Q F0 (for which no speci\214cation e)2.5 E (xists, or an error occurs adding a completion speci\214cation.)-.15 E -F1(continue)108 681.6 Q F0([)2.5 E F3(n)A F0(])A 1.753(Resume the ne)144 -693.6 R 1.753(xt iteration of the enclosing)-.15 F F1 -.25(fo)4.254 G(r) -.25 E F0(,)A F1(while)4.254 E F0(,)A F1(until)4.254 E F0 4.254(,o)C(r) --4.254 E F1(select)4.254 E F0 4.254(loop. If)4.254 F F3(n)4.614 E F0 -1.754(is speci\214ed,)4.494 F 1.209(resume at the)144 705.6 R F3(n)3.709 -E F0 1.209(th enclosing loop.)B F3(n)6.569 E F0 1.209(must be)3.949 F/F4 -10/Symbol SF3.709 E F0 3.709(1. If)3.709 F F3(n)4.069 E F0 1.209 -(is greater than the number of enclosing)3.949 F .667 -(loops, the last enclosing loop \(the `)144 717.6 R(`top-le)-.74 E -.15 -(ve)-.25 G(l').15 E 3.167('l)-.74 G .667(oop\) is resumed.)-3.167 F .668 -(The return v)5.668 F .668(alue is 0 unless the)-.25 F(shell is not e) -144 729.6 Q -.15(xe)-.15 G(cuting a loop when).15 E F1(continue)2.5 E F0 -(is e)2.5 E -.15(xe)-.15 G(cuted.).15 E(GNU Bash-3.0)72 768 Q -(2004 June 26)147.345 E(47)197.335 E 0 Cg EP +(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(47)199 E 0 Cg EP %%Page: 48 48 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Times-Bold@0 SF(declar)108 84 Q(e)-.18 E F0([)2.5 E F1 -(\255afFirtx)A F0 2.5(][)C F1-2.5 E F0 2.5(][)C/F2 10 -/Times-Italic@0 SF(name)-2.5 E F0([=)A F2(value)A F0 2.5(].)C(..])-2.5 E -F1(typeset)108 96 Q F0([)2.5 E F1(\255afFirtx)A F0 2.5(][)C F1-2.5 -E F0 2.5(][)C F2(name)-2.5 E F0([=)A F2(value)A F0 2.5(].)C(..])-2.5 E -1.265(Declare v)144 108 R 1.265(ariables and/or gi)-.25 F 1.565 -.15 -(ve t)-.25 H 1.265(hem attrib).15 F 3.765(utes. If)-.2 F(no)3.765 E F2 -(name)3.765 E F0 3.765(sa)C 1.265(re gi)-3.765 F -.15(ve)-.25 G 3.764 -(nt).15 G 1.264(hen display the v)-3.764 F 1.264(alues of)-.25 F -.25 -(va)144 120 S 3.326(riables. The).25 F F13.326 E F0 .826 +-.35 E/F1 10/Times-Bold@0 SF(continue)108 84 Q F0([)2.5 E/F2 10 +/Times-Italic@0 SF(n)A F0(])A 1.753(Resume the ne)144 96 R 1.753 +(xt iteration of the enclosing)-.15 F F1 -.25(fo)4.254 G(r).25 E F0(,)A +F1(while)4.254 E F0(,)A F1(until)4.254 E F0 4.254(,o)C(r)-4.254 E F1 +(select)4.254 E F0 4.254(loop. If)4.254 F F2(n)4.614 E F0 1.754 +(is speci\214ed,)4.494 F 1.209(resume at the)144 108 R F2(n)3.709 E F0 +1.209(th enclosing loop.)B F2(n)6.569 E F0 1.209(must be)3.949 F/F3 10 +/Symbol SF3.709 E F0 3.709(1. If)3.709 F F2(n)4.069 E F0 1.209 +(is greater than the number of enclosing)3.949 F .667 +(loops, the last enclosing loop \(the `)144 120 R(`top-le)-.74 E -.15 +(ve)-.25 G(l').15 E 3.167('l)-.74 G .667(oop\) is resumed.)-3.167 F .668 +(The return v)5.668 F .668(alue is 0 unless the)-.25 F(shell is not e) +144 132 Q -.15(xe)-.15 G(cuting a loop when).15 E F1(continue)2.5 E F0 +(is e)2.5 E -.15(xe)-.15 G(cuted.).15 E F1(declar)108 148.8 Q(e)-.18 E +F0([)2.5 E F1(\255afFirtx)A F0 2.5(][)C F1-2.5 E F0 2.5(][)C F2 +(name)-2.5 E F0([=)A F2(value)A F0 2.5(].)C(..])-2.5 E F1(typeset)108 +160.8 Q F0([)2.5 E F1(\255afFirtx)A F0 2.5(][)C F1-2.5 E F0 2.5 +(][)C F2(name)-2.5 E F0([=)A F2(value)A F0 2.5(].)C(..])-2.5 E 1.265 +(Declare v)144 172.8 R 1.265(ariables and/or gi)-.25 F 1.565 -.15(ve t) +-.25 H 1.265(hem attrib).15 F 3.765(utes. If)-.2 F(no)3.765 E F2(name) +3.765 E F0 3.765(sa)C 1.265(re gi)-3.765 F -.15(ve)-.25 G 3.764(nt).15 G +1.264(hen display the v)-3.764 F 1.264(alues of)-.25 F -.25(va)144 184.8 +S 3.326(riables. The).25 F F13.326 E F0 .826 (option will display the attrib)3.326 F .826(utes and v)-.2 F .826 (alues of each)-.25 F F2(name)3.326 E F0 5.827(.W).18 G(hen)-5.827 E F1 3.327 E F0 .827(is used,)3.327 F .22 -(additional options are ignored.)144 132 R(The)5.22 E F12.72 E F0 -.22(option inhibits the display of function de\214nitions; only the)2.72 -F .466(function name and attrib)144 144 R .466(utes are printed.)-.2 F -.466(If the)5.466 F F1(extdeb)2.966 E(ug)-.2 E F0 .466 +(additional options are ignored.)144 196.8 R(The)5.22 E F12.72 E +F0 .22(option inhibits the display of function de\214nitions; only the) +2.72 F .466(function name and attrib)144 208.8 R .466(utes are printed.) +-.2 F .466(If the)5.466 F F1(extdeb)2.966 E(ug)-.2 E F0 .466 (shell option is enabled using)2.966 F F1(shopt)2.966 E F0 2.966(,t)C (he)-2.966 E 1.308(source \214le name and line number where the functio\ -n is de\214ned are displayed as well.)144 156 R(The)6.308 E F1 -3.808 E F0 .19(option implies)144 168 R F12.69 E F0 5.19(.T)C .19 -(he follo)-5.19 F .191(wing options can be used to restrict output to v) --.25 F .191(ariables with the speci-)-.25 F(\214ed attrib)144 180 Q -(ute or to gi)-.2 E .3 -.15(ve v)-.25 H(ariables attrib)-.1 E(utes:)-.2 -E F1144 192 Q F0(Each)25.3 E F2(name)2.5 E F0(is an array v)2.5 E +n is de\214ned are displayed as well.)144 220.8 R(The)6.308 E F1 +3.808 E F0 .19(option implies)144 232.8 R F12.69 E F0 5.19(.T)C +.19(he follo)-5.19 F .191 +(wing options can be used to restrict output to v)-.25 F .191 +(ariables with the speci-)-.25 F(\214ed attrib)144 244.8 Q(ute or to gi) +-.2 E .3 -.15(ve v)-.25 H(ariables attrib)-.1 E(utes:)-.2 E F1144 +256.8 Q F0(Each)25.3 E F2(name)2.5 E F0(is an array v)2.5 E (ariable \(see)-.25 E F1(Arrays)2.5 E F0(abo)2.5 E -.15(ve)-.15 G(\).) -.15 E F1144 204 Q F0(Use function names only)26.97 E(.)-.65 E F1 -144 216 Q F0 .558(The v)27.52 F .558 +.15 E F1144 268.8 Q F0(Use function names only)26.97 E(.)-.65 E F1 +144 280.8 Q F0 .558(The v)27.52 F .558 (ariable is treated as an inte)-.25 F .558(ger; arithmetic e)-.15 F -.25 -(va)-.25 G .558(luation \(see).25 F/F3 9/Times-Bold@0 SF .557 -(ARITHMETIC EV)3.058 F(ALU)-1.215 E(A-)-.54 E(TION \))180 228 Q F0 +(va)-.25 G .558(luation \(see).25 F/F4 9/Times-Bold@0 SF .557 +(ARITHMETIC EV)3.058 F(ALU)-1.215 E(A-)-.54 E(TION \))180 292.8 Q F0 (is performed when the v)2.25 E(ariable is assigned a v)-.25 E(alue.) --.25 E F1144 240 Q F0(Mak)25.86 E(e)-.1 E F2(name)5.046 E F0 5.046 -(sr)C(eadonly)-5.046 E 7.546(.T)-.65 G 2.546 +-.25 E F1144 304.8 Q F0(Mak)25.86 E(e)-.1 E F2(name)5.046 E F0 +5.046(sr)C(eadonly)-5.046 E 7.546(.T)-.65 G 2.546 (hese names cannot then be assigned v)-7.546 F 2.547 -(alues by subsequent)-.25 F(assignment statements or unset.)180 252 Q F1 -144 264 Q F0(Gi)26.97 E 1.231 -.15(ve e)-.25 H(ach).15 E F2(name) -3.431 E F0(the)3.431 E F2(tr)3.431 E(ace)-.15 E F0(attrib)3.431 E 3.431 -(ute. T)-.2 F .931(raced functions inherit the)-.35 F F1(DEB)3.431 E(UG) --.1 E F0 .93(trap from the)3.43 F(calling shell.)180 276 Q +(alues by subsequent)-.25 F(assignment statements or unset.)180 316.8 Q +F1144 328.8 Q F0(Gi)26.97 E 1.231 -.15(ve e)-.25 H(ach).15 E F2 +(name)3.431 E F0(the)3.431 E F2(tr)3.431 E(ace)-.15 E F0(attrib)3.431 E +3.431(ute. T)-.2 F .931(raced functions inherit the)-.35 F F1(DEB)3.431 +E(UG)-.1 E F0 .93(trap from the)3.43 F(calling shell.)180 340.8 Q (The trace attrib)5 E(ute has no special meaning for v)-.2 E(ariables.) --.25 E F1144 288 Q F0(Mark)25.3 E F2(name)2.5 E F0 2.5(sf)C(or e) --2.5 E(xport to subsequent commands via the en)-.15 E(vironment.)-.4 E -.336(Using `+' instead of `\255' turns of)144 304.8 R 2.837(ft)-.25 G -.337(he attrib)-2.837 F .337(ute instead, with the e)-.2 F .337 +-.25 E F1144 352.8 Q F0(Mark)25.3 E F2(name)2.5 E F0 2.5(sf)C +(or e)-2.5 E(xport to subsequent commands via the en)-.15 E(vironment.) +-.4 E .336(Using `+' instead of `\255' turns of)144 369.6 R 2.837(ft) +-.25 G .337(he attrib)-2.837 F .337(ute instead, with the e)-.2 F .337 (xception that)-.15 F F1(+a)2.837 E F0 .337(may not be used)2.837 F .793 -(to destro)144 316.8 R 3.293(ya)-.1 G 3.293(na)-3.293 G .793(rray v) +(to destro)144 381.6 R 3.293(ya)-.1 G 3.293(na)-3.293 G .793(rray v) -3.293 F 3.293(ariable. When)-.25 F .793(used in a function, mak)3.293 F .793(es each)-.1 F F2(name)3.293 E F0 .793(local, as with the)3.293 F F1 -(local)3.292 E F0 2.842(command. If)144 328.8 R 2.842(av)2.842 G .342 +(local)3.292 E F0 2.842(command. If)144 393.6 R 2.842(av)2.842 G .342 (ariable name is follo)-3.092 F .342(wed by =)-.25 F F2(value)A F0 2.842 (,t)C .342(he v)-2.842 F .342(alue of the v)-.25 F .343 (ariable is set to)-.25 F F2(value)2.843 E F0 5.343(.T)C(he)-5.343 E -.801(return v)144 340.8 R .801(alue is 0 unless an in)-.25 F -.25(va)-.4 +.801(return v)144 405.6 R .801(alue is 0 unless an in)-.25 F -.25(va)-.4 G .8 (lid option is encountered, an attempt is made to de\214ne a function) -.25 F(using)144 352.8 Q/F4 10/Courier@0 SF 1.038(\255f foo=bar)3.538 F +.25 F(using)144 417.6 Q/F5 10/Courier@0 SF 1.038(\255f foo=bar)3.538 F F0 3.538(,a)C 3.538(na)-3.538 G 1.038(ttempt is made to assign a v) -3.538 F 1.038(alue to a readonly v)-.25 F 1.039(ariable, an attempt is) --.25 F .974(made to assign a v)144 364.8 R .974(alue to an array v)-.25 +-.25 F .974(made to assign a v)144 429.6 R .974(alue to an array v)-.25 F .974(ariable without using the compound assignment syntax \(see)-.25 F -F1(Arrays)144 376.8 Q F0(abo)2.86 E -.15(ve)-.15 G .36(\), one of the) +F1(Arrays)144 441.6 Q F0(abo)2.86 E -.15(ve)-.15 G .36(\), one of the) .15 F F2(names)2.86 E F0 .36(is not a v)2.86 F .36(alid shell v)-.25 F .36(ariable name, an attempt is made to turn of)-.25 F(f)-.25 E .057 -(readonly status for a readonly v)144 388.8 R .057 +(readonly status for a readonly v)144 453.6 R .057 (ariable, an attempt is made to turn of)-.25 F 2.556(fa)-.25 G .056 (rray status for an array v)-2.556 F(ari-)-.25 E -(able, or an attempt is made to display a non-e)144 400.8 Q +(able, or an attempt is made to display a non-e)144 465.6 Q (xistent function with)-.15 E F12.5 E F0(.)A F1 -(dirs [\255clpv] [+)108 417.6 Q F2(n)A F1 2.5(][)C-2.5 E F2(n)A F1 -(])A F0 -.4(Wi)144 429.6 S .328 +(dirs [\255clpv] [+)108 482.4 Q F2(n)A F1 2.5(][)C-2.5 E F2(n)A F1 +(])A F0 -.4(Wi)144 494.4 S .328 (thout options, displays the list of currently remembered directories.) .4 F .329(The def)5.329 F .329(ault display is on a)-.1 F 1.238 -(single line with directory names separated by spaces.)144 441.6 R 1.238 -(Directories are added to the list with the)6.238 F F1(pushd)144 453.6 Q +(single line with directory names separated by spaces.)144 506.4 R 1.238 +(Directories are added to the list with the)6.238 F F1(pushd)144 518.4 Q F0(command; the)2.5 E F1(popd)2.5 E F0(command remo)2.5 E -.15(ve)-.15 G -2.5(se).15 G(ntries from the list.)-2.5 E F1(+)144 465.6 Q F2(n)A F0 +2.5(se).15 G(ntries from the list.)-2.5 E F1(+)144 530.4 Q F2(n)A F0 1.564(Displays the)25.3 F F2(n)4.064 E F0 1.565 (th entry counting from the left of the list sho)B 1.565(wn by)-.25 F F1 (dirs)4.065 E F0 1.565(when in)4.065 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E -(without options, starting with zero.)180 477.6 Q F1144 489.6 Q F2 +(without options, starting with zero.)180 542.4 Q F1144 554.4 Q F2 (n)A F0 1.194(Displays the)25.3 F F2(n)3.694 E F0 1.194 (th entry counting from the right of the list sho)B 1.194(wn by)-.25 F F1(dirs)3.694 E F0 1.194(when in)3.694 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E -(without options, starting with zero.)180 501.6 Q F1144 513.6 Q F0 +(without options, starting with zero.)180 566.4 Q F1144 578.4 Q F0 (Clears the directory stack by deleting all of the entries.)25.86 E F1 -144 525.6 Q F0 .324(Produces a longer listing; the def)27.52 F +144 590.4 Q F0 .324(Produces a longer listing; the def)27.52 F .324(ault listing format uses a tilde to denote the home direc-)-.1 F -(tory)180 537.6 Q(.)-.65 E F1144 549.6 Q F0 +(tory)180 602.4 Q(.)-.65 E F1144 614.4 Q F0 (Print the directory stack with one entry per line.)24.74 E F1144 -561.6 Q F0 .273(Print the directory stack with one entry per line, pre\ +626.4 Q F0 .273(Print the directory stack with one entry per line, pre\ \214xing each entry with its inde)25.3 F 2.772(xi)-.15 G 2.772(nt)-2.772 -G(he)-2.772 E(stack.)180 573.6 Q .257(The return v)144 590.4 R .258 +G(he)-2.772 E(stack.)180 638.4 Q .257(The return v)144 655.2 R .258 (alue is 0 unless an in)-.25 F -.25(va)-.4 G .258 (lid option is supplied or).25 F F2(n)2.758 E F0(inde)2.758 E -.15(xe) -.15 G 2.758(sb).15 G -.15(ey)-2.758 G .258(ond the end of the direc-) -.15 F(tory stack.)144 602.4 Q F1(diso)108 619.2 Q(wn)-.1 E F0([)2.5 E F1 +.15 F(tory stack.)144 667.2 Q F1(diso)108 684 Q(wn)-.1 E F0([)2.5 E F1 (\255ar)A F0 2.5(][)C F1-2.5 E F0 2.5(][)C F2(jobspec)-2.5 E F0 -(...])2.5 E -.4(Wi)144 631.2 S .331(thout options, each).4 F F2(jobspec) +(...])2.5 E -.4(Wi)144 696 S .331(thout options, each).4 F F2(jobspec) 4.571 E F0 .331(is remo)3.141 F -.15(ve)-.15 G 2.831(df).15 G .331 (rom the table of acti)-2.831 F .63 -.15(ve j)-.25 H 2.83(obs. If).15 F (the)2.83 E F12.83 E F0 .33(option is gi)2.83 F -.15(ve)-.25 G(n,) -.15 E(each)144 643.2 Q F2(jobspec)4.52 E F0 .28(is not remo)3.09 F -.15 +.15 E(each)144 708 Q F2(jobspec)4.52 E F0 .28(is not remo)3.09 F -.15 (ve)-.15 G 2.78(df).15 G .28(rom the table, b)-2.78 F .28(ut is mark)-.2 -F .28(ed so that)-.1 F F3(SIGHUP)2.78 E F0 .281 -(is not sent to the job if)2.53 F .224(the shell recei)144 655.2 R -.15 -(ve)-.25 G 2.724(sa).15 G F3(SIGHUP)A/F5 9/Times-Roman@0 SF(.)A F0 .224 -(If no)4.724 F F2(jobspec)4.464 E F0 .224(is present, and neither the) -3.034 F F12.724 E F0 .224(nor the)2.724 F F12.724 E F0 .223 -(option is sup-)2.724 F .651(plied, the)144 667.2 R F2(curr)3.151 E .651 -(ent job)-.37 F F0 .651(is used.)3.151 F .652(If no)5.651 F F2(jobspec) -4.892 E F0 .652(is supplied, the)3.462 F F13.152 E F0 .652 -(option means to remo)3.152 F .952 -.15(ve o)-.15 H 3.152(rm).15 G(ark) --3.152 E .435(all jobs; the)144 679.2 R F12.935 E F0 .435 -(option without a)2.935 F F2(jobspec)4.675 E F0(ar)3.245 E .434 -(gument restricts operation to running jobs.)-.18 F .434(The return) -5.434 F -.25(va)144 691.2 S(lue is 0 unless a).25 E F2(jobspec)4.24 E F0 -(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E(GNU Bash-3.0)72 768 -Q(2004 June 26)147.345 E(48)197.335 E 0 Cg EP +F .28(ed so that)-.1 F F4(SIGHUP)2.78 E F0 .281 +(is not sent to the job if)2.53 F 1.332(the shell recei)144 720 R -.15 +(ve)-.25 G 3.832(sa).15 G F4(SIGHUP)A/F6 9/Times-Roman@0 SF(.)A F0 1.332 +(If no)5.832 F F2(jobspec)5.572 E F0 1.332(is present, and neither the) +4.142 F F13.832 E F0 1.332(nor the)3.832 F F13.832 E F0 +1.331(option is)3.831 F(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(48) +199 E 0 Cg EP %%Page: 49 49 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Times-Bold@0 SF(echo)108 84 Q F0([)2.5 E F1(\255neE)A F0 -2.5(][)C/F2 10/Times-Italic@0 SF(ar)-2.5 E(g)-.37 E F0(...])2.5 E .394 -(Output the)144 96 R F2(ar)2.894 E(g)-.37 E F0 .394 +-.35 E 1.228(supplied, the)144 84 R/F1 10/Times-Italic@0 SF(curr)3.728 E +1.228(ent job)-.37 F F0 1.229(is used.)3.729 F 1.229(If no)6.229 F F1 +(jobspec)5.469 E F0 1.229(is supplied, the)4.039 F/F2 10/Times-Bold@0 SF +3.729 E F0 1.229(option means to remo)3.729 F 1.529 -.15(ve o)-.15 +H(r).15 E .657(mark all jobs; the)144 96 R F23.157 E F0 .657 +(option without a)3.157 F F1(jobspec)4.897 E F0(ar)3.467 E .656 +(gument restricts operation to running jobs.)-.18 F(The)5.656 E +(return v)144 108 Q(alue is 0 unless a)-.25 E F1(jobspec)4.24 E F0 +(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E F2(echo)108 124.8 Q +F0([)2.5 E F2(\255neE)A F0 2.5(][)C F1(ar)-2.5 E(g)-.37 E F0(...])2.5 E +.394(Output the)144 136.8 R F1(ar)2.894 E(g)-.37 E F0 .394 (s, separated by spaces, follo)B .395(wed by a ne)-.25 F 2.895 (wline. The)-.25 F .395(return status is al)2.895 F -.1(wa)-.1 G .395 -(ys 0.).1 F(If)5.395 E F12.895 E F0 .549 -(is speci\214ed, the trailing ne)144 108 R .548(wline is suppressed.) --.25 F .548(If the)5.548 F F13.048 E F0 .548(option is gi)3.048 F --.15(ve)-.25 G .548(n, interpretation of the fol-).15 F(lo)144 120 Q -.052(wing backslash-escaped characters is enabled.)-.25 F(The)5.052 E F1 +(ys 0.).1 F(If)5.395 E F22.895 E F0 .549 +(is speci\214ed, the trailing ne)144 148.8 R .548(wline is suppressed.) +-.25 F .548(If the)5.548 F F23.048 E F0 .548(option is gi)3.048 F +-.15(ve)-.25 G .548(n, interpretation of the fol-).15 F(lo)144 160.8 Q +.052(wing backslash-escaped characters is enabled.)-.25 F(The)5.052 E F2 2.552 E F0 .053(option disables the interpretation of these)2.553 -F 1.503(escape characters, e)144 132 R -.15(ve)-.25 G 4.003(no).15 G +F 1.503(escape characters, e)144 172.8 R -.15(ve)-.25 G 4.003(no).15 G 4.003(ns)-4.003 G 1.502(ystems where the)-4.003 F 4.002(ya)-.15 G 1.502 -(re interpreted by def)-4.002 F 4.002(ault. The)-.1 F F1(xpg_echo)4.002 +(re interpreted by def)-4.002 F 4.002(ault. The)-.1 F F2(xpg_echo)4.002 E F0(shell)4.002 E .009 -(option may be used to dynamically determine whether or not)144 144 R F1 -(echo)2.509 E F0 -.15(ex)2.51 G .01(pands these escape characters).15 F -.66(by def)144 156 R(ault.)-.1 E F1(echo)5.66 E F0 .66 -(does not interpret)3.16 F F13.16 E F0 .659 -(to mean the end of options.)3.159 F F1(echo)5.659 E F0 .659 -(interprets the follo)3.159 F(wing)-.25 E(escape sequences:)144 168 Q F1 -(\\a)144 180 Q F0(alert \(bell\))28.22 E F1(\\b)144 192 Q F0(backspace) -27.66 E F1(\\c)144 204 Q F0(suppress trailing ne)28.78 E(wline)-.25 E F1 -(\\e)144 216 Q F0(an escape character)28.78 E F1(\\f)144 228 Q F0 -(form feed)29.89 E F1(\\n)144 240 Q F0(ne)27.66 E 2.5(wl)-.25 G(ine)-2.5 -E F1(\\r)144 252 Q F0(carriage return)28.78 E F1(\\t)144 264 Q F0 -(horizontal tab)29.89 E F1(\\v)144 276 Q F0 -.15(ve)28.22 G(rtical tab) -.15 E F1(\\\\)144 288 Q F0(backslash)30.44 E F1(\\0)144 300 Q F2(nnn)A -F0(the eight-bit character whose v)13.22 E(alue is the octal v)-.25 E -(alue)-.25 E F2(nnn)2.5 E F0(\(zero to three octal digits\))2.5 E F1(\\) -144 312 Q F2(nnn)A F0(the eight-bit character whose v)18.22 E -(alue is the octal v)-.25 E(alue)-.25 E F2(nnn)2.5 E F0 -(\(one to three octal digits\))2.5 E F1(\\x)144 324 Q F2(HH)A F0 -(the eight-bit character whose v)13.78 E(alue is the he)-.25 E -(xadecimal v)-.15 E(alue)-.25 E F2(HH)2.5 E F0(\(one or tw)2.5 E 2.5(oh) --.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F1(enable)108 340.8 Q F0([)2.5 E -F1(\255adnps)A F0 2.5(][)C F1-2.5 E F2(\214lename)2.5 E F0 2.5(][) -C F2(name)-2.5 E F0(...])2.5 E .277(Enable and disable b)144 352.8 R -.278(uiltin shell commands.)-.2 F .278(Disabling a b)5.278 F .278 -(uiltin allo)-.2 F .278(ws a disk command which has)-.25 F .834 -(the same name as a shell b)144 364.8 R .834(uiltin to be e)-.2 F -.15 -(xe)-.15 G .834(cuted without specifying a full pathname, e).15 F -.15 -(ve)-.25 G 3.333(nt).15 G(hough)-3.333 E .989 -(the shell normally searches for b)144 376.8 R .989 -(uiltins before disk commands.)-.2 F(If)5.989 E F13.489 E F0 .99 -(is used, each)3.49 F F2(name)3.49 E F0 .99(is dis-)3.49 F 1.582 -(abled; otherwise,)144 388.8 R F2(names)4.082 E F0 1.582(are enabled.) -4.082 F -.15(Fo)6.582 G 4.082(re).15 G 1.582(xample, to use the)-4.232 F -F1(test)4.082 E F0 1.582(binary found via the)4.082 F/F3 9/Times-Bold@0 -SF -.666(PA)4.081 G(TH)-.189 E F0 .08(instead of the shell b)144 400.8 R -.08(uiltin v)-.2 F .08(ersion, run)-.15 F/F4 10/Courier@0 SF .081 -(enable -n test)2.58 F F0 5.081(.T)C(he)-5.081 E F12.581 E F0 .081 -(option means to load the ne)2.581 F(w)-.25 E -.2(bu)144 412.8 S 1.525 -(iltin command).2 F F2(name)4.385 E F0 1.524(from shared object)4.204 F -F2(\214lename)4.024 E F0 4.024(,o).18 G 4.024(ns)-4.024 G 1.524 -(ystems that support dynamic loading.)-4.024 F(The)144 424.8 Q F1 +(option may be used to dynamically determine whether or not)144 184.8 R +F2(echo)2.509 E F0 -.15(ex)2.51 G .01(pands these escape characters).15 +F .66(by def)144 196.8 R(ault.)-.1 E F2(echo)5.66 E F0 .66 +(does not interpret)3.16 F F23.16 E F0 .659 +(to mean the end of options.)3.159 F F2(echo)5.659 E F0 .659 +(interprets the follo)3.159 F(wing)-.25 E(escape sequences:)144 208.8 Q +F2(\\a)144 220.8 Q F0(alert \(bell\))28.22 E F2(\\b)144 232.8 Q F0 +(backspace)27.66 E F2(\\c)144 244.8 Q F0(suppress trailing ne)28.78 E +(wline)-.25 E F2(\\e)144 256.8 Q F0(an escape character)28.78 E F2(\\f) +144 268.8 Q F0(form feed)29.89 E F2(\\n)144 280.8 Q F0(ne)27.66 E 2.5 +(wl)-.25 G(ine)-2.5 E F2(\\r)144 292.8 Q F0(carriage return)28.78 E F2 +(\\t)144 304.8 Q F0(horizontal tab)29.89 E F2(\\v)144 316.8 Q F0 -.15 +(ve)28.22 G(rtical tab).15 E F2(\\\\)144 328.8 Q F0(backslash)30.44 E F2 +(\\0)144 340.8 Q F1(nnn)A F0(the eight-bit character whose v)13.22 E +(alue is the octal v)-.25 E(alue)-.25 E F1(nnn)2.5 E F0 +(\(zero to three octal digits\))2.5 E F2(\\)144 352.8 Q F1(nnn)A F0 +(the eight-bit character whose v)18.22 E(alue is the octal v)-.25 E +(alue)-.25 E F1(nnn)2.5 E F0(\(one to three octal digits\))2.5 E F2(\\x) +144 364.8 Q F1(HH)A F0(the eight-bit character whose v)13.78 E +(alue is the he)-.25 E(xadecimal v)-.15 E(alue)-.25 E F1(HH)2.5 E F0 +(\(one or tw)2.5 E 2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F2 +(enable)108 381.6 Q F0([)2.5 E F2(\255adnps)A F0 2.5(][)C F2-2.5 E +F1(\214lename)2.5 E F0 2.5(][)C F1(name)-2.5 E F0(...])2.5 E .277 +(Enable and disable b)144 393.6 R .278(uiltin shell commands.)-.2 F .278 +(Disabling a b)5.278 F .278(uiltin allo)-.2 F .278 +(ws a disk command which has)-.25 F .834(the same name as a shell b)144 +405.6 R .834(uiltin to be e)-.2 F -.15(xe)-.15 G .834 +(cuted without specifying a full pathname, e).15 F -.15(ve)-.25 G 3.333 +(nt).15 G(hough)-3.333 E .989(the shell normally searches for b)144 +417.6 R .989(uiltins before disk commands.)-.2 F(If)5.989 E F2 +3.489 E F0 .99(is used, each)3.49 F F1(name)3.49 E F0 .99(is dis-)3.49 F +1.582(abled; otherwise,)144 429.6 R F1(names)4.082 E F0 1.582 +(are enabled.)4.082 F -.15(Fo)6.582 G 4.082(re).15 G 1.582 +(xample, to use the)-4.232 F F2(test)4.082 E F0 1.582 +(binary found via the)4.082 F/F3 9/Times-Bold@0 SF -.666(PA)4.081 G(TH) +-.189 E F0 .08(instead of the shell b)144 441.6 R .08(uiltin v)-.2 F .08 +(ersion, run)-.15 F/F4 10/Courier@0 SF .081(enable -n test)2.58 F F0 +5.081(.T)C(he)-5.081 E F22.581 E F0 .081 +(option means to load the ne)2.581 F(w)-.25 E -.2(bu)144 453.6 S 1.525 +(iltin command).2 F F1(name)4.385 E F0 1.524(from shared object)4.204 F +F1(\214lename)4.024 E F0 4.024(,o).18 G 4.024(ns)-4.024 G 1.524 +(ystems that support dynamic loading.)-4.024 F(The)144 465.6 Q F2 2.866 E F0 .366(option will delete a b)2.866 F .366(uiltin pre)-.2 F -.366(viously loaded with)-.25 F F12.867 E F0 5.367(.I)C 2.867(fn) --5.367 G(o)-2.867 E F2(name)2.867 E F0(ar)2.867 E .367(guments are gi) --.18 F -.15(ve)-.25 G .367(n, or).15 F .399(if the)144 436.8 R F1 +.366(viously loaded with)-.25 F F22.867 E F0 5.367(.I)C 2.867(fn) +-5.367 G(o)-2.867 E F1(name)2.867 E F0(ar)2.867 E .367(guments are gi) +-.18 F -.15(ve)-.25 G .367(n, or).15 F .399(if the)144 477.6 R F2 2.899 E F0 .399(option is supplied, a list of shell b)2.899 F .399 (uiltins is printed.)-.2 F -.4(Wi)5.399 G .399(th no other option ar).4 F .398(guments, the)-.18 F .098(list consists of all enabled shell b)144 -448.8 R 2.598(uiltins. If)-.2 F F12.598 E F0 .098 +489.6 R 2.598(uiltins. If)-.2 F F22.598 E F0 .098 (is supplied, only disabled b)2.598 F .099(uiltins are printed.)-.2 F -(If)5.099 E F12.599 E F0 1.917 -(is supplied, the list printed includes all b)144 460.8 R 1.916 +(If)5.099 E F22.599 E F0 1.917 +(is supplied, the list printed includes all b)144 501.6 R 1.916 (uiltins, with an indication of whether or not each is)-.2 F 2.878 -(enabled. If)144 472.8 R F12.878 E F0 .379 -(is supplied, the output is restricted to the POSIX)2.878 F F2(special) +(enabled. If)144 513.6 R F22.878 E F0 .379 +(is supplied, the output is restricted to the POSIX)2.878 F F1(special) 2.879 E F0 -.2(bu)2.879 G 2.879(iltins. The).2 F .379(return v)2.879 F -(alue)-.25 E .995(is 0 unless a)144 484.8 R F2(name)3.855 E F0 .994 +(alue)-.25 E .995(is 0 unless a)144 525.6 R F1(name)3.855 E F0 .994 (is not a shell b)3.675 F .994(uiltin or there is an error loading a ne) -.2 F 3.494(wb)-.25 G .994(uiltin from a shared)-3.694 F(object.)144 -496.8 Q F1 -2.3 -.15(ev a)108 513.6 T(l).15 E F0([)2.5 E F2(ar)A(g)-.37 -E F0(...])2.5 E(The)144 525.6 Q F2(ar)3.17 E(g)-.37 E F0 3.17(sa)C .671 +537.6 Q F2 -2.3 -.15(ev a)108 554.4 T(l).15 E F0([)2.5 E F1(ar)A(g)-.37 +E F0(...])2.5 E(The)144 566.4 Q F1(ar)3.17 E(g)-.37 E F0 3.17(sa)C .671 (re read and concatenated together into a single command.)-3.17 F .671 -(This command is then read)5.671 F .495(and e)144 537.6 R -.15(xe)-.15 G +(This command is then read)5.671 F .495(and e)144 578.4 R -.15(xe)-.15 G .495(cuted by the shell, and its e).15 F .495 -(xit status is returned as the v)-.15 F .495(alue of)-.25 F F1 -2.3 -.15 +(xit status is returned as the v)-.15 F .495(alue of)-.25 F F2 -2.3 -.15 (ev a)2.995 H(l).15 E F0 5.495(.I)C 2.995(ft)-5.495 G .495(here are no) --2.995 F F2(ar)2.995 E(gs)-.37 E F0(,).27 E(or only null ar)144 549.6 Q -(guments,)-.18 E F1 -2.3 -.15(ev a)2.5 H(l).15 E F0(returns 0.)2.5 E F1 -(exec)108 566.4 Q F0([)2.5 E F1(\255cl)A F0 2.5(][)C F1-2.5 E F2 -(name)2.5 E F0 2.5(][)C F2(command)-2.5 E F0([)2.5 E F2(ar)A(guments) --.37 E F0(]])A(If)144 578.4 Q F2(command)3.005 E F0 .305 +-2.995 F F1(ar)2.995 E(gs)-.37 E F0(,).27 E(or only null ar)144 590.4 Q +(guments,)-.18 E F2 -2.3 -.15(ev a)2.5 H(l).15 E F0(returns 0.)2.5 E F2 +(exec)108 607.2 Q F0([)2.5 E F2(\255cl)A F0 2.5(][)C F2-2.5 E F1 +(name)2.5 E F0 2.5(][)C F1(command)-2.5 E F0([)2.5 E F1(ar)A(guments) +-.37 E F0(]])A(If)144 619.2 Q F1(command)3.005 E F0 .305 (is speci\214ed, it replaces the shell.)3.575 F .305(No ne)5.305 F 2.805 -(wp)-.25 G .306(rocess is created.)-2.805 F(The)5.306 E F2(ar)3.136 E -(guments)-.37 E F0(become)3.076 E .177(the ar)144 590.4 R .177 -(guments to)-.18 F F2(command)2.676 E F0 5.176(.I)C 2.676(ft)-5.176 G -(he)-2.676 E F12.676 E F0 .176 +(wp)-.25 G .306(rocess is created.)-2.805 F(The)5.306 E F1(ar)3.136 E +(guments)-.37 E F0(become)3.076 E .177(the ar)144 631.2 R .177 +(guments to)-.18 F F1(command)2.676 E F0 5.176(.I)C 2.676(ft)-5.176 G +(he)-2.676 E F22.676 E F0 .176 (option is supplied, the shell places a dash at the be)2.676 F .176 -(ginning of)-.15 F .159(the zeroth ar)144 602.4 R 2.659(gp)-.18 G .159 -(assed to)-2.659 F F2(command)2.659 E F0 5.159(.T).77 G .159 -(his is what)-5.159 F F2(lo)2.659 E(gin)-.1 E F0 .159(\(1\) does.).24 F -(The)5.16 E F12.66 E F0 .16(option causes)2.66 F F2(command)2.86 E -F0(to)3.43 E 1.196(be e)144 614.4 R -.15(xe)-.15 G 1.196 -(cuted with an empty en).15 F 3.696(vironment. If)-.4 F F13.696 E -F0 1.196(is supplied, the shell passes)3.696 F F2(name)4.055 E F0 1.195 -(as the zeroth)3.875 F(ar)144 626.4 Q .02(gument to the e)-.18 F -.15 -(xe)-.15 G .02(cuted command.).15 F(If)5.02 E F2(command)2.72 E F0 .02 +(ginning of)-.15 F .159(the zeroth ar)144 643.2 R 2.659(gp)-.18 G .159 +(assed to)-2.659 F F1(command)2.659 E F0 5.159(.T).77 G .159 +(his is what)-5.159 F F1(lo)2.659 E(gin)-.1 E F0 .159(\(1\) does.).24 F +(The)5.16 E F22.66 E F0 .16(option causes)2.66 F F1(command)2.86 E +F0(to)3.43 E 1.196(be e)144 655.2 R -.15(xe)-.15 G 1.196 +(cuted with an empty en).15 F 3.696(vironment. If)-.4 F F23.696 E +F0 1.196(is supplied, the shell passes)3.696 F F1(name)4.055 E F0 1.195 +(as the zeroth)3.875 F(ar)144 667.2 Q .02(gument to the e)-.18 F -.15 +(xe)-.15 G .02(cuted command.).15 F(If)5.02 E F1(command)2.72 E F0 .02 (cannot be e)3.29 F -.15(xe)-.15 G .02 -(cuted for some reason, a non-inter).15 F(-)-.2 E(acti)144 638.4 Q 1.067 +(cuted for some reason, a non-inter).15 F(-)-.2 E(acti)144 679.2 Q 1.067 -.15(ve s)-.25 H .767(hell e).15 F .767(xits, unless the shell option) --.15 F F1(execfail)3.266 E F0 .766 +-.15 F F2(execfail)3.266 E F0 .766 (is enabled, in which case it returns f)3.266 F 3.266(ailure. An)-.1 F -(interacti)144 650.4 Q 1.518 -.15(ve s)-.25 H 1.218(hell returns f).15 F +(interacti)144 691.2 Q 1.518 -.15(ve s)-.25 H 1.218(hell returns f).15 F 1.219(ailure if the \214le cannot be e)-.1 F -.15(xe)-.15 G 3.719 -(cuted. If).15 F F2(command)3.919 E F0 1.219(is not speci\214ed, an) -4.489 F(y)-.15 E .134(redirections tak)144 662.4 R 2.634(ee)-.1 G -.25 +(cuted. If).15 F F1(command)3.919 E F0 1.219(is not speci\214ed, an) +4.489 F(y)-.15 E .134(redirections tak)144 703.2 R 2.634(ee)-.1 G -.25 (ff)-2.634 G .134(ect in the current shell, and the return status is 0.) .25 F .134(If there is a redirection error)5.134 F(,)-.4 E -(the return status is 1.)144 674.4 Q F1(exit)108 691.2 Q F0([)2.5 E F2 -(n)A F0 6.29(]C)C .095(ause the shell to e)-6.29 F .095 -(xit with a status of)-.15 F F2(n)2.595 E F0 5.095(.I)C(f)-5.095 E F2(n) -2.955 E F0 .096(is omitted, the e)2.835 F .096 -(xit status is that of the last command)-.15 F -.15(exe)144 703.2 S 2.5 -(cuted. A).15 F(trap on)2.5 E F3(EXIT)2.5 E F0(is e)2.25 E -.15(xe)-.15 -G(cuted before the shell terminates.).15 E(GNU Bash-3.0)72 768 Q -(2004 June 26)147.345 E(49)197.335 E 0 Cg EP +(the return status is 1.)144 715.2 Q(GNU Bash-3.0)72 768 Q(2004 Sep 17) +149.01 E(49)199 E 0 Cg EP %%Page: 50 50 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Times-Bold@0 SF(export)108 84 Q F0([)2.5 E F1(\255fn)A F0 -2.5(][).833 G/F2 10/Times-Italic@0 SF(name)-2.5 E F0([=)A F2(wor)A(d) --.37 E F0(]] ...)A F1(export \255p)108 96 Q F0 .257(The supplied)144 108 -R F2(names)3.117 E F0 .257(are mark)3.027 F .257(ed for automatic e)-.1 -F .257(xport to the en)-.15 F .257(vironment of subsequently e)-.4 F --.15(xe)-.15 G(cuted).15 E 2.626(commands. If)144 120 R(the)2.626 E F1 -2.626 E F0 .127(option is gi)2.627 F -.15(ve)-.25 G .127(n, the) -.15 F F2(names)2.987 E F0 .127(refer to functions.)2.897 F .127(If no) -5.127 F F2(names)2.987 E F0 .127(are gi)2.897 F -.15(ve)-.25 G .127 -(n, or if the).15 F F1144 132 Q F0 .66 -(option is supplied, a list of all names that are e)3.16 F .659 -(xported in this shell is printed.)-.15 F(The)5.659 E F13.159 E F0 -(option)3.159 E 1.586(causes the e)144 144 R 1.586 +-.35 E/F1 10/Times-Bold@0 SF(exit)108 84 Q F0([)2.5 E/F2 10 +/Times-Italic@0 SF(n)A F0 6.29(]C)C .095(ause the shell to e)-6.29 F +.095(xit with a status of)-.15 F F2(n)2.595 E F0 5.095(.I)C(f)-5.095 E +F2(n)2.955 E F0 .096(is omitted, the e)2.835 F .096 +(xit status is that of the last command)-.15 F -.15(exe)144 96 S 2.5 +(cuted. A).15 F(trap on)2.5 E/F3 9/Times-Bold@0 SF(EXIT)2.5 E F0(is e) +2.25 E -.15(xe)-.15 G(cuted before the shell terminates.).15 E F1 +(export)108 112.8 Q F0([)2.5 E F1(\255fn)A F0 2.5(][).833 G F2(name)-2.5 +E F0([=)A F2(wor)A(d)-.37 E F0(]] ...)A F1(export \255p)108 124.8 Q F0 +.257(The supplied)144 136.8 R F2(names)3.117 E F0 .257(are mark)3.027 F +.257(ed for automatic e)-.1 F .257(xport to the en)-.15 F .257 +(vironment of subsequently e)-.4 F -.15(xe)-.15 G(cuted).15 E 2.626 +(commands. If)144 148.8 R(the)2.626 E F12.626 E F0 .127 +(option is gi)2.627 F -.15(ve)-.25 G .127(n, the).15 F F2(names)2.987 E +F0 .127(refer to functions.)2.897 F .127(If no)5.127 F F2(names)2.987 E +F0 .127(are gi)2.897 F -.15(ve)-.25 G .127(n, or if the).15 F F1 +144 160.8 Q F0 .66(option is supplied, a list of all names that are e) +3.16 F .659(xported in this shell is printed.)-.15 F(The)5.659 E F1 +3.159 E F0(option)3.159 E 1.586(causes the e)144 172.8 R 1.586 (xport property to be remo)-.15 F -.15(ve)-.15 G 4.086(df).15 G 1.586 (rom each)-4.086 F F2(name)4.086 E F0 6.586(.I)C 4.086(fav)-6.586 G -1.587(ariable name is follo)-4.336 F 1.587(wed by)-.25 F(=)144 156 Q F2 -(wor)A(d)-.37 E F0 2.804(,t)C .304(he v)-2.804 F .304(alue of the v)-.25 -F .304(ariable is set to)-.25 F F2(wor)2.804 E(d)-.37 E F0(.)A F1 +1.587(ariable name is follo)-4.336 F 1.587(wed by)-.25 F(=)144 184.8 Q +F2(wor)A(d)-.37 E F0 2.804(,t)C .304(he v)-2.804 F .304(alue of the v) +-.25 F .304(ariable is set to)-.25 F F2(wor)2.804 E(d)-.37 E F0(.)A F1 (export)5.304 E F0 .304(returns an e)2.804 F .303 (xit status of 0 unless an in)-.15 F -.25(va)-.4 G(lid).25 E .293 -(option is encountered, one of the)144 168 R F2(names)2.793 E F0 .293 +(option is encountered, one of the)144 196.8 R F2(names)2.793 E F0 .293 (is not a v)2.793 F .293(alid shell v)-.25 F .293(ariable name, or)-.25 -F F12.793 E F0 .294(is supplied with a)2.793 F F2(name)144.36 180 -Q F0(that is not a function.)2.68 E F1(fc)108 196.8 Q F0([)2.5 E F1 -A F2(ename)2.5 E F0 2.5(][)C F1(\255nlr)-2.5 E F0 2.5(][)C F2 +F F12.793 E F0 .294(is supplied with a)2.793 F F2(name)144.36 +208.8 Q F0(that is not a function.)2.68 E F1(fc)108 225.6 Q F0([)2.5 E +F1A F2(ename)2.5 E F0 2.5(][)C F1(\255nlr)-2.5 E F0 2.5(][)C F2 <8c72>-2.5 E(st)-.1 E F0 2.5(][)C F2(last)-2.5 E F0(])A F1(fc \255s)108 -208.8 Q F0([)2.5 E F2(pat)A F0(=)A F2 -.37(re)C(p).37 E F0 2.5(][)C F2 -(cmd)-2.5 E F0(])A .478(Fix Command.)144 220.8 R .478 +237.6 Q F0([)2.5 E F2(pat)A F0(=)A F2 -.37(re)C(p).37 E F0 2.5(][)C F2 +(cmd)-2.5 E F0(])A .478(Fix Command.)144 249.6 R .478 (In the \214rst form, a range of commands from)5.478 F F2<8c72>4.888 E (st)-.1 E F0(to)3.658 E F2(last)3.068 E F0 .477 -(is selected from the his-)3.658 F .881(tory list.)144 232.8 R F2 -.45 +(is selected from the his-)3.658 F .881(tory list.)144 261.6 R F2 -.45 (Fi)5.881 G -.1(rs).45 G(t).1 E F0(and)4.061 E F2(last)3.471 E F0 .882 (may be speci\214ed as a string \(to locate the last command be)4.062 F .882(ginning with)-.15 F .797(that string\) or as a number \(an inde)144 -244.8 R 3.297(xi)-.15 G .797(nto the history list, where a ne)-3.297 F +273.6 R 3.297(xi)-.15 G .797(nto the history list, where a ne)-3.297 F -.05(ga)-.15 G(ti).05 E 1.097 -.15(ve n)-.25 H .796(umber is used as an) -.15 F(of)144 256.8 Q .276(fset from the current command number\).)-.25 F +.15 F(of)144 285.6 Q .276(fset from the current command number\).)-.25 F (If)5.276 E F2(last)2.866 E F0 .277 (is not speci\214ed it is set to the current command)3.456 F .093 -(for listing \(so that)144 268.8 R/F3 10/Courier@0 SF .092 +(for listing \(so that)144 297.6 R/F4 10/Courier@0 SF .092 (fc \255l \25510)2.592 F F0 .092(prints the last 10 commands\) and to) 2.592 F F2<8c72>4.502 E(st)-.1 E F0 2.592(otherwise. If)3.272 F F2<8c72> 4.502 E(st)-.1 E F0 .092(is not)3.272 F -(speci\214ed it is set to the pre)144 280.8 Q -(vious command for editing and \25516 for listing.)-.25 E(The)144 304.8 +(speci\214ed it is set to the pre)144 309.6 Q +(vious command for editing and \25516 for listing.)-.25 E(The)144 333.6 Q F12.522 E F0 .022 (option suppresses the command numbers when listing.)2.522 F(The)5.022 E F12.522 E F0 .022(option re)2.522 F -.15(ve)-.25 G .022 -(rses the order of).15 F .438(the commands.)144 316.8 R .438(If the) +(rses the order of).15 F .438(the commands.)144 345.6 R .438(If the) 5.438 F F12.938 E F0 .438(option is gi)2.938 F -.15(ve)-.25 G .438 (n, the commands are listed on standard output.).15 F(Otherwise,)5.438 E -.334(the editor gi)144 328.8 R -.15(ve)-.25 G 2.834(nb).15 G(y)-2.834 E +.334(the editor gi)144 357.6 R -.15(ve)-.25 G 2.834(nb).15 G(y)-2.834 E F2(ename)3.024 E F0 .335(is in)3.014 F -.2(vo)-.4 G -.1(ke).2 G 2.835 (do).1 G 2.835(na\214)-2.835 G .335(le containing those commands.)-2.835 F(If)5.335 E F2(ename)3.025 E F0 .335(is not gi)3.015 F -.15(ve)-.25 G -(n,).15 E .631(the v)144 340.8 R .631(alue of the)-.25 F/F4 9 -/Times-Bold@0 SF(FCEDIT)3.131 E F0 -.25(va)2.881 G .631 -(riable is used, and the v).25 F .631(alue of)-.25 F F4(EDIT)3.131 E(OR) --.162 E F0(if)2.881 E F4(FCEDIT)3.13 E F0 .63(is not set.)2.88 F .63 -(If nei-)5.63 F .95(ther v)144 352.8 R .95(ariable is set,)-.25 F F2(vi) -5.116 E F0 .95(is used.)5.116 F .951 +(n,).15 E .631(the v)144 369.6 R .631(alue of the)-.25 F F3(FCEDIT)3.131 +E F0 -.25(va)2.881 G .631(riable is used, and the v).25 F .631(alue of) +-.25 F F3(EDIT)3.131 E(OR)-.162 E F0(if)2.881 E F3(FCEDIT)3.13 E F0 .63 +(is not set.)2.88 F .63(If nei-)5.63 F .95(ther v)144 381.6 R .95 +(ariable is set,)-.25 F F2(vi)5.116 E F0 .95(is used.)5.116 F .951 (When editing is complete, the edited commands are echoed and)5.95 F --.15(exe)144 364.8 S(cuted.).15 E .04(In the second form,)144 388.8 R F2 +-.15(exe)144 393.6 S(cuted.).15 E .04(In the second form,)144 417.6 R F2 (command)2.54 E F0 .04(is re-e)2.54 F -.15(xe)-.15 G .039 (cuted after each instance of).15 F F2(pat)2.539 E F0 .039 (is replaced by)2.539 F F2 -.37(re)2.539 G(p).37 E F0 5.039(.A)C(useful) --2.5 E .406(alias to use with this is)144 400.8 R F3 .406(r='fc \255s') -2.906 F F0 2.906(,s)C 2.906(ot)-2.906 G .406(hat typing)-2.906 F F3 +-2.5 E .406(alias to use with this is)144 429.6 R F4 .406(r='fc \255s') +2.906 F F0 2.906(,s)C 2.906(ot)-2.906 G .406(hat typing)-2.906 F F4 6.406(rc)2.906 G(c)-6.406 E F0 .406(runs the last command be)2.906 F -.407(ginning with)-.15 F F3(cc)144 412.8 Q F0(and typing)2.5 E F3(r)2.5 +.407(ginning with)-.15 F F4(cc)144 441.6 Q F0(and typing)2.5 E F4(r)2.5 E F0(re-e)2.5 E -.15(xe)-.15 G(cutes the last command.).15 E .142 -(If the \214rst form is used, the return v)144 436.8 R .142 +(If the \214rst form is used, the return v)144 465.6 R .142 (alue is 0 unless an in)-.25 F -.25(va)-.4 G .142 (lid option is encountered or).25 F F2<8c72>4.552 E(st)-.1 E F0(or)3.322 -E F2(last)2.732 E F0 .454(specify history lines out of range.)144 448.8 +E F2(last)2.732 E F0 .454(specify history lines out of range.)144 477.6 R .454(If the)5.454 F F12.954 E F0 .454 (option is supplied, the return v)2.954 F .455(alue is the v)-.25 F .455 -(alue of the)-.25 F .788(last command e)144 460.8 R -.15(xe)-.15 G .788 +(alue of the)-.25 F .788(last command e)144 489.6 R -.15(xe)-.15 G .788 (cuted or f).15 F .787 (ailure if an error occurs with the temporary \214le of commands.)-.1 F .787(If the)5.787 F 1.135 (second form is used, the return status is that of the command re-e)144 -472.8 R -.15(xe)-.15 G 1.136(cuted, unless).15 F F2(cmd)3.836 E F0 1.136 -(does not)4.406 F(specify a v)144 484.8 Q +501.6 R -.15(xe)-.15 G 1.136(cuted, unless).15 F F2(cmd)3.836 E F0 1.136 +(does not)4.406 F(specify a v)144 513.6 Q (alid history line, in which case)-.25 E F1(fc)2.5 E F0(returns f)2.5 E -(ailure.)-.1 E F1(fg)108 501.6 Q F0([)2.5 E F2(jobspec)A F0(])A(Resume) -144 513.6 Q F2(jobspec)5.654 E F0 1.413(in the fore)4.224 F 1.413 +(ailure.)-.1 E F1(fg)108 530.4 Q F0([)2.5 E F2(jobspec)A F0(])A(Resume) +144 542.4 Q F2(jobspec)5.654 E F0 1.413(in the fore)4.224 F 1.413 (ground, and mak)-.15 F 3.913(ei)-.1 G 3.913(tt)-3.913 G 1.413 (he current job)-3.913 F 6.413(.I)-.4 G(f)-6.413 E F2(jobspec)5.653 E F0 -1.413(is not present, the)4.223 F(shell')144 525.6 Q 3.116(sn)-.55 G +1.413(is not present, the)4.223 F(shell')144 554.4 Q 3.116(sn)-.55 G .616(otion of the)-3.116 F F2(curr)3.116 E .616(ent job)-.37 F F0 .617 (is used.)3.116 F .617(The return v)5.617 F .617 -(alue is that of the command placed into the)-.25 F(fore)144 537.6 Q +(alue is that of the command placed into the)-.25 F(fore)144 566.4 Q .363(ground, or f)-.15 F .363 (ailure if run when job control is disabled or)-.1 F 2.862(,w)-.4 G .362 -(hen run with job control enabled, if)-2.862 F F2(jobspec)145.74 549.6 Q +(hen run with job control enabled, if)-2.862 F F2(jobspec)145.74 578.4 Q F0 .004(does not specify a v)2.814 F .004(alid job or)-.25 F F2(jobspec) 4.244 E F0 .004(speci\214es a job that w)2.814 F .004 -(as started without job control.)-.1 F F1(getopts)108 566.4 Q F2 +(as started without job control.)-.1 F F1(getopts)108 595.2 Q F2 (optstring name)2.5 E F0([)2.5 E F2(ar)A(gs)-.37 E F0(])A F1(getopts)144 -578.4 Q F0 .793 +607.2 Q F0 .793 (is used by shell procedures to parse positional parameters.)3.294 F F2 (optstring)6.023 E F0 .793(contains the option)3.513 F .149 -(characters to be recognized; if a character is follo)144 590.4 R .15 +(characters to be recognized; if a character is follo)144 619.2 R .15 (wed by a colon, the option is e)-.25 F .15(xpected to ha)-.15 F .45 --.15(ve a)-.2 H(n).15 E(ar)144 602.4 Q .579 +-.15(ve a)-.2 H(n).15 E(ar)144 631.2 Q .579 (gument, which should be separated from it by white space.)-.18 F .578 (The colon and question mark char)5.579 F(-)-.2 E 1.665 -(acters may not be used as option characters.)144 614.4 R 1.665 +(acters may not be used as option characters.)144 643.2 R 1.665 (Each time it is in)6.665 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E F1(getopts) 4.165 E F0 1.665(places the ne)4.165 F(xt)-.15 E .797 -(option in the shell v)144 626.4 R(ariable)-.25 E F2(name)3.297 E F0 +(option in the shell v)144 655.2 R(ariable)-.25 E F2(name)3.297 E F0 3.297(,i).18 G(nitializing)-3.297 E F2(name)3.657 E F0 .797 (if it does not e)3.477 F .796(xist, and the inde)-.15 F 3.296(xo)-.15 G -3.296(ft)-3.296 G .796(he ne)-3.296 F(xt)-.15 E(ar)144 638.4 Q .085 -(gument to be processed into the v)-.18 F(ariable)-.25 E F4(OPTIND)2.585 -E/F5 9/Times-Roman@0 SF(.)A F4(OPTIND)4.585 E F0 .085 +3.296(ft)-3.296 G .796(he ne)-3.296 F(xt)-.15 E(ar)144 667.2 Q .085 +(gument to be processed into the v)-.18 F(ariable)-.25 E F3(OPTIND)2.585 +E/F5 9/Times-Roman@0 SF(.)A F3(OPTIND)4.585 E F0 .085 (is initialized to 1 each time the shell)2.335 F .846 -(or a shell script is in)144 650.4 R -.2(vo)-.4 G -.1(ke).2 G 3.345 +(or a shell script is in)144 679.2 R -.2(vo)-.4 G -.1(ke).2 G 3.345 (d. When).1 F .845(an option requires an ar)3.345 F(gument,)-.18 E F1 (getopts)3.345 E F0 .845(places that ar)3.345 F(gument)-.18 E .803 -(into the v)144 662.4 R(ariable)-.25 E F4(OPT)3.303 E(ARG)-.81 E F5(.)A -F0 .803(The shell does not reset)5.303 F F4(OPTIND)3.303 E F0 .804 +(into the v)144 691.2 R(ariable)-.25 E F3(OPT)3.303 E(ARG)-.81 E F5(.)A +F0 .803(The shell does not reset)5.303 F F3(OPTIND)3.303 E F0 .804 (automatically; it must be manually)3.054 F .294 -(reset between multiple calls to)144 674.4 R F1(getopts)2.793 E F0 .293 +(reset between multiple calls to)144 703.2 R F1(getopts)2.793 E F0 .293 (within the same shell in)2.793 F -.2(vo)-.4 G .293(cation if a ne).2 F -2.793(ws)-.25 G .293(et of parameters)-2.793 F(is to be used.)144 686.4 -Q 2.043(When the end of options is encountered,)144 710.4 R F1(getopts) -4.543 E F0 -.15(ex)4.543 G 2.043(its with a return v).15 F 2.044 -(alue greater than zero.)-.25 F F1(OPTIND)144 722.4 Q F0 -(is set to the inde)2.5 E 2.5(xo)-.15 G 2.5(ft)-2.5 G -(he \214rst non-option ar)-2.5 E(gument, and)-.18 E F1(name)2.5 E F0 -(is set to ?.)2.5 E(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(50) -197.335 E 0 Cg EP +2.793(ws)-.25 G .293(et of parameters)-2.793 F(is to be used.)144 715.2 +Q(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(50)199 E 0 Cg EP %%Page: 51 51 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Times-Bold@0 SF(getopts)144 84 Q F0 2.393 +-.35 E 2.043(When the end of options is encountered,)144 84 R/F1 10 +/Times-Bold@0 SF(getopts)4.543 E F0 -.15(ex)4.543 G 2.043 +(its with a return v).15 F 2.044(alue greater than zero.)-.25 F F1 +(OPTIND)144 96 Q F0(is set to the inde)2.5 E 2.5(xo)-.15 G 2.5(ft)-2.5 G +(he \214rst non-option ar)-2.5 E(gument, and)-.18 E F1(name)2.5 E F0 +(is set to ?.)2.5 E F1(getopts)144 120 Q F0 2.393 (normally parses the positional parameters, b)4.893 F 2.392 (ut if more ar)-.2 F 2.392(guments are gi)-.18 F -.15(ve)-.25 G 4.892 (ni).15 G(n)-4.892 E/F2 10/Times-Italic@0 SF(ar)4.892 E(gs)-.37 E F0(,) -.27 E F1(getopts)144 96 Q F0(parses those instead.)2.5 E F1(getopts)144 -120 Q F0 1.165(can report errors in tw)3.665 F 3.665(ow)-.1 G 3.665 +.27 E F1(getopts)144 132 Q F0(parses those instead.)2.5 E F1(getopts)144 +156 Q F0 1.165(can report errors in tw)3.665 F 3.665(ow)-.1 G 3.665 (ays. If)-3.765 F 1.165(the \214rst character of)3.665 F F2(optstring) 3.895 E F0 1.166(is a colon,)3.886 F F2(silent)4.006 E F0(error)4.346 E -1.264(reporting is used.)144 132 R 1.263 +1.264(reporting is used.)144 168 R 1.263 (In normal operation diagnostic messages are printed when in)6.263 F --.25(va)-.4 G 1.263(lid options or).25 F .393(missing option ar)144 144 +-.25(va)-.4 G 1.263(lid options or).25 F .393(missing option ar)144 180 R .393(guments are encountered.)-.18 F .394(If the v)5.394 F(ariable) -.25 E/F3 9/Times-Bold@0 SF(OPTERR)2.894 E F0 .394 -(is set to 0, no error messages)2.644 F(will be displayed, e)144 156 Q +(is set to 0, no error messages)2.644 F(will be displayed, e)144 192 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 G(he \214rst character of)-2.5 E -F2(optstring)2.73 E F0(is not a colon.)2.72 E .667(If an in)144 180 R +F2(optstring)2.73 E F0(is not a colon.)2.72 E .667(If an in)144 216 R -.25(va)-.4 G .667(lid option is seen,).25 F F1(getopts)3.167 E F0 .667 (places ? into)3.167 F F2(name)3.527 E F0 .666 (and, if not silent, prints an error message)3.347 F .399(and unsets)144 -192 R F3(OPT)2.899 E(ARG)-.81 E/F4 9/Times-Roman@0 SF(.)A F0(If)4.899 E +228 R F3(OPT)2.899 E(ARG)-.81 E/F4 9/Times-Roman@0 SF(.)A F0(If)4.899 E F1(getopts)2.899 E F0 .399 (is silent, the option character found is placed in)2.899 F F3(OPT)2.899 -E(ARG)-.81 E F0 .4(and no)2.65 F(diagnostic message is printed.)144 204 -Q 1.242(If a required ar)144 228 R 1.242(gument is not found, and)-.18 F +E(ARG)-.81 E F0 .4(and no)2.65 F(diagnostic message is printed.)144 240 +Q 1.242(If a required ar)144 264 R 1.242(gument is not found, and)-.18 F F1(getopts)3.741 E F0 1.241(is not silent, a question mark \()3.741 F F1 (?).833 E F0 3.741(\)i).833 G 3.741(sp)-3.741 G 1.241(laced in)-3.741 F -F2(name)144 240 Q F0(,).18 E F3(OPT)2.734 E(ARG)-.81 E F0 .234 +F2(name)144 276 Q F0(,).18 E F3(OPT)2.734 E(ARG)-.81 E F0 .234 (is unset, and a diagnostic message is printed.)2.484 F(If)5.234 E F1 (getopts)2.734 E F0 .235(is silent, then a colon \()2.734 F F1(:).833 E -F0(\)).833 E(is placed in)144 252 Q F2(name)2.86 E F0(and)2.68 E F3(OPT) +F0(\)).833 E(is placed in)144 288 Q F2(name)2.86 E F0(and)2.68 E F3(OPT) 2.5 E(ARG)-.81 E F0(is set to the option character found.)2.25 E F1 -(getopts)144 276 Q F0 .902 +(getopts)144 312 Q F0 .902 (returns true if an option, speci\214ed or unspeci\214ed, is found.) 3.402 F .902(It returns f)5.902 F .901(alse if the end of)-.1 F -(options is encountered or an error occurs.)144 288 Q F1(hash)108 304.8 +(options is encountered or an error occurs.)144 324 Q F1(hash)108 340.8 Q F0([)2.5 E F1(\255lr)A F0 2.5(][)C F1-2.5 E F2(\214lename)2.5 E F0 2.5(][)C F1(\255dt)-2.5 E F0 2.5(][)C F2(name)-2.5 E F0(])A -.15(Fo) -144 316.8 S 3.554(re).15 G(ach)-3.554 E F2(name)3.554 E F0 3.554(,t).18 +144 352.8 S 3.554(re).15 G(ach)-3.554 E F2(name)3.554 E F0 3.554(,t).18 G 1.054(he full \214le name of the command is determined by searching t\ -he directories in)-3.554 F F1($P)144 328.8 Q -.95(AT)-.74 G(H).95 E F0 +he directories in)-3.554 F F1($P)144 364.8 Q -.95(AT)-.74 G(H).95 E F0 .35(and remembered.)2.85 F .35(If the)5.35 F F12.85 E F0 .349 (option is supplied, no path search is performed, and)2.849 F F2 (\214lename)4.759 E F0 .452 -(is used as the full \214le name of the command.)144 340.8 R(The)5.452 E +(is used as the full \214le name of the command.)144 376.8 R(The)5.452 E F12.952 E F0 .452(option causes the shell to for)2.952 F .453 -(get all remem-)-.18 F .593(bered locations.)144 352.8 R(The)5.593 E F1 +(get all remem-)-.18 F .593(bered locations.)144 388.8 R(The)5.593 E F1 3.093 E F0 .593(option causes the shell to for)3.093 F .592 (get the remembered location of each)-.18 F F2(name)3.092 E F0(.)A .02 -(If the)144 364.8 R F12.52 E F0 .02 +(If the)144 400.8 R F12.52 E F0 .02 (option is supplied, the full pathname to which each)2.52 F F2(name) 2.521 E F0 .021(corresponds is printed.)2.521 F .021(If multi-)5.021 F -(ple)144 376.8 Q F2(name)3.704 E F0(ar)3.704 E 1.204 +(ple)144 412.8 Q F2(name)3.704 E F0(ar)3.704 E 1.204 (guments are supplied with)-.18 F F13.703 E F0 3.703(,t)C(he) -3.703 E F2(name)3.703 E F0 1.203 -(is printed before the hashed full pathname.)3.703 F(The)144 388.8 Q F1 +(is printed before the hashed full pathname.)3.703 F(The)144 424.8 Q F1 3.215 E F0 .715(option causes output to be displayed in a format \ that may be reused as input.)3.215 F .716(If no ar)5.716 F(gu-)-.18 E -1.184(ments are gi)144 400.8 R -.15(ve)-.25 G 1.184(n, or if only).15 F +1.184(ments are gi)144 436.8 R -.15(ve)-.25 G 1.184(n, or if only).15 F F13.684 E F0 1.183 (is supplied, information about remembered commands is printed.)3.684 F -(The return status is true unless a)144 412.8 Q F2(name)2.86 E F0 +(The return status is true unless a)144 448.8 Q F2(name)2.86 E F0 (is not found or an in)2.68 E -.25(va)-.4 G(lid option is supplied.).25 -E F1(help)108 429.6 Q F0([)2.5 E F1A F0 2.5(][)C F2(pattern)-2.5 E -F0(])A .866(Display helpful information about b)144 441.6 R .867 +E F1(help)108 465.6 Q F0([)2.5 E F1A F0 2.5(][)C F2(pattern)-2.5 E +F0(])A .866(Display helpful information about b)144 477.6 R .867 (uiltin commands.)-.2 F(If)5.867 E F2(pattern)4.617 E F0 .867 (is speci\214ed,)3.607 F F1(help)3.367 E F0(gi)3.367 E -.15(ve)-.25 G 3.367(sd).15 G(etailed)-3.367 E .307(help on all commands matching)144 -453.6 R F2(pattern)2.807 E F0 2.807(;o).24 G .307 +489.6 R F2(pattern)2.807 E F0 2.807(;o).24 G .307 (therwise help for all the b)-2.807 F .306 -(uiltins and shell control struc-)-.2 F .596(tures is printed.)144 465.6 +(uiltins and shell control struc-)-.2 F .596(tures is printed.)144 501.6 R(The)5.596 E F13.096 E F0 .596 (option restricts the information displayed to a short usage synopsis.) 3.096 F(The)5.596 E(return status is 0 unless no command matches)144 -477.6 Q F2(pattern)2.5 E F0(.).24 E F1(history [)108 494.4 Q F2(n)A F1 -(])A(history \255c)108 506.4 Q(history \255d)108 518.4 Q F2(of)2.5 E -(fset)-.18 E F1(history \255anrw)108 530.4 Q F0([)2.5 E F2(\214lename)A -F0(])A F1(history \255p)108 542.4 Q F2(ar)2.5 E(g)-.37 E F0([)2.5 E F2 -(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A F1(history \255s)108 554.4 Q F2(ar) +513.6 Q F2(pattern)2.5 E F0(.).24 E F1(history [)108 530.4 Q F2(n)A F1 +(])A(history \255c)108 542.4 Q(history \255d)108 554.4 Q F2(of)2.5 E +(fset)-.18 E F1(history \255anrw)108 566.4 Q F0([)2.5 E F2(\214lename)A +F0(])A F1(history \255p)108 578.4 Q F2(ar)2.5 E(g)-.37 E F0([)2.5 E F2 +(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A F1(history \255s)108 590.4 Q F2(ar) 2.5 E(g)-.37 E F0([)2.5 E F2(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A -.4(Wi) -144 566.4 S .752 +144 602.4 S .752 (th no options, display the command history list with line numbers.).4 F .752(Lines listed with a)5.752 F F1(*)3.251 E F0(ha)3.251 E -.15(ve)-.2 -G 1.23(been modi\214ed.)144 578.4 R 1.23(An ar)6.23 F 1.23(gument of) +G 1.23(been modi\214ed.)144 614.4 R 1.23(An ar)6.23 F 1.23(gument of) -.18 F F2(n)4.09 E F0 1.231(lists only the last)3.97 F F2(n)4.091 E F0 3.731(lines. If)3.971 F 1.231(the shell v)3.731 F(ariable)-.25 E F1 -(HISTTIME-)3.731 E(FORMA)144 590.4 Q(T)-.95 E F0 .25 +(HISTTIME-)3.731 E(FORMA)144 626.4 Q(T)-.95 E F0 .25 (is set and not null, it is used as a format string for)2.75 F F2 (strftime)2.749 E F0 .249(\(3\) to display the time stamp)B .378 -(associated with each displayed history entry)144 602.4 R 5.378(.N)-.65 +(associated with each displayed history entry)144 638.4 R 5.378(.N)-.65 G 2.878(oi)-5.378 G(nterv)-2.878 E .379 (ening blank is printed between the format-)-.15 F .815 -(ted time stamp and the history line.)144 614.4 R(If)5.814 E F2 +(ted time stamp and the history line.)144 650.4 R(If)5.814 E F2 (\214lename)3.314 E F0 .814 (is supplied, it is used as the name of the history)3.314 F -(\214le; if not, the v)144 626.4 Q(alue of)-.25 E F3(HISTFILE)2.5 E F0 +(\214le; if not, the v)144 662.4 Q(alue of)-.25 E F3(HISTFILE)2.5 E F0 (is used.)2.25 E(Options, if supplied, ha)5 E .3 -.15(ve t)-.2 H -(he follo).15 E(wing meanings:)-.25 E F1144 638.4 Q F0 +(he follo).15 E(wing meanings:)-.25 E F1144 674.4 Q F0 (Clear the history list by deleting all the entries.)25.86 E F1144 -650.4 Q F2(of)2.5 E(fset)-.18 E F0(Delete the history entry at position) -180 662.4 Q F2(of)2.5 E(fset)-.18 E F0(.)A F1144 674.4 Q F0 .598 +686.4 Q F2(of)2.5 E(fset)-.18 E F0(Delete the history entry at position) +180 698.4 Q F2(of)2.5 E(fset)-.18 E F0(.)A F1144 710.4 Q F0 .598 (Append the `)25.3 F(`ne)-.74 E(w')-.25 E 3.098('h)-.74 G .598 (istory lines \(history lines entered since the be)-3.098 F .599 -(ginning of the current)-.15 F F1(bash)180 686.4 Q F0 -(session\) to the history \214le.)2.5 E F1144 698.4 Q F0 .854(Rea\ -d the history lines not already read from the history \214le into the c\ -urrent history list.)24.74 F .772 -(These are lines appended to the history \214le since the be)180 710.4 R -.773(ginning of the current)-.15 F F1(bash)3.273 E F0(ses-)3.273 E -(sion.)180 722.4 Q(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(51) -197.335 E 0 Cg EP +(ginning of the current)-.15 F F1(bash)180 722.4 Q F0 +(session\) to the history \214le.)2.5 E(GNU Bash-3.0)72 768 Q +(2004 Sep 17)149.01 E(51)199 E 0 Cg EP %%Page: 52 52 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Times-Bold@0 SF144 84 Q F0(Read the contents of the \ -history \214le and use them as the current history)25.86 E(.)-.65 E F1 -144 96 Q F0(Write the current history to the history \214le, o) -23.08 E -.15(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G -(ontents.)-2.5 E F1144 108 Q F0 .626 +-.35 E/F1 10/Times-Bold@0 SF144 84 Q F0 .854(Read the history lin\ +es not already read from the history \214le into the current history li\ +st.)24.74 F .772 +(These are lines appended to the history \214le since the be)180 96 R +.773(ginning of the current)-.15 F F1(bash)3.273 E F0(ses-)3.273 E +(sion.)180 108 Q F1144 120 Q F0(Read the contents of the history \ +\214le and use them as the current history)25.86 E(.)-.65 E F1144 +132 Q F0(Write the current history to the history \214le, o)23.08 E -.15 +(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G(ontents.) +-2.5 E F1144 144 Q F0 .626 (Perform history substitution on the follo)24.74 F(wing)-.25 E/F2 10 /Times-Italic@0 SF(ar)3.125 E(gs)-.37 E F0 .625 (and display the result on the standard)3.125 F 2.975(output. Does)180 -120 R .475(not store the results in the history list.)2.975 F(Each)5.475 +156 R .475(not store the results in the history list.)2.975 F(Each)5.475 E F2(ar)2.975 E(g)-.37 E F0 .475(must be quoted to disable)2.975 F -(normal history e)180 132 Q(xpansion.)-.15 E F1144 144 Q F0 .363 +(normal history e)180 168 Q(xpansion.)-.15 E F1144 180 Q F0 .363 (Store the)26.41 F F2(ar)3.193 E(gs)-.37 E F0 .363 (in the history list as a single entry)3.133 F 5.363(.T)-.65 G .362 -(he last command in the history list is)-5.363 F(remo)180 156 Q -.15(ve) +(he last command in the history list is)-5.363 F(remo)180 192 Q -.15(ve) -.15 G 2.5(db).15 G(efore the)-2.5 E F2(ar)2.83 E(gs)-.37 E F0 -(are added.)2.77 E .28(If the)144 172.8 R F1(HISTTIMEFORMA)2.78 E(T)-.95 +(are added.)2.77 E .28(If the)144 208.8 R F1(HISTTIMEFORMA)2.78 E(T)-.95 E F0 .28 (is set, the time stamp information associated with each history entry) -2.78 F .216(is written to the history \214le.)144 184.8 R .216 +2.78 F .216(is written to the history \214le.)144 220.8 R .216 (The return v)5.216 F .216(alue is 0 unless an in)-.25 F -.25(va)-.4 G .216(lid option is encountered, an error).25 F .422 -(occurs while reading or writing the history \214le, an in)144 196.8 R +(occurs while reading or writing the history \214le, an in)144 232.8 R -.25(va)-.4 G(lid).25 E F2(of)2.922 E(fset)-.18 E F0 .422 (is supplied as an ar)2.922 F .422(gument to)-.18 F F12.922 E F0 -(,)A(or the history e)144 208.8 Q(xpansion supplied as an ar)-.15 E +(,)A(or the history e)144 244.8 Q(xpansion supplied as an ar)-.15 E (gument to)-.18 E F12.5 E F0 -.1(fa)2.5 G(ils.).1 E F1(jobs)108 -225.6 Q F0([)2.5 E F1(\255lnprs)A F0 2.5(][)C F2(jobspec)A F0(... ])2.5 -E F1(jobs \255x)108 237.6 Q F2(command)2.5 E F0([)2.5 E F2(ar)2.5 E(gs) --.37 E F0(... ])2.5 E(The \214rst form lists the acti)144 249.6 Q .3 +261.6 Q F0([)2.5 E F1(\255lnprs)A F0 2.5(][)C F2(jobspec)A F0(... ])2.5 +E F1(jobs \255x)108 273.6 Q F2(command)2.5 E F0([)2.5 E F2(ar)2.5 E(gs) +-.37 E F0(... ])2.5 E(The \214rst form lists the acti)144 285.6 Q .3 -.15(ve j)-.25 H 2.5(obs. The).15 F(options ha)2.5 E .3 -.15(ve t)-.2 H -(he follo).15 E(wing meanings:)-.25 E F1144 261.6 Q F0 +(he follo).15 E(wing meanings:)-.25 E F1144 297.6 Q F0 (List process IDs in addition to the normal information.)27.52 E F1 -144 273.6 Q F0(List only the process ID of the job')24.74 E 2.5 -(sp)-.55 G(rocess group leader)-2.5 E(.)-.55 E F1144 285.6 Q F0 +144 309.6 Q F0(List only the process ID of the job')24.74 E 2.5 +(sp)-.55 G(rocess group leader)-2.5 E(.)-.55 E F1144 321.6 Q F0 .194(Display information only about jobs that ha)24.74 F .494 -.15(ve c) -.2 H .193(hanged status since the user w).15 F .193(as last noti-)-.1 F -(\214ed of their status.)180 297.6 Q F1144 309.6 Q F0 -(Restrict output to running jobs.)25.86 E F1144 321.6 Q F0 -(Restrict output to stopped jobs.)26.41 E(If)144 338.4 Q F2(jobspec) +(\214ed of their status.)180 333.6 Q F1144 345.6 Q F0 +(Restrict output to running jobs.)25.86 E F1144 357.6 Q F0 +(Restrict output to stopped jobs.)26.41 E(If)144 374.4 Q F2(jobspec) 4.553 E F0 .313(is gi)3.123 F -.15(ve)-.25 G .313 (n, output is restricted to information about that job).15 F 5.314(.T) --.4 G .314(he return status is 0 unless)-5.314 F(an in)144 350.4 Q -.25 +-.4 G .314(he return status is 0 unless)-5.314 F(an in)144 386.4 Q -.25 (va)-.4 G(lid option is encountered or an in).25 E -.25(va)-.4 G(lid).25 -E F2(jobspec)4.24 E F0(is supplied.)2.81 E .395(If the)144 367.2 R F1 +E F2(jobspec)4.24 E F0(is supplied.)2.81 E .395(If the)144 403.2 R F1 2.895 E F0 .394(option is supplied,)2.894 F F1(jobs)2.894 E F0 .394(replaces an)2.894 F(y)-.15 E F2(jobspec)4.634 E F0 .394(found in) 3.204 F F2(command)3.094 E F0(or)3.664 E F2(ar)3.224 E(gs)-.37 E F0 .394 -(with the corre-)3.164 F(sponding process group ID, and e)144 379.2 Q +(with the corre-)3.164 F(sponding process group ID, and e)144 415.2 Q -.15(xe)-.15 G(cutes).15 E F2(command)2.7 E F0(passing it)3.27 E F2(ar) 2.5 E(gs)-.37 E F0 2.5(,r).27 G(eturning its e)-2.5 E(xit status.)-.15 E -F1(kill)108 396 Q F0([)2.5 E F1A F2(sigspec)2.5 E F0(|)2.5 E F1 +F1(kill)108 432 Q F0([)2.5 E F1A F2(sigspec)2.5 E F0(|)2.5 E F1 2.5 E F2(signum)2.5 E F0(|)2.5 E F12.5 E F2(sigspec)A F0 2.5 (][)C F2(pid)-2.5 E F0(|)2.5 E F2(jobspec)2.5 E F0 2.5(].)C(..)-2.5 E F1 -(kill \255l)108 408 Q F0([)2.5 E F2(sigspec)A F0(|)2.5 E F2 -.2(ex)2.5 G -(it_status).2 E F0(])A .119(Send the signal named by)144 420 R F2 +(kill \255l)108 444 Q F0([)2.5 E F2(sigspec)A F0(|)2.5 E F2 -.2(ex)2.5 G +(it_status).2 E F0(])A .119(Send the signal named by)144 456 R F2 (sigspec)2.959 E F0(or)2.929 E F2(signum)2.959 E F0 .119 (to the processes named by)2.939 F F2(pid)3.87 E F0(or)3.39 E F2 (jobspec)2.62 E F0(.).31 E F2(sigspec)5.46 E F0(is)2.93 E .319 -(either a case-insensiti)144 432 R .619 -.15(ve s)-.25 H .319 +(either a case-insensiti)144 468 R .619 -.15(ve s)-.25 H .319 (ignal name such as).15 F/F3 9/Times-Bold@0 SF(SIGKILL)2.819 E F0 .318 (\(with or without the)2.569 F F3(SIG)2.818 E F0 .318 -(pre\214x\) or a signal)2.568 F(number;)144 444 Q F2(signum)4.188 E F0 +(pre\214x\) or a signal)2.568 F(number;)144 480 Q F2(signum)4.188 E F0 1.349(is a signal number)4.168 F 6.349(.I)-.55 G(f)-6.349 E F2(sigspec) 4.189 E F0 1.349(is not present, then)4.159 F F3(SIGTERM)3.849 E F0 -1.349(is assumed.)3.599 F(An)6.349 E(ar)144 456 Q .523(gument of)-.18 F +1.349(is assumed.)3.599 F(An)6.349 E(ar)144 492 Q .523(gument of)-.18 F F13.023 E F0 .523(lists the signal names.)3.023 F .523(If an)5.523 F 3.023(ya)-.15 G -.18(rg)-3.023 G .523(uments are supplied when).18 F F13.023 E F0 .523(is gi)3.023 F -.15(ve)-.25 G .523(n, the names) -.15 F .28(of the signals corresponding to the ar)144 468 R .28 +.15 F .28(of the signals corresponding to the ar)144 504 R .28 (guments are listed, and the return status is 0.)-.18 F(The)5.28 E F2 --.2(ex)2.78 G(it_status).2 E F0(ar)144 480 Q .378(gument to)-.18 F F1 +-.2(ex)2.78 G(it_status).2 E F0(ar)144 516 Q .378(gument to)-.18 F F1 2.878 E F0 .378 (is a number specifying either a signal number or the e)2.878 F .377 -(xit status of a process termi-)-.15 F .593(nated by a signal.)144 492 R +(xit status of a process termi-)-.15 F .593(nated by a signal.)144 528 R F1(kill)5.593 E F0 .593(returns true if at least one signal w)3.093 F .593(as successfully sent, or f)-.1 F .594(alse if an error)-.1 F -(occurs or an in)144 504 Q -.25(va)-.4 G(lid option is encountered.).25 -E F1(let)108 520.8 Q F2(ar)2.5 E(g)-.37 E F0([)2.5 E F2(ar)A(g)-.37 E F0 -(...])2.5 E(Each)144 532.8 Q F2(ar)3.965 E(g)-.37 E F0 1.135 +(occurs or an in)144 540 Q -.25(va)-.4 G(lid option is encountered.).25 +E F1(let)108 556.8 Q F2(ar)2.5 E(g)-.37 E F0([)2.5 E F2(ar)A(g)-.37 E F0 +(...])2.5 E(Each)144 568.8 Q F2(ar)3.965 E(g)-.37 E F0 1.135 (is an arithmetic e)3.855 F 1.134(xpression to be e)-.15 F -.25(va)-.25 G 1.134(luated \(see).25 F F3 1.134(ARITHMETIC EV)3.634 F(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E/F4 9/Times-Roman@0 SF(\).)A F0 1.134(If the) -5.634 F(last)144 544.8 Q F2(ar)2.83 E(g)-.37 E F0 -.25(eva)2.72 G +5.634 F(last)144 580.8 Q F2(ar)2.83 E(g)-.37 E F0 -.25(eva)2.72 G (luates to 0,).25 E F1(let)2.5 E F0(returns 1; 0 is returned otherwise.) -2.5 E F1(local)108 561.6 Q F0([)2.5 E F2(option)A F0 2.5(][)C F2(name) --2.5 E F0([=)A F2(value)A F0 2.5(].)C(..])-2.5 E -.15(Fo)144 573.6 S +2.5 E F1(local)108 597.6 Q F0([)2.5 E F2(option)A F0 2.5(][)C F2(name) +-2.5 E F0([=)A F2(value)A F0 2.5(].)C(..])-2.5 E -.15(Fo)144 609.6 S 2.56(re).15 G .06(ach ar)-2.56 F .06(gument, a local v)-.18 F .06 (ariable named)-.25 F F2(name)2.92 E F0 .06(is created, and assigned) 2.74 F F2(value)2.56 E F0 5.06(.T).18 G(he)-5.06 E F2(option)2.56 E F0 -.06(can be)2.56 F(an)144 585.6 Q 3.153(yo)-.15 G 3.153(ft)-3.153 G .653 +.06(can be)2.56 F(an)144 621.6 Q 3.153(yo)-.15 G 3.153(ft)-3.153 G .653 (he options accepted by)-3.153 F F1(declar)3.153 E(e)-.18 E F0 5.652(.W) C(hen)-5.652 E F1(local)3.152 E F0 .652 (is used within a function, it causes the v)3.152 F(ari-)-.25 E(able)144 -597.6 Q F2(name)3.72 E F0 .86(to ha)3.54 F 1.16 -.15(ve a v)-.2 H .861 +633.6 Q F2(name)3.72 E F0 .86(to ha)3.54 F 1.16 -.15(ve a v)-.2 H .861 (isible scope restricted to that function and its children.).15 F -.4 -(Wi)5.861 G .861(th no operands,).4 F F1(local)144 609.6 Q F0 1.165 +(Wi)5.861 G .861(th no operands,).4 F F1(local)144 645.6 Q F0 1.165 (writes a list of local v)3.665 F 1.165 (ariables to the standard output.)-.25 F 1.165(It is an error to use) 6.165 F F1(local)3.664 E F0 1.164(when not)3.664 F .232 -(within a function.)144 621.6 R .233(The return status is 0 unless)5.232 +(within a function.)144 657.6 R .233(The return status is 0 unless)5.232 F F1(local)2.733 E F0 .233(is used outside a function, an in)2.733 F -.25(va)-.4 G(lid).25 E F2(name)3.093 E F0(is)2.913 E(supplied, or)144 -633.6 Q F2(name)2.5 E F0(is a readonly v)2.5 E(ariable.)-.25 E F1 -(logout)108 650.4 Q F0(Exit a login shell.)9.33 E F1(popd)108 667.2 Q F0 +669.6 Q F2(name)2.5 E F0(is a readonly v)2.5 E(ariable.)-.25 E F1 +(logout)108 686.4 Q F0(Exit a login shell.)9.33 E F1(popd)108 703.2 Q F0 <5bad>2.5 E F1(n)A F0 2.5(][)C(+)-2.5 E F2(n)A F0 2.5(][)C-2.5 E F2 -(n)A F0(])A(Remo)144 679.2 Q -.15(ve)-.15 G 2.8(se).15 G .3 +(n)A F0(])A(Remo)144 715.2 Q -.15(ve)-.15 G 2.8(se).15 G .3 (ntries from the directory stack.)-2.8 F -.4(Wi)5.299 G .299(th no ar).4 F .299(guments, remo)-.18 F -.15(ve)-.15 G 2.799(st).15 G .299 (he top directory from the)-2.799 F 1.478(stack, and performs a)144 -691.2 R F1(cd)3.978 E F0 1.479(to the ne)3.978 F 3.979(wt)-.25 G 1.479 +727.2 R F1(cd)3.978 E F0 1.479(to the ne)3.978 F 3.979(wt)-.25 G 1.479 (op directory)-3.979 F 6.479(.A)-.65 G -.18(rg)-6.479 G 1.479 (uments, if supplied, ha).18 F 1.779 -.15(ve t)-.2 H 1.479(he follo).15 -F(wing)-.25 E(meanings:)144 703.2 Q F1(+)144 715.2 Q F2(n)A F0(Remo)25.3 -E -.15(ve)-.15 G 2.64(st).15 G(he)-2.64 E F2(n)2.64 E F0 .14 -(th entry counting from the left of the list sho)B .14(wn by)-.25 F F1 -(dirs)2.64 E F0 2.64(,s)C .14(tarting with zero.)-2.64 F -.15(Fo)180 -727.2 S 2.5(re).15 G(xample:)-2.65 E/F5 10/Courier@0 SF(popd +0)2.5 E F0 -(remo)2.5 E -.15(ve)-.15 G 2.5(st).15 G(he \214rst directory)-2.5 E(,) --.65 E F5(popd +1)2.5 E F0(the second.)2.5 E(GNU Bash-3.0)72 768 Q -(2004 June 26)147.345 E(52)197.335 E 0 Cg EP +F(wing)-.25 E(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(52)199 E 0 Cg +EP %%Page: 53 53 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Times-Bold@0 SF144 84 Q/F2 10/Times-Italic@0 SF(n)A F0 -(Remo)25.3 E -.15(ve)-.15 G 3.759(st).15 G(he)-3.759 E F2(n)3.759 E F0 -1.259(th entry counting from the right of the list sho)B 1.26(wn by)-.25 -F F1(dirs)3.76 E F0 3.76(,s)C 1.26(tarting with)-3.76 F 2.5(zero. F)180 -96 R(or e)-.15 E(xample:)-.15 E/F3 10/Courier@0 SF(popd -0)2.5 E F0 -(remo)2.5 E -.15(ve)-.15 G 2.5(st).15 G(he last directory)-2.5 E(,)-.65 -E F3(popd -1)2.5 E F0(the ne)2.5 E(xt to last.)-.15 E F1144 108 Q -F0 .551(Suppresses the normal change of directory when remo)24.74 F .551 +-.35 E(meanings:)144 84 Q/F1 10/Times-Bold@0 SF(+)144 96 Q/F2 10 +/Times-Italic@0 SF(n)A F0(Remo)25.3 E -.15(ve)-.15 G 2.64(st).15 G(he) +-2.64 E F2(n)2.64 E F0 .14 +(th entry counting from the left of the list sho)B .14(wn by)-.25 F F1 +(dirs)2.64 E F0 2.64(,s)C .14(tarting with zero.)-2.64 F -.15(Fo)180 108 +S 2.5(re).15 G(xample:)-2.65 E/F3 10/Courier@0 SF(popd +0)2.5 E F0(remo) +2.5 E -.15(ve)-.15 G 2.5(st).15 G(he \214rst directory)-2.5 E(,)-.65 E +F3(popd +1)2.5 E F0(the second.)2.5 E F1144 120 Q F2(n)A F0(Remo) +25.3 E -.15(ve)-.15 G 3.759(st).15 G(he)-3.759 E F2(n)3.759 E F0 1.259 +(th entry counting from the right of the list sho)B 1.26(wn by)-.25 F F1 +(dirs)3.76 E F0 3.76(,s)C 1.26(tarting with)-3.76 F 2.5(zero. F)180 132 +R(or e)-.15 E(xample:)-.15 E F3(popd -0)2.5 E F0(remo)2.5 E -.15(ve)-.15 +G 2.5(st).15 G(he last directory)-2.5 E(,)-.65 E F3(popd -1)2.5 E F0 +(the ne)2.5 E(xt to last.)-.15 E F1144 144 Q F0 .551 +(Suppresses the normal change of directory when remo)24.74 F .551 (ving directories from the stack, so)-.15 F -(that only the stack is manipulated.)180 120 Q .643(If the)144 136.8 R +(that only the stack is manipulated.)180 156 Q .643(If the)144 172.8 R F1(popd)3.143 E F0 .643(command is successful, a)3.143 F F1(dirs)3.143 E F0 .644(is performed as well, and the return status is 0.)3.143 F F1 -(popd)5.644 E F0 .416(returns f)144 148.8 R .416(alse if an in)-.1 F +(popd)5.644 E F0 .416(returns f)144 184.8 R .416(alse if an in)-.1 F -.25(va)-.4 G .415 (lid option is encountered, the directory stack is empty).25 F 2.915 (,an)-.65 G(on-e)-2.915 E .415(xistent direc-)-.15 F -(tory stack entry is speci\214ed, or the directory change f)144 160.8 Q -(ails.)-.1 E F1(printf)108 177.6 Q F2(format)2.5 E F0([)2.5 E F2(ar)A -(guments)-.37 E F0(])A .372(Write the formatted)144 189.6 R F2(ar)2.872 +(tory stack entry is speci\214ed, or the directory change f)144 196.8 Q +(ails.)-.1 E F1(printf)108 213.6 Q F2(format)2.5 E F0([)2.5 E F2(ar)A +(guments)-.37 E F0(])A .372(Write the formatted)144 225.6 R F2(ar)2.872 E(guments)-.37 E F0 .372 (to the standard output under the control of the)2.872 F F2(format)2.872 E F0 5.372(.T)C(he)-5.372 E F2(format)2.872 E F0 1.804(is a character s\ tring which contains three types of objects: plain characters, which ar\ -e simply)144 201.6 R .158 +e simply)144 237.6 R .158 (copied to standard output, character escape sequences, which are con) -144 213.6 R -.15(ve)-.4 G .159(rted and copied to the stan-).15 F .499(\ +144 249.6 R -.15(ve)-.4 G .159(rted and copied to the stan-).15 F .499(\ dard output, and format speci\214cations, each of which causes printing\ - of the ne)144 225.6 R .499(xt successi)-.15 F -.15(ve)-.25 G F2(ar) -3.149 E(gu-)-.37 E(ment)144 237.6 Q F0 5.423(.I)C 2.923(na)-5.423 G .423 + of the ne)144 261.6 R .499(xt successi)-.15 F -.15(ve)-.25 G F2(ar) +3.149 E(gu-)-.37 E(ment)144 273.6 Q F0 5.423(.I)C 2.923(na)-5.423 G .423 (ddition to the standard)-2.923 F F2(printf)2.923 E F0 .424 (\(1\) formats,)B F1(%b)2.924 E F0(causes)2.924 E F1(printf)2.924 E F0 .424(to e)2.924 F .424(xpand backslash escape)-.15 F .934 -(sequences in the corresponding)144 249.6 R F2(ar)3.434 E(gument)-.37 E +(sequences in the corresponding)144 285.6 R F2(ar)3.434 E(gument)-.37 E F0(\(e)3.434 E .934(xcept that)-.15 F F1(\\c)3.434 E F0 .934 (terminates output, backslashes in)3.434 F F1(\\')3.433 E F0(,)A F1(\\") -3.433 E F0(,)A(and)144 261.6 Q F1(\\?)3.421 E F0 .921(are not remo)3.421 +3.433 E F0(,)A(and)144 297.6 Q F1(\\?)3.421 E F0 .921(are not remo)3.421 F -.15(ve)-.15 G .922(d, and octal escapes be).15 F .922(ginning with) -.15 F F1(\\0)3.422 E F0 .922(may contain up to four digits\), and)3.422 -F F1(%q)144 273.6 Q F0(causes)3.631 E F1(printf)3.631 E F0 1.131 +F F1(%q)144 309.6 Q F0(causes)3.631 E F1(printf)3.631 E F0 1.131 (to output the corresponding)3.631 F F2(ar)3.631 E(gument)-.37 E F0 1.13 -(in a format that can be reused as shell)3.631 F(input.)144 285.6 Q(The) -144 309.6 Q F2(format)3.423 E F0 .923 +(in a format that can be reused as shell)3.631 F(input.)144 321.6 Q(The) +144 345.6 Q F2(format)3.423 E F0 .923 (is reused as necessary to consume all of the)3.423 F F2(ar)3.423 E (guments)-.37 E F0 5.923(.I)C 3.423(ft)-5.923 G(he)-3.423 E F2(format) -3.423 E F0 .924(requires more)3.424 F F2(ar)144 321.6 Q(guments)-.37 E +3.423 E F0 .924(requires more)3.424 F F2(ar)144 357.6 Q(guments)-.37 E F0 .033(than are supplied, the e)2.534 F .033 (xtra format speci\214cations beha)-.15 F .333 -.15(ve a)-.2 H 2.533(si) .15 G 2.533(faz)-2.533 G .033(ero v)-2.533 F .033(alue or null string,) --.25 F(as appropriate, had been supplied.)144 333.6 Q(The return v)5 E +-.25 F(as appropriate, had been supplied.)144 369.6 Q(The return v)5 E (alue is zero on success, non-zero on f)-.25 E(ailure.)-.1 E F1(pushd) -108 350.4 Q F0([)2.5 E F1A F0 2.5(][)C F2(dir)-2.5 E F0(])A F1 -(pushd)108 362.4 Q F0([)2.5 E F1A F0 2.5(][)C(+)-2.5 E F2(n)A F0 +108 386.4 Q F0([)2.5 E F1A F0 2.5(][)C F2(dir)-2.5 E F0(])A F1 +(pushd)108 398.4 Q F0([)2.5 E F1A F0 2.5(][)C(+)-2.5 E F2(n)A F0 2.5(][)C-2.5 E F2(n)A F0(])A .639(Adds a directory to the top of th\ -e directory stack, or rotates the stack, making the ne)144 374.4 R 3.14 -(wt)-.25 G .64(op of the)-3.14 F 1.316(stack the current w)144 386.4 R +e directory stack, or rotates the stack, making the ne)144 410.4 R 3.14 +(wt)-.25 G .64(op of the)-3.14 F 1.316(stack the current w)144 422.4 R 1.316(orking directory)-.1 F 6.316(.W)-.65 G 1.315(ith no ar)-6.716 F 1.315(guments, e)-.18 F 1.315(xchanges the top tw)-.15 F 3.815(od)-.1 G 1.315(irectories and)-3.815 F .871 -(returns 0, unless the directory stack is empty)144 398.4 R 5.871(.A) +(returns 0, unless the directory stack is empty)144 434.4 R 5.871(.A) -.65 G -.18(rg)-5.871 G .872(uments, if supplied, ha).18 F 1.172 -.15 -(ve t)-.2 H .872(he follo).15 F .872(wing mean-)-.25 F(ings:)144 410.4 Q -F1(+)144 422.4 Q F2(n)A F0 1.268(Rotates the stack so that the)25.3 F F2 +(ve t)-.2 H .872(he follo).15 F .872(wing mean-)-.25 F(ings:)144 446.4 Q +F1(+)144 458.4 Q F2(n)A F0 1.268(Rotates the stack so that the)25.3 F F2 (n)3.768 E F0 1.267 (th directory \(counting from the left of the list sho)B 1.267(wn by) --.25 F F1(dirs)180 434.4 Q F0 2.5(,s)C -(tarting with zero\) is at the top.)-2.5 E F1144 446.4 Q F2(n)A F0 +-.25 F F1(dirs)180 470.4 Q F0 2.5(,s)C +(tarting with zero\) is at the top.)-2.5 E F1144 482.4 Q F2(n)A F0 .92(Rotates the stack so that the)25.3 F F2(n)3.42 E F0 .92 (th directory \(counting from the right of the list sho)B .92(wn by)-.25 -F F1(dirs)180 458.4 Q F0 2.5(,s)C(tarting with zero\) is at the top.) --2.5 E F1144 470.4 Q F0 .902(Suppresses the normal change of dire\ +F F1(dirs)180 494.4 Q F0 2.5(,s)C(tarting with zero\) is at the top.) +-2.5 E F1144 506.4 Q F0 .902(Suppresses the normal change of dire\ ctory when adding directories to the stack, so that)24.74 F -(only the stack is manipulated.)180 482.4 Q F2(dir)144.35 494.4 Q F0 +(only the stack is manipulated.)180 518.4 Q F2(dir)144.35 530.4 Q F0 (Adds)23.98 E F2(dir)2.85 E F0 (to the directory stack at the top, making it the ne)3.23 E 2.5(wc)-.25 -G(urrent w)-2.5 E(orking directory)-.1 E(.)-.65 E .488(If the)144 511.2 +G(urrent w)-2.5 E(orking directory)-.1 E(.)-.65 E .488(If the)144 547.2 R F1(pushd)2.988 E F0 .488(command is successful, a)2.988 F F1(dirs) 2.988 E F0 .488(is performed as well.)2.988 F .489 (If the \214rst form is used,)5.488 F F1(pushd)2.989 E F0 1.04 -(returns 0 unless the cd to)144 523.2 R F2(dir)3.89 E F0 -.1(fa)4.27 G +(returns 0 unless the cd to)144 559.2 R F2(dir)3.89 E F0 -.1(fa)4.27 G 3.539(ils. W).1 F 1.039(ith the second form,)-.4 F F1(pushd)3.539 E F0 1.039(returns 0 unless the directory)3.539 F .846(stack is empty)144 -535.2 R 3.346(,an)-.65 G(on-e)-3.346 E .847(xistent directory stack ele\ +571.2 R 3.346(,an)-.65 G(on-e)-3.346 E .847(xistent directory stack ele\ ment is speci\214ed, or the directory change to the)-.15 F -(speci\214ed ne)144 547.2 Q 2.5(wc)-.25 G(urrent directory f)-2.5 E -(ails.)-.1 E F1(pwd)108 564 Q F0([)2.5 E F1(\255LP)A F0(])A .845 -(Print the absolute pathname of the current w)144 576 R .845 +(speci\214ed ne)144 583.2 Q 2.5(wc)-.25 G(urrent directory f)-2.5 E +(ails.)-.1 E F1(pwd)108 600 Q F0([)2.5 E F1(\255LP)A F0(])A .845 +(Print the absolute pathname of the current w)144 612 R .845 (orking directory)-.1 F 5.844(.T)-.65 G .844 (he pathname printed contains no)-5.844 F .181(symbolic links if the)144 -588 R F12.681 E F0 .181(option is supplied or the)2.681 F F1 .181 +624 R F12.681 E F0 .181(option is supplied or the)2.681 F F1 .181 (\255o ph)2.681 F(ysical)-.15 E F0 .181(option to the)2.681 F F1(set) 2.681 E F0 -.2(bu)2.681 G .182(iltin command is).2 F 3.264(enabled. If) -144 600 R(the)3.264 E F13.264 E F0 .763 +144 636 R(the)3.264 E F13.264 E F0 .763 (option is used, the pathname printed may contain symbolic links.)3.264 F .763(The return)5.763 F 1.36(status is 0 unless an error occurs while\ - reading the name of the current directory or an in)144 612 R -.25(va) --.4 G(lid).25 E(option is supplied.)144 624 Q F1 -.18(re)108 640.8 S(ad) + reading the name of the current directory or an in)144 648 R -.25(va) +-.4 G(lid).25 E(option is supplied.)144 660 Q F1 -.18(re)108 676.8 S(ad) .18 E F0([)2.5 E F1(\255ers)A F0 2.5(][)C F1-2.5 E F2(fd)2.5 E F0 2.5(][)C F1-2.5 E F2(timeout)2.5 E F0 2.5(][)C F1-2.5 E F2 (aname)2.5 E F0 2.5(][)C F1-2.5 E F2(pr)2.5 E(ompt)-.45 E F0 2.5 (][)C F1-2.5 E F2(nc)2.5 E(har)-.15 E(s)-.1 E F0 2.5(][)C F1 -2.5 E F2(delim)2.5 E F0 2.5(][)C F2(name)-2.5 E F0(...])2.5 E .516(One\ line is read from the standard input, or from the \214le descriptor)144 -652.8 R F2(fd)3.016 E F0 .516(supplied as an ar)3.016 F .516(gument to) --.18 F(the)144 664.8 Q F12.538 E F0 .038 +688.8 R F2(fd)3.016 E F0 .516(supplied as an ar)3.016 F .516(gument to) +-.18 F(the)144 700.8 Q F12.538 E F0 .038 (option, and the \214rst w)2.538 F .038(ord is assigned to the \214rst) -.1 F F2(name)2.539 E F0 2.539(,t).18 G .039(he second w)-2.539 F .039 (ord to the second)-.1 F F2(name)2.539 E F0(,).18 E .42 -(and so on, with lefto)144 676.8 R -.15(ve)-.15 G 2.92(rw).15 G .42 +(and so on, with lefto)144 712.8 R -.15(ve)-.15 G 2.92(rw).15 G .42 (ords and their interv)-3.02 F .42 (ening separators assigned to the last)-.15 F F2(name)2.92 E F0 5.42(.I) -.18 G 2.92(ft)-5.42 G(here)-2.92 E .54(are fe)144 688.8 R .54(wer w)-.25 +.18 G 2.92(ft)-5.42 G(here)-2.92 E .54(are fe)144 724.8 R .54(wer w)-.25 F .541(ords read from the input stream than names, the remaining names \ -are assigned empty)-.1 F -.25(va)144 700.8 S 2.511(lues. The).25 F .011 -(characters in)2.511 F/F4 9/Times-Bold@0 SF(IFS)2.511 E F0 .011 -(are used to split the line into w)2.261 F 2.511(ords. The)-.1 F .011 -(backslash character \()2.511 F F1(\\)A F0 2.51(\)m)C(ay)-2.51 E 1.89 -(be used to remo)144 712.8 R 2.19 -.15(ve a)-.15 H 2.19 -.15(ny s).15 H -1.891(pecial meaning for the ne).15 F 1.891 -(xt character read and for line continuation.)-.15 F -(Options, if supplied, ha)144 724.8 Q .3 -.15(ve t)-.2 H(he follo).15 E -(wing meanings:)-.25 E(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(53) -197.335 E 0 Cg EP +are assigned empty)-.1 F(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(53) +199 E 0 Cg EP %%Page: 54 54 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Times-Bold@0 SF144 84 Q/F2 10/Times-Italic@0 SF -(aname)2.5 E F0 1.05(The w)180 96 R 1.049 +-.35 E -.25(va)144 84 S 2.511(lues. The).25 F .011(characters in)2.511 F +/F1 9/Times-Bold@0 SF(IFS)2.511 E F0 .011 +(are used to split the line into w)2.261 F 2.511(ords. The)-.1 F .011 +(backslash character \()2.511 F/F2 10/Times-Bold@0 SF(\\)A F0 2.51(\)m)C +(ay)-2.51 E 1.89(be used to remo)144 96 R 2.19 -.15(ve a)-.15 H 2.19 +-.15(ny s).15 H 1.891(pecial meaning for the ne).15 F 1.891 +(xt character read and for line continuation.)-.15 F +(Options, if supplied, ha)144 108 Q .3 -.15(ve t)-.2 H(he follo).15 E +(wing meanings:)-.25 E F2144 120 Q/F3 10/Times-Italic@0 SF(aname) +2.5 E F0 1.05(The w)180 132 R 1.049 (ords are assigned to sequential indices of the array v)-.1 F(ariable) --.25 E F2(aname)3.549 E F0 3.549(,s).18 G 1.049(tarting at 0.)-3.549 F -F2(aname)180.33 108 Q F0(is unset before an)2.68 E 2.5(yn)-.15 G .5 -.25 -(ew va)-2.5 H(lues are assigned.).25 E(Other)5 E F2(name)2.5 E F0(ar)2.5 -E(guments are ignored.)-.18 E F1144 120 Q F2(delim)2.5 E F0 -(The \214rst character of)180 132 Q F2(delim)2.5 E F0 +-.25 E F3(aname)3.549 E F0 3.549(,s).18 G 1.049(tarting at 0.)-3.549 F +F3(aname)180.33 144 Q F0(is unset before an)2.68 E 2.5(yn)-.15 G .5 -.25 +(ew va)-2.5 H(lues are assigned.).25 E(Other)5 E F3(name)2.5 E F0(ar)2.5 +E(guments are ignored.)-.18 E F2144 156 Q F3(delim)2.5 E F0 +(The \214rst character of)180 168 Q F3(delim)2.5 E F0 (is used to terminate the input line, rather than ne)2.5 E(wline.)-.25 E -F1144 144 Q F0 .372 -(If the standard input is coming from a terminal,)25.86 F F1 -.18(re) -2.873 G(adline).18 E F0(\(see)2.873 E/F3 9/Times-Bold@0 SF(READLINE) -2.873 E F0(abo)2.623 E -.15(ve)-.15 G 2.873(\)i).15 G 2.873(su)-2.873 G -(sed)-2.873 E(to obtain the line.)180 156 Q F1144 168 Q F2(nc)2.5 -E(har)-.15 E(s)-.1 E F1 -.18(re)180 180 S(ad).18 E F0 1.395 -(returns after reading)3.895 F F2(nc)3.895 E(har)-.15 E(s)-.1 E F0 1.395 +F2144 180 Q F0 .372 +(If the standard input is coming from a terminal,)25.86 F F2 -.18(re) +2.873 G(adline).18 E F0(\(see)2.873 E F1(READLINE)2.873 E F0(abo)2.623 E +-.15(ve)-.15 G 2.873(\)i).15 G 2.873(su)-2.873 G(sed)-2.873 E +(to obtain the line.)180 192 Q F2144 204 Q F3(nc)2.5 E(har)-.15 E +(s)-.1 E F2 -.18(re)180 216 S(ad).18 E F0 1.395(returns after reading) +3.895 F F3(nc)3.895 E(har)-.15 E(s)-.1 E F0 1.395 (characters rather than w)3.895 F 1.394(aiting for a complete line of) --.1 F(input.)180 192 Q F1144 204 Q F2(pr)2.5 E(ompt)-.45 E F0 -(Display)180 216 Q F2(pr)3.66 E(ompt)-.45 E F0 1.161(on standard error) +-.1 F(input.)180 228 Q F2144 240 Q F3(pr)2.5 E(ompt)-.45 E F0 +(Display)180 252 Q F3(pr)3.66 E(ompt)-.45 E F0 1.161(on standard error) 3.66 F 3.661(,w)-.4 G 1.161(ithout a trailing ne)-3.661 F 1.161 -(wline, before attempting to read)-.25 F(an)180 228 Q 2.5(yi)-.15 G 2.5 +(wline, before attempting to read)-.25 F(an)180 264 Q 2.5(yi)-.15 G 2.5 (nput. The)-2.5 F -(prompt is displayed only if input is coming from a terminal.)2.5 E F1 -144 240 Q F0 .544(Backslash does not act as an escape character) +(prompt is displayed only if input is coming from a terminal.)2.5 E F2 +144 276 Q F0 .544(Backslash does not act as an escape character) 25.86 F 5.543(.T)-.55 G .543(he backslash is considered to be part of) --5.543 F(the line.)180 252 Q(In particular)5 E 2.5(,ab)-.4 G +-5.543 F(the line.)180 288 Q(In particular)5 E 2.5(,ab)-.4 G (ackslash-ne)-2.5 E(wline pair may not be used as a line continuation.) --.25 E F1144 264 Q F0(Silent mode.)26.41 E -(If input is coming from a terminal, characters are not echoed.)5 E F1 -144 276 Q F2(timeout)2.5 E F0(Cause)180 288 Q F1 -.18(re)3.548 G +-.25 E F2144 300 Q F0(Silent mode.)26.41 E +(If input is coming from a terminal, characters are not echoed.)5 E F2 +144 312 Q F3(timeout)2.5 E F0(Cause)180 324 Q F2 -.18(re)3.548 G (ad).18 E F0 1.048(to time out and return f)3.548 F 1.048 -(ailure if a complete line of input is not read within)-.1 F F2(timeout) -180 300 Q F0 2.92(seconds. This)2.92 F .42(option has no ef)2.92 F .42 -(fect if)-.25 F F1 -.18(re)2.92 G(ad).18 E F0 .42 -(is not reading input from the terminal)2.92 F(or a pipe.)180 312 Q F1 -144 324 Q F2(fd)2.5 E/F4 10/Palatino-Roman@0 SF(Read input fr) +(ailure if a complete line of input is not read within)-.1 F F3(timeout) +180 336 Q F0 2.92(seconds. This)2.92 F .42(option has no ef)2.92 F .42 +(fect if)-.25 F F2 -.18(re)2.92 G(ad).18 E F0 .42 +(is not reading input from the terminal)2.92 F(or a pipe.)180 348 Q F2 +144 360 Q F3(fd)2.5 E/F4 10/Palatino-Roman@0 SF(Read input fr) 14.46 E(om \214le descriptor)-.18 E/F5 10/Palatino-Italic@0 SF(fd)2.5 E -F4(.)A .335(If no)144 340.8 R F5(names)3.095 E F4(ar)2.895 E 2.835(es) +F4(.)A .335(If no)144 376.8 R F5(names)3.095 E F4(ar)2.895 E 2.835(es) -.18 G .335(upplied, the line r)-2.835 F .336 (ead is assigned to the variable)-.18 F/F6 9/Palatino-Bold@0 SF(REPL) 2.836 E(Y)-.828 E/F7 9/Palatino-Roman@0 SF(.)A F4 .336(The r)4.836 F -.336(eturn code)-.18 F 1.058(is zer)144 352.8 R 1.058 +.336(eturn code)-.18 F 1.058(is zer)144 388.8 R 1.058 (o, unless end-of-\214le is encounter)-.18 F(ed,)-.18 E/F8 10 /Palatino-Bold@0 SF(read)3.558 E F4 1.058 (times out, or an invalid \214le descriptor is)3.558 F -(supplied as the ar)144 364.8 Q(gument to)-.18 E F82.5 E F4(.)A F8 -(readonly)108 381.6 Q F4([)2.5 E F8(\255apf)A F4 2.5(][)C F5(name)-2.5 E -F4([=)A F5(word)A F4 2.5(].)C(..])-2.5 E .587(The given)144 393.6 R F5 +(supplied as the ar)144 400.8 Q(gument to)-.18 E F82.5 E F4(.)A F8 +(readonly)108 417.6 Q F4([)2.5 E F8(\255apf)A F4 2.5(][)C F5(name)-2.5 E +F4([=)A F5(word)A F4 2.5(].)C(..])-2.5 E .587(The given)144 429.6 R F5 (names)3.087 E F4(ar)3.087 E 3.087(em)-.18 G .587(arked r)-3.087 F .587 (eadonly; the values of these)-.18 F F5(names)3.347 E F4 .588 -(may not be changed by)3.148 F .833(subsequent assignment.)144 405.6 R +(may not be changed by)3.148 F .833(subsequent assignment.)144 441.6 R .833(If the)5.833 F F83.333 E F4 .832 (option is supplied, the functions corr)3.333 F .832(esponding to the) --.18 F F5(names)144 417.6 Q F4(ar)3.809 E 3.809(es)-.18 G 3.809(om) +-.18 F F5(names)144 453.6 Q F4(ar)3.809 E 3.809(es)-.18 G 3.809(om) -3.809 G 3.809(arked. The)-3.809 F F83.809 E F4 1.309(option r) 3.809 F 1.309(estricts the variables to arrays.)-.18 F 1.31(If no)6.31 F -F5(name)4.07 E F4(ar)4.16 E(gu-)-.18 E 1.058(ments ar)144 429.6 R 3.557 +F5(name)4.07 E F4(ar)4.16 E(gu-)-.18 E 1.058(ments ar)144 465.6 R 3.557 (eg)-.18 G 1.057(iven, or if the)-3.557 F F83.557 E F4 1.057 (option is supplied, a list of all r)3.557 F 1.057 -(eadonly names is printed.)-.18 F(The)144 441.6 Q F82.577 E F4 +(eadonly names is printed.)-.18 F(The)144 477.6 Q F82.577 E F4 .077(option causes output to be displayed in a format that may be r) 2.577 F .078(eused as input.)-.18 F .078(If a)5.078 F .903 -(variable name is followed by =)144 453.6 R F5(word)A F4 3.403(,t)C .902 +(variable name is followed by =)144 489.6 R F5(word)A F4 3.403(,t)C .902 (he value of the variable is set to)-3.403 F F5(word)3.402 E F4 5.902 (.T)C .902(he r)-5.902 F(eturn)-.18 E .997 -(status is 0 unless an invalid option is encounter)144 465.6 R .998 +(status is 0 unless an invalid option is encounter)144 501.6 R .998 (ed, one of the)-.18 F F5(names)3.758 E F4 .998(is not a valid shell) -3.558 F(variable name, or)144 477.6 Q F82.5 E F4 +3.558 F(variable name, or)144 513.6 Q F82.5 E F4 (is supplied with a)2.5 E F5(name)2.76 E F4(that is not a function.)2.85 -E F8(return)108 494.4 Q F4([)2.5 E F5(n)A F4(])A .563 -(Causes a function to exit with the r)144 506.4 R .563 +E F8(return)108 530.4 Q F4([)2.5 E F5(n)A F4(])A .563 +(Causes a function to exit with the r)144 542.4 R .563 (eturn value speci\214ed by)-.18 F F5(n)3.063 E F4 5.563(.I).08 G(f) -5.563 E F5(n)3.323 E F4 .563(is omitted, the r)3.143 F(eturn)-.18 E .544(status is that of the last command executed in the function body) -144 518.4 R 5.545(.I)-1.11 G 3.045(fu)-5.545 G .545(sed outside a func-) --3.045 F 1.148(tion, but during execution of a script by the)144 530.4 R +144 554.4 R 5.545(.I)-1.11 G 3.045(fu)-5.545 G .545(sed outside a func-) +-3.045 F 1.148(tion, but during execution of a script by the)144 566.4 R F8(.)3.648 E F4(\()6.148 E F8(source)A F4 3.648(\)c)C 1.148 (ommand, it causes the shell to)-3.648 F .63 -(stop executing that script and r)144 542.4 R .63(eturn either)-.18 F F5 +(stop executing that script and r)144 578.4 R .63(eturn either)-.18 F F5 (n)3.391 E F4 .631(or the exit status of the last command exe-)3.211 F -.541(cuted within the script as the exit status of the script.)144 554.4 +.541(cuted within the script as the exit status of the script.)144 590.4 R .54(If used outside a function and not)5.54 F .037 -(during execution of a script by)144 566.4 R F8(.)2.538 E F4 2.538(,t) +(during execution of a script by)144 602.4 R F8(.)2.538 E F4 2.538(,t) .833 G .038(he r)-2.538 F .038(eturn status is false.)-.18 F .038 -(Any command associated with)5.038 F(the)144 578.4 Q F8(RETURN)2.5 E F4 +(Any command associated with)5.038 F(the)144 614.4 Q F8(RETURN)2.5 E F4 (trap is executed befor)2.5 E 2.5(ee)-.18 G(xecution r)-2.5 E -(esumes after the function or script.)-.18 E F8(set)108 595.2 Q F4([)2.5 +(esumes after the function or script.)-.18 E F8(set)108 631.2 Q F4([)2.5 E F8(\255\255abefhkmnptuvxBCHP)A F4 2.5(][)C F8-2.5 E F5(option) -2.5 E F4 2.5(][)C F5(ar)-2.5 E(g)-.18 E F4(...])2.5 E -.55(Wi)144 607.2 +2.5 E F4 2.5(][)C F5(ar)-2.5 E(g)-.18 E F4(...])2.5 E -.55(Wi)144 643.2 S .246(thout options, the name and value of each shell variable ar).55 F 2.745(ed)-.18 G .245(isplayed in a format that)-2.745 F 2.183(can be r) -144 619.2 R 2.183(eused as input.)-.18 F 2.184 +144 655.2 R 2.183(eused as input.)-.18 F 2.184 (The output is sorted accor)7.183 F 2.184(ding to the curr)-.18 F 2.184 -(ent locale.)-.18 F(When)7.184 E 1.006(options ar)144 631.2 R 3.506(es) +(ent locale.)-.18 F(When)7.184 E 1.006(options ar)144 667.2 R 3.506(es) -.18 G 1.006(peci\214ed, they set or unset shell attributes.)-3.506 F 1.006(Any ar)6.006 F 1.005(guments r)-.18 F 1.005(emaining after)-.18 F -1.981(the options ar)144 643.2 R 4.481(ep)-.18 G -.18(ro)-4.481 G 1.981 +1.981(the options ar)144 679.2 R 4.481(ep)-.18 G -.18(ro)-4.481 G 1.981 (cessed ar).18 F 4.481(et)-.18 G -.18(re)-4.481 G 1.982 (ated as values for the positional parameters and ar).18 F(e)-.18 E -(assigned, in or)144 655.2 Q(der)-.18 E 2.5(,t)-.74 G(o)-2.5 E F8($1)2.5 +(assigned, in or)144 691.2 Q(der)-.18 E 2.5(,t)-.74 G(o)-2.5 E F8($1)2.5 E F4(,)A F8($2)2.5 E F4(,)A F8 2.5(... $)2.5 F F5(n)A F4 5(.O)C (ptions, if speci\214ed, have the following meanings:)-5 E F8144 -667.2 Q F4 1.063(Automatically mark variables and functions which ar) +703.2 Q F4 1.063(Automatically mark variables and functions which ar) 28.94 F 3.563(em)-.18 G 1.063(odi\214ed or cr)-3.563 F 1.063(eated for) --.18 F(export to the envir)184 679.2 Q(onment of subsequent commands.) --.18 E F8144 691.2 Q F4 .096 -(Report the status of terminated backgr)27.83 F .096 -(ound jobs immediately)-.18 F 2.596(,r)-1.11 G .096(ather than befor) --2.596 F(e)-.18 E(the next primary pr)184 703.2 Q 2.5(ompt. This)-.18 F -(is ef)2.5 E(fective only when job contr)-.18 E(ol is enabled.)-.18 E F8 -144 715.2 Q F4 .179(Exit immediately if a)28.94 F F5 .178 -(simple command)2.679 F F4(\(see)2.678 E F6 .178(SHELL GRAMMAR)2.678 F -F4 .178(above\) exits with a)2.428 F(non-zer)184 727.2 Q 3.232(os)-.18 G -3.232(tatus. The)-3.232 F .733 -(shell does not exit if the command that fails is part of the)3.232 F F0 -(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(54)197.335 E 0 Cg EP +-.18 F(export to the envir)184 715.2 Q(onment of subsequent commands.) +-.18 E F0(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(54)199 E 0 Cg EP %%Page: 55 55 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Palatino-Roman@0 SF .696 -(command list immediately following a)184 84 R/F2 10/Palatino-Bold@0 SF -(while)3.196 E F1(or)3.196 E F2(until)3.196 E F1(keywor)3.196 E .696 -(d, part of the test)-.18 F .98(in an)184 96 R/F3 10/Palatino-Italic@0 -SF(if)3.64 E F1 .98(statement, part of a)5.33 F F2(&&)3.48 E F1(or)3.481 -E/F4 10/Symbol SF3.481 E F1 .981(list, or if the command's r)3.481 -F .981(eturn value is)-.18 F(being inverted via)184 108 Q F2(!)2.5 E F1 -5(.A)C(trap on)-2.5 E F2(ERR)2.5 E F1 2.5(,i)C 2.5(fs)-2.5 G -(et, is executed befor)-2.5 E 2.5(et)-.18 G(he shell exits.)-2.5 E F2 -144 120 Q F1(Disable pathname expansion.)30.05 E F2144 132 Q -F1 .592(Remember the location of commands as they ar)27.83 F 3.092(el) --.18 G .591(ooked up for execution.)-3.092 F(This)5.591 E -(is enabled by default.)184 144 Q F2144 156 Q F1 .934(All ar)27.83 +-.35 E/F1 10/Palatino-Bold@0 SF144 84 Q/F2 10/Palatino-Roman@0 SF +.096(Report the status of terminated backgr)27.83 F .096 +(ound jobs immediately)-.18 F 2.596(,r)-1.11 G .096(ather than befor) +-2.596 F(e)-.18 E(the next primary pr)184 96 Q 2.5(ompt. This)-.18 F +(is ef)2.5 E(fective only when job contr)-.18 E(ol is enabled.)-.18 E F1 +144 108 Q F2 .179(Exit immediately if a)28.94 F/F3 10 +/Palatino-Italic@0 SF .178(simple command)2.679 F F2(\(see)2.678 E/F4 9 +/Palatino-Bold@0 SF .178(SHELL GRAMMAR)2.678 F F2 .178 +(above\) exits with a)2.428 F(non-zer)184 120 Q 3.232(os)-.18 G 3.232 +(tatus. The)-3.232 F .733 +(shell does not exit if the command that fails is part of the)3.232 F +.696(command list immediately following a)184 132 R F1(while)3.196 E F2 +(or)3.196 E F1(until)3.196 E F2(keywor)3.196 E .696(d, part of the test) +-.18 F .98(in an)184 144 R F3(if)3.64 E F2 .98(statement, part of a)5.33 +F F1(&&)3.48 E F2(or)3.481 E/F5 10/Symbol SF3.481 E F2 .981 +(list, or if the command's r)3.481 F .981(eturn value is)-.18 F +(being inverted via)184 156 Q F1(!)2.5 E F2 5(.A)C(trap on)-2.5 E F1 +(ERR)2.5 E F2 2.5(,i)C 2.5(fs)-2.5 G(et, is executed befor)-2.5 E 2.5 +(et)-.18 G(he shell exits.)-2.5 E F1144 168 Q F2 +(Disable pathname expansion.)30.05 E F1144 180 Q F2 .592 +(Remember the location of commands as they ar)27.83 F 3.092(el)-.18 G +.591(ooked up for execution.)-3.092 F(This)5.591 E +(is enabled by default.)184 192 Q F1144 204 Q F2 .934(All ar)27.83 F .934(guments in the form of assignment statements ar)-.18 F 3.434(ep) -.18 G .935(laced in the envir)-3.434 F(on-)-.18 E -(ment for a command, not just those that pr)184 168 Q -(ecede the command name.)-.18 E F2144 180 Q F1 .711(Monitor mode.) +(ment for a command, not just those that pr)184 216 Q +(ecede the command name.)-.18 E F1144 228 Q F2 .711(Monitor mode.) 25.05 F .711(Job contr)5.711 F .711(ol is enabled.)-.18 F .711 (This option is on by default for interac-)5.711 F 1.164 -(tive shells on systems that support it \(see)184 192 R/F5 9 -/Palatino-Bold@0 SF 1.165(JOB CONTROL)3.665 F F1 3.665(above\). Backgr) -3.415 F(ound)-.18 E(pr)184 204 Q .54(ocesses r)-.18 F .54 -(un in a separate pr)-.08 F .539(ocess gr)-.18 F .539 -(oup and a line containing their exit status)-.18 F -(is printed upon their completion.)184 216 Q F2144 228 Q F1 1.313 +(tive shells on systems that support it \(see)184 240 R F4 1.165 +(JOB CONTROL)3.665 F F2 3.665(above\). Backgr)3.415 F(ound)-.18 E(pr)184 +252 Q .54(ocesses r)-.18 F .54(un in a separate pr)-.08 F .539(ocess gr) +-.18 F .539(oup and a line containing their exit status)-.18 F +(is printed upon their completion.)184 264 Q F1144 276 Q F2 1.313 (Read commands but do not execute them.)27.83 F 1.313 -(This may be used to check a shell)6.313 F(script for syntax err)184 240 +(This may be used to check a shell)6.313 F(script for syntax err)184 288 Q 2.5(ors. This)-.18 F(is ignor)2.5 E(ed by interactive shells.)-.18 E -F2144 252 Q F3(option\255name)2.5 E F1(The)184 264 Q F3 -(option\255name)2.5 E F1(can be one of the following:)2.5 E F2 -(allexport)184 276 Q F1(Same as)224 288 Q F22.5 E F1(.)A F2 -(braceexpand)184 300 Q F1(Same as)224 312 Q F22.5 E F1(.)A F2 -(emacs)184 324 Q F1 .412 +F1144 300 Q F3(option\255name)2.5 E F2(The)184 312 Q F3 +(option\255name)2.5 E F2(can be one of the following:)2.5 E F1 +(allexport)184 324 Q F2(Same as)224 336 Q F12.5 E F2(.)A F1 +(braceexpand)184 348 Q F2(Same as)224 360 Q F12.5 E F2(.)A F1 +(emacs)184 372 Q F2 .412 (Use an emacs-style command line editing interface.)12.23 F .412 (This is enabled by)5.412 F .358(default when the shell is interactive,\ - unless the shell is started with the)224 336 R F2(\255\255noediting)224 -348 Q F1(option.)2.5 E F2(errtrace)184 360 Q F1(Same as)5.56 E F2 -2.5 E F1(.)A F2(functrace)184 372 Q F1(Same as)224 384 Q F22.5 E -F1(.)A F2(errexit)184 396 Q F1(Same as)10.56 E F22.5 E F1(.)A F2 -(hashall)184 408 Q F1(Same as)6.68 E F22.5 E F1(.)A F2(histexpand) -184 420 Q F1(Same as)224 432 Q F22.5 E F1(.)A F2(history)184 444 Q -F1 2.271(Enable command history)7.78 F 4.771(,a)-1.11 G 4.771(sd)-4.771 -G 2.271(escribed above under)-4.771 F F5(HISTOR)4.771 E(Y)-.495 E/F6 9 -/Palatino-Roman@0 SF(.)A F1(This)6.77 E -(option is on by default in interactive shells.)224 456 Q F2(ignoreeof) -184 468 Q F1 1.673(The ef)224 480 R 1.673 + unless the shell is started with the)224 384 R F1(\255\255noediting)224 +396 Q F2(option.)2.5 E F1(errtrace)184 408 Q F2(Same as)5.56 E F1 +2.5 E F2(.)A F1(functrace)184 420 Q F2(Same as)224 432 Q F12.5 E +F2(.)A F1(errexit)184 444 Q F2(Same as)10.56 E F12.5 E F2(.)A F1 +(hashall)184 456 Q F2(Same as)6.68 E F12.5 E F2(.)A F1(histexpand) +184 468 Q F2(Same as)224 480 Q F12.5 E F2(.)A F1(history)184 492 Q +F2 2.271(Enable command history)7.78 F 4.771(,a)-1.11 G 4.771(sd)-4.771 +G 2.271(escribed above under)-4.771 F F4(HISTOR)4.771 E(Y)-.495 E/F6 9 +/Palatino-Roman@0 SF(.)A F2(This)6.77 E +(option is on by default in interactive shells.)224 504 Q F1(ignoreeof) +184 516 Q F2 1.673(The ef)224 528 R 1.673 (fect is as if the shell command)-.18 F/F7 10/Courier@0 SF(IGNOREEOF=10) -4.174 E F1 1.674(had been exe-)4.174 F(cuted \(see)224 492 Q F2(Shell V) -2.5 E(ariables)-1.11 E F1(above\).)2.5 E F2(keyword)184 504 Q F1 -(Same as)224 516 Q F22.5 E F1(.)A F2(monitor)184 528 Q F1(Same as) -224 540 Q F22.5 E F1(.)A F2(noclobber)184 552 Q F1(Same as)224 564 -Q F22.5 E F1(.)A F2(noexec)184 576 Q F1(Same as)8.89 E F22.5 -E F1(.)A F2(noglob)184 588 Q F1(Same as)7.77 E F22.5 E F1(.)A F2 -(nolog)5 E F1(Curr)2.5 E(ently ignor)-.18 E(ed.)-.18 E F2(notify)184 600 -Q F1(Same as)12.22 E F22.5 E F1(.)A F2(nounset)184 612 Q F1 -(Same as)224 624 Q F22.5 E F1(.)A F2(onecmd)184 636 Q F1(Same as) -224 648 Q F22.5 E F1(.)A F2(physical)184 660 Q F1(Same as)224 672 -Q F22.5 E F1(.)A F2(pipefail)184 684 Q F1 .735(If set, the r)224 -696 R .734 -(eturn value of a pipeline is the value of the last \(rightmost\))-.18 F -.31(command to exit with a non-zer)224 708 R 2.811(os)-.18 G .311 -(tatus, or zer)-2.811 F 2.811(oi)-.18 G 2.811(fa)-2.811 G .311 -(ll commands in the)-2.811 F(pipeline exit successfully)224 720 Q 5(.T) --1.11 G(his option is disabled by default.)-5 E F0(GNU Bash-3.0)72 768 Q -(2004 June 26)147.345 E(55)197.335 E 0 Cg EP +4.174 E F2 1.674(had been exe-)4.174 F(cuted \(see)224 540 Q F1(Shell V) +2.5 E(ariables)-1.11 E F2(above\).)2.5 E F1(keyword)184 552 Q F2 +(Same as)224 564 Q F12.5 E F2(.)A F1(monitor)184 576 Q F2(Same as) +224 588 Q F12.5 E F2(.)A F1(noclobber)184 600 Q F2(Same as)224 612 +Q F12.5 E F2(.)A F1(noexec)184 624 Q F2(Same as)8.89 E F12.5 +E F2(.)A F1(noglob)184 636 Q F2(Same as)7.77 E F12.5 E F2(.)A F1 +(nolog)5 E F2(Curr)2.5 E(ently ignor)-.18 E(ed.)-.18 E F1(notify)184 648 +Q F2(Same as)12.22 E F12.5 E F2(.)A F1(nounset)184 660 Q F2 +(Same as)224 672 Q F12.5 E F2(.)A F1(onecmd)184 684 Q F2(Same as) +224 696 Q F12.5 E F2(.)A F0(GNU Bash-3.0)72 768 Q(2004 Sep 17) +149.01 E(55)199 E 0 Cg EP %%Page: 56 56 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Palatino-Bold@0 SF(posix)184 84 Q/F2 10/Palatino-Roman@0 SF +-.35 E/F1 10/Palatino-Bold@0 SF(physical)184 84 Q/F2 10/Palatino-Roman@0 +SF(Same as)224 96 Q F12.5 E F2(.)A F1(pipefail)184 108 Q F2 .735 +(If set, the r)224 120 R .734 +(eturn value of a pipeline is the value of the last \(rightmost\))-.18 F +.31(command to exit with a non-zer)224 132 R 2.811(os)-.18 G .311 +(tatus, or zer)-2.811 F 2.811(oi)-.18 G 2.811(fa)-2.811 G .311 +(ll commands in the)-2.811 F(pipeline exit successfully)224 144 Q 5(.T) +-1.11 G(his option is disabled by default.)-5 E F1(posix)184 156 Q F2 .815(Change the behavior of)15.56 F F1(bash)3.315 E F2(wher)3.315 E 3.315(et)-.18 G .815(he default operation dif)-3.315 F .815(fers fr)-.18 -F(om)-.18 E(the POSIX 1003.2 standar)224 96 Q 2.5(dt)-.18 G 2.5(om)-2.5 +F(om)-.18 E(the POSIX 1003.2 standar)224 168 Q 2.5(dt)-.18 G 2.5(om)-2.5 G(atch the standar)-2.5 E 2.5(d\()-.18 G/F3 10/Palatino-Italic@0 SF -(`posix mode)-2.5 E F2(\).)A F1(privileged)184 108 Q F2(Same as)224 120 -Q F12.5 E F2(.)A F1(verbose)184 132 Q F2(Same as)224 144 Q F1 -2.5 E F2(.)A F1(vi)184 156 Q F2 +(`posix mode)-2.5 E F2(\).)A F1(privileged)184 180 Q F2(Same as)224 192 +Q F12.5 E F2(.)A F1(verbose)184 204 Q F2(Same as)224 216 Q F1 +2.5 E F2(.)A F1(vi)184 228 Q F2 (Use a vi-style command line editing interface.)31.11 E F1(xtrace)184 -168 Q F2(Same as)13.34 E F12.5 E F2(.)A(If)184 186 Q F14.63 +240 Q F2(Same as)13.34 E F12.5 E F2(.)A(If)184 258 Q F14.63 E F2 2.131(is supplied with no)4.63 F F3(option\255name)4.631 E F2 4.631 (,t)C 2.131(he values of the curr)-4.631 F 2.131(ent options ar)-.18 F -(e)-.18 E 4.412(printed. If)184 198 R F1(+o)4.412 E F2 1.912 +(e)-.18 E 4.412(printed. If)184 270 R F1(+o)4.412 E F2 1.912 (is supplied with no)4.412 F F3(option\255name)4.412 E F2 4.411(,as)C 1.911(eries of)-4.411 F F1(set)4.411 E F2 1.911(commands to)4.411 F -.18 -(re)184 210 S(cr).18 E(eate the curr)-.18 E +(re)184 282 S(cr).18 E(eate the curr)-.18 E (ent option settings is displayed on the standar)-.18 E 2.5(do)-.18 G -(utput.)-2.5 E F1144 222 Q F2 -.9(Tu)27.83 G .853(rn on).9 F F3 +(utput.)-2.5 E F1144 294 Q F2 -.9(Tu)27.83 G .853(rn on).9 F F3 (privileged)3.923 E F2 3.353(mode. In)3.683 F .853(this mode, the)3.353 F/F4 9/Palatino-Bold@0 SF($ENV)3.353 E F2(and)3.103 E F4($BASH_ENV)3.354 -E F2 .854(\214les ar)3.104 F 3.354(en)-.18 G(ot)-3.354 E(pr)184 234 Q +E F2 .854(\214les ar)3.104 F 3.354(en)-.18 G(ot)-3.354 E(pr)184 306 Q 2.873(ocessed, shell functions ar)-.18 F 5.373(en)-.18 G 2.873 (ot inherited fr)-5.373 F 2.873(om the envir)-.18 F 2.873 -(onment, and the)-.18 F F4(SHELLOPTS)184 246 Q F2 .548 +(onment, and the)-.18 F F4(SHELLOPTS)184 318 Q F2 .548 (variable, if it appears in the envir)2.798 F .548(onment, is ignor)-.18 F 3.049(ed. If)-.18 F .549(the shell is)3.049 F 1.115 -(started with the ef)184 258 R 1.115(fective user \(gr)-.18 F 1.115 +(started with the ef)184 330 R 1.115(fective user \(gr)-.18 F 1.115 (oup\) id not equal to the r)-.18 F 1.115(eal user \(gr)-.18 F 1.115 -(oup\) id,)-.18 F .497(and the)184 270 R F12.997 E F2 .498 +(oup\) id,)-.18 F .497(and the)184 342 R F12.997 E F2 .498 (option is not supplied, these actions ar)2.998 F 2.998(et)-.18 G .498 (aken and the ef)-2.998 F .498(fective user)-.18 F .685 -(id is set to the r)184 282 R .685(eal user id.)-.18 F .685(If the)5.685 +(id is set to the r)184 354 R .685(eal user id.)-.18 F .685(If the)5.685 F F13.185 E F2 .684(option is supplied at startup, the ef)3.185 F -(fective)-.18 E .752(user id is not r)184 294 R 3.252(eset. T)-.18 F +(fective)-.18 E .752(user id is not r)184 366 R 3.252(eset. T)-.18 F .752(urning this option of)-.9 F 3.252(fc)-.18 G .752(auses the ef) -3.252 F .753(fective user and gr)-.18 F(oup)-.18 E -(ids to be set to the r)184 306 Q(eal user and gr)-.18 E(oup ids.)-.18 E -F1144 318 Q F2(Exit after r)30.61 E -(eading and executing one command.)-.18 E F1144 330 Q F2 -.88 -.9 +(ids to be set to the r)184 378 Q(eal user and gr)-.18 E(oup ids.)-.18 E +F1144 390 Q F2(Exit after r)30.61 E +(eading and executing one command.)-.18 E F1144 402 Q F2 -.88 -.9 (Tr e)27.83 H 2.498(at unset variables as an err).9 F 2.498 (or when performing parameter expansion.)-.18 F(If)7.498 E .869 (expansion is attempted on an unset variable, the shell prints an err) -184 342 R .87(or message,)-.18 F -(and, if not interactive, exits with a non-zer)184 354 Q 2.5(os)-.18 G -(tatus.)-2.5 E F1144 366 Q F2(Print shell input lines as they ar) -28.38 E 2.5(er)-.18 G(ead.)-2.68 E F1144 378 Q F2 2.637 +184 414 R .87(or message,)-.18 F +(and, if not interactive, exits with a non-zer)184 426 Q 2.5(os)-.18 G +(tatus.)-2.5 E F1144 438 Q F2(Print shell input lines as they ar) +28.38 E 2.5(er)-.18 G(ead.)-2.68 E F1144 450 Q F2 2.637 (After expanding each)28.94 F F3 2.637(simple command)5.137 F F2(,)A F1 (for)5.137 E F2(command,)5.137 E F1(case)5.136 E F2(command,)5.136 E F1 -(select)5.136 E F2 .954(command, or arithmetic)184 390 R F1(for)3.454 E +(select)5.136 E F2 .954(command, or arithmetic)184 462 R F1(for)3.454 E F2 .955(command, display the expanded value of)3.455 F F4(PS4)3.455 E/F5 9/Palatino-Roman@0 SF(,)A F2(fol-)3.205 E -(lowed by the command and its expanded ar)184 402 Q +(lowed by the command and its expanded ar)184 474 Q (guments or associated wor)-.18 E 2.5(dl)-.18 G(ist.)-2.5 E F1144 -414 Q F2 .484(The shell performs brace expansion \(see)27.27 F F1 .484 +486 Q F2 .484(The shell performs brace expansion \(see)27.27 F F1 .484 (Brace Expansion)2.984 F F2 2.984(above\). This)2.984 F .484(is on by) -2.984 F(default.)184 426 Q F1144 438 Q F2 .077(If set,)26.72 F F1 +2.984 F(default.)184 498 Q F1144 510 Q F2 .077(If set,)26.72 F F1 (bash)2.577 E F2 .077(does not overwrite an existing \214le with the) 2.577 F F1(>)2.578 E F2(,)A F1(>&)2.578 E F2 2.578(,a)C(nd)-2.578 E F1 (<>)2.578 E F2 -.18(re)2.578 G(dir).18 E(ection)-.18 E 2.645 -(operators. This)184 450 R .145(may be overridden when cr)2.645 F .145 -(eating output \214les by using the r)-.18 F(edi-)-.18 E -.18(re)184 462 +(operators. This)184 522 R .145(may be overridden when cr)2.645 F .145 +(eating output \214les by using the r)-.18 F(edi-)-.18 E -.18(re)184 534 S(ction operator).18 E F1(>|)2.5 E F2(instead of)2.5 E F1(>)2.5 E F2(.)A -F1144 474 Q F2 .901(If set, any trap on)27.83 F F1(ERR)3.402 E F2 +F1144 546 Q F2 .901(If set, any trap on)27.83 F F1(ERR)3.402 E F2 .902(is inherited by shell functions, command substitutions,)3.402 F .75 -(and commands executed in a subshell envir)184 486 R 3.25(onment. The) +(and commands executed in a subshell envir)184 558 R 3.25(onment. The) -.18 F F1(ERR)3.25 E F2 .75(trap is normally)3.25 F -(not inherited in such cases.)184 498 Q F1144 510 Q F2(Enable) +(not inherited in such cases.)184 570 Q F1144 582 Q F2(Enable) 25.61 E F1(!)2.515 E F2 .015(style history substitution.)5.015 F .016 (This option is on by default when the shell is)5.016 F(interactive.)184 -522 Q F1144 534 Q F2 .693(If set, the shell does not follow symbo\ -lic links when executing commands such)27.83 F(as)184 546 Q F1(cd)3.569 +594 Q F1144 606 Q F2 .693(If set, the shell does not follow symbo\ +lic links when executing commands such)27.83 F(as)184 618 Q F1(cd)3.569 E F2 1.069(that change the curr)3.569 F 1.069(ent working dir)-.18 F (ectory)-.18 E 6.069(.I)-1.11 G 3.569(tu)-6.069 G 1.07 -(ses the physical dir)-3.569 F(ectory)-.18 E(str)184 558 Q(uctur)-.08 E +(ses the physical dir)-3.569 F(ectory)-.18 E(str)184 630 Q(uctur)-.08 E 2.912(ei)-.18 G 2.912(nstead. By)-2.912 F(default,)2.912 E F1(bash)2.912 E F2 .412(follows the logical chain of dir)2.912 F .411(ectories when) --.18 F(performing commands which change the curr)184 570 Q(ent dir)-.18 -E(ectory)-.18 E(.)-1.11 E F1144 582 Q F2 1.25(If set, any trap on) +-.18 F(performing commands which change the curr)184 642 Q(ent dir)-.18 +E(ectory)-.18 E(.)-1.11 E F1144 654 Q F2 1.25(If set, any trap on) 27.27 F F1(DEBUG)3.751 E F2 1.251 (is inherited by shell functions, command substitu-)3.751 F .712 -(tions, and commands executed in a subshell envir)184 594 R 3.212 +(tions, and commands executed in a subshell envir)184 666 R 3.212 (onment. The)-.18 F F1(DEBUG)3.212 E F2 .711(trap is)3.211 F -(normally not inherited in such cases.)184 606 Q F1144 618 Q F2 +(normally not inherited in such cases.)184 678 Q F1144 690 Q F2 1.781(If no ar)27.88 F 1.782 (guments follow this option, then the positional parameters ar)-.18 F 4.282(eu)-.18 G(nset.)-4.282 E 1.303 -(Otherwise, the positional parameters ar)184 630 R 3.803(es)-.18 G 1.303 +(Otherwise, the positional parameters ar)184 702 R 3.803(es)-.18 G 1.303 (et to the)-3.803 F F3(ar)3.803 E(g)-.18 E F2 1.303 -(s, even if some of them)B(begin with a)184 642 Q F12.5 E F2(.)A F1 -144 654 Q F2 1.295(Signal the end of options, cause all r)33.94 F -(emaining)-.18 E F3(ar)3.796 E(g)-.18 E F2 3.796(st)C 3.796(ob)-3.796 G -3.796(ea)-3.796 G 1.296(ssigned to the posi-)-3.796 F .042 -(tional parameters.)184 666 R(The)5.042 E F12.542 E F2(and)2.542 E +(s, even if some of them)B(begin with a)184 714 Q F12.5 E F2(.)A F0 +(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(56)199 E 0 Cg EP +%%Page: 57 57 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Palatino-Bold@0 SF144 84 Q/F2 10/Palatino-Roman@0 SF +1.295(Signal the end of options, cause all r)33.94 F(emaining)-.18 E/F3 +10/Palatino-Italic@0 SF(ar)3.796 E(g)-.18 E F2 3.796(st)C 3.796(ob) +-3.796 G 3.796(ea)-3.796 G 1.296(ssigned to the posi-)-3.796 F .042 +(tional parameters.)184 96 R(The)5.042 E F12.542 E F2(and)2.542 E F12.542 E F2 .041(options ar)2.541 F 2.541(et)-.18 G .041 (urned of)-2.541 F 2.541(f. If)-.18 F(ther)2.541 E 2.541(ea)-.18 G .401 -.18(re n)-2.541 H(o).18 E F3(ar)2.541 E(g)-.18 E F2 .041(s, the)B -(positional parameters r)184 678 Q(emain unchanged.)-.18 E .12 -(The options ar)144 694.8 R 2.62(eo)-.18 G .48 -.18(ff b)-2.62 H 2.62 +(positional parameters r)184 108 Q(emain unchanged.)-.18 E .12 +(The options ar)144 124.8 R 2.62(eo)-.18 G .48 -.18(ff b)-2.62 H 2.62 (yd).18 G .121(efault unless otherwise noted.)-2.62 F .121 (Using + rather than \255 causes these)5.121 F .278 -(options to be turned of)144 706.8 R 2.778(f. The)-.18 F .277 +(options to be turned of)144 136.8 R 2.778(f. The)-.18 F .277 (options can also be speci\214ed as ar)2.777 F .277 -(guments to an invocation)-.18 F .722(of the shell.)144 718.8 R .723 +(guments to an invocation)-.18 F .722(of the shell.)144 148.8 R .723 (The curr)5.723 F .723(ent set of options may be found in)-.18 F F1 <24ad>3.223 E F2 5.723(.T)C .723(he r)-5.723 F .723 -(eturn status is always)-.18 F(tr)144 730.8 Q -(ue unless an invalid option is encounter)-.08 E(ed.)-.18 E F0 -(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(56)197.335 E 0 Cg EP -%%Page: 57 57 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Palatino-Bold@0 SF(shift)108 84 Q/F2 10/Palatino-Roman@0 SF -([)2.5 E/F3 10/Palatino-Italic@0 SF(n)A F2(])A .807 -(The positional parameters fr)144 96 R(om)-.18 E F3(n)3.306 E F2 .806 -(+1 ... ar)B 3.306(er)-.18 G .806(enamed to)-3.486 F F1 .806($1 ....) -3.306 F F2 .806(Parameters r)5.806 F(epr)-.18 E .806(esented by)-.18 F -.055(the numbers)144 108 R F1($#)2.555 E F2 .055(down to)2.555 F F1($#) -2.555 E F2A F3(n)A F2 .055(+1 ar)B 2.555(eu)-.18 G(nset.)-2.555 E F3 -(n)5.315 E F2 .055(must be a non-negative number less than or)2.635 F -.495(equal to)144 120 R F1($#)2.995 E F2 5.495(.I)C(f)-5.495 E F3(n) -3.255 E F2 .494(is 0, no parameters ar)3.075 F 2.994(ec)-.18 G 2.994 -(hanged. If)-2.994 F F3(n)3.254 E F2 .494 -(is not given, it is assumed to be 1.)3.074 F(If)144 132 Q F3(n)4.052 E -F2 1.292(is gr)3.872 F 1.292(eater than)-.18 F F1($#)3.792 E F2 3.792 -(,t)C 1.292(he positional parameters ar)-3.792 F 3.792(en)-.18 G 1.292 -(ot changed.)-3.792 F 1.292(The r)6.292 F 1.292(eturn status is)-.18 F -(gr)144 144 Q(eater than zer)-.18 E 2.5(oi)-.18 G(f)-2.5 E F3(n)2.76 E -F2(is gr)2.58 E(eater than)-.18 E F1($#)2.5 E F2(or less than zer)2.5 E -(o; otherwise 0.)-.18 E F1(shopt)108 160.8 Q F2([)2.5 E F1(\255pqsu)A F2 -2.5(][)C F1-2.5 E F2 2.5(][)C F3(optname)-2.5 E F2(...])2.5 E -.92 -(To)144 172.8 S 1.523(ggle the values of variables contr).92 F 1.522 +(eturn status is always)-.18 F(tr)144 160.8 Q +(ue unless an invalid option is encounter)-.08 E(ed.)-.18 E F1(shift)108 +177.6 Q F2([)2.5 E F3(n)A F2(])A .807(The positional parameters fr)144 +189.6 R(om)-.18 E F3(n)3.306 E F2 .806(+1 ... ar)B 3.306(er)-.18 G .806 +(enamed to)-3.486 F F1 .806($1 ....)3.306 F F2 .806(Parameters r)5.806 F +(epr)-.18 E .806(esented by)-.18 F .055(the numbers)144 201.6 R F1($#) +2.555 E F2 .055(down to)2.555 F F1($#)2.555 E F2A F3(n)A F2 .055 +(+1 ar)B 2.555(eu)-.18 G(nset.)-2.555 E F3(n)5.315 E F2 .055 +(must be a non-negative number less than or)2.635 F .495(equal to)144 +213.6 R F1($#)2.995 E F2 5.495(.I)C(f)-5.495 E F3(n)3.255 E F2 .494 +(is 0, no parameters ar)3.075 F 2.994(ec)-.18 G 2.994(hanged. If)-2.994 +F F3(n)3.254 E F2 .494(is not given, it is assumed to be 1.)3.074 F(If) +144 225.6 Q F3(n)4.052 E F2 1.292(is gr)3.872 F 1.292(eater than)-.18 F +F1($#)3.792 E F2 3.792(,t)C 1.292(he positional parameters ar)-3.792 F +3.792(en)-.18 G 1.292(ot changed.)-3.792 F 1.292(The r)6.292 F 1.292 +(eturn status is)-.18 F(gr)144 237.6 Q(eater than zer)-.18 E 2.5(oi)-.18 +G(f)-2.5 E F3(n)2.76 E F2(is gr)2.58 E(eater than)-.18 E F1($#)2.5 E F2 +(or less than zer)2.5 E(o; otherwise 0.)-.18 E F1(shopt)108 254.4 Q F2 +([)2.5 E F1(\255pqsu)A F2 2.5(][)C F1-2.5 E F2 2.5(][)C F3 +(optname)-2.5 E F2(...])2.5 E -.92(To)144 266.4 S 1.523 +(ggle the values of variables contr).92 F 1.522 (olling optional shell behavior)-.18 F 6.522(.W)-.74 G 1.522 -(ith no options, or)-7.072 F 2.531(with the)144 184.8 R F15.031 E +(ith no options, or)-7.072 F 2.531(with the)144 278.4 R F15.031 E F2 2.531(option, a list of all settable options is displayed, with an i\ -ndication of)5.031 F .962(whether or not each is set.)144 196.8 R(The) +ndication of)5.031 F .962(whether or not each is set.)144 290.4 R(The) 5.962 E F13.462 E F2 .962 (option causes output to be displayed in a form that)3.462 F(may be r) -144 208.8 Q(eused as input.)-.18 E -(Other options have the following meanings:)5 E F1144 220.8 Q F2 -(Enable \(set\) each)25.5 E F3(optname)2.5 E F2(.)A F1144 232.8 Q +144 302.4 Q(eused as input.)-.18 E +(Other options have the following meanings:)5 E F1144 314.4 Q F2 +(Enable \(set\) each)25.5 E F3(optname)2.5 E F2(.)A F1144 326.4 Q F2(Disable \(unset\) each)23.83 E F3(optname)2.5 E F2(.)A F1144 -244.8 Q F2(Suppr)23.83 E .903(esses normal output \(quiet mode\); the r) +338.4 Q F2(Suppr)23.83 E .903(esses normal output \(quiet mode\); the r) -.18 F .903(eturn status indicates whether the)-.18 F F3(optname)180 -256.8 Q F2 1.679(is set or unset.)4.179 F 1.679(If multiple)6.679 F F3 +350.4 Q F2 1.679(is set or unset.)4.179 F 1.679(If multiple)6.679 F F3 (optname)4.178 E F2(ar)4.178 E 1.678(guments ar)-.18 F 4.178(eg)-.18 G 1.678(iven with)-4.178 F F14.178 E F2 4.178(,t)C(he)-4.178 E -.18 -(re)180 268.8 S(turn status is zer).18 E 2.5(oi)-.18 G 2.5(fa)-2.5 G(ll) +(re)180 362.4 S(turn status is zer).18 E 2.5(oi)-.18 G 2.5(fa)-2.5 G(ll) -2.5 E F3(optnames)2.5 E F2(ar)2.5 E 2.5(ee)-.18 G(nabled; non-zer)-2.5 -E 2.5(oo)-.18 G(therwise.)-2.5 E F1144 280.8 Q F2 1.348 +E 2.5(oo)-.18 G(therwise.)-2.5 E F1144 374.4 Q F2 1.348 (Restricts the values of)24.38 F F3(optname)3.848 E F2 1.348 (to be those de\214ned for the)3.848 F F13.848 E F2 1.348 -(option to the)3.848 F F1(set)3.848 E F2(builtin.)180 292.8 Q 1.86 -(If either)144 309.6 R F14.36 E F2(or)4.36 E F14.36 E F2 +(option to the)3.848 F F1(set)3.848 E F2(builtin.)180 386.4 Q 1.86 +(If either)144 403.2 R F14.36 E F2(or)4.36 E F14.36 E F2 1.86(is used with no)4.36 F F3(optname)4.36 E F2(ar)4.36 E 1.86 (guments, the display is limited to those)-.18 F 1.061(options which ar) -144 321.6 R 3.561(es)-.18 G 1.062(et or unset, r)-3.561 F(espectively) +144 415.2 R 3.561(es)-.18 G 1.062(et or unset, r)-3.561 F(espectively) -.18 E 6.062(.U)-1.11 G 1.062(nless otherwise noted, the)-6.062 F F1 -(shopt)3.562 E F2(options)3.562 E(ar)144 333.6 Q 2.5(ed)-.18 G -(isabled \(unset\) by default.)-2.5 E .473(The r)144 350.4 R .473 +(shopt)3.562 E F2(options)3.562 E(ar)144 427.2 Q 2.5(ed)-.18 G +(isabled \(unset\) by default.)-2.5 E .473(The r)144 444 R .473 (eturn status when listing options is zer)-.18 F 2.973(oi)-.18 G 2.973 (fa)-2.973 G(ll)-2.973 E F3(optnames)2.973 E F2(ar)2.973 E 2.973(ee)-.18 G .472(nabled, non-zer)-2.973 F 2.972(oo)-.18 G(ther)-2.972 E(-)-.18 E -2.601(wise. When)144 362.4 R .101(setting or unsetting options, the r) +2.601(wise. When)144 456 R .101(setting or unsetting options, the r) 2.601 F .101(eturn status is zer)-.18 F 2.602(ou)-.18 G .102(nless an) --2.602 F F3(optname)2.602 E F2 .102(is not)2.602 F 2.5(av)144 374.4 S -(alid shell option.)-2.5 E(The list of)144 391.2 Q F1(shopt)2.5 E F2 -(options is:)2.5 E F1(cdable_vars)144 409.2 Q F2 .364(If set, an ar)184 -421.2 R .364(gument to the)-.18 F F1(cd)2.864 E F2 .364 +-2.602 F F3(optname)2.602 E F2 .102(is not)2.602 F 2.5(av)144 468 S +(alid shell option.)-2.5 E(The list of)144 484.8 Q F1(shopt)2.5 E F2 +(options is:)2.5 E F1(cdable_vars)144 502.8 Q F2 .364(If set, an ar)184 +514.8 R .364(gument to the)-.18 F F1(cd)2.864 E F2 .364 (builtin command that is not a dir)2.864 F .364(ectory is assumed)-.18 F -(to be the name of a variable whose value is the dir)184 433.2 Q -(ectory to change to.)-.18 E F1(cdspell)144 445.2 Q F2 1.137 +(to be the name of a variable whose value is the dir)184 526.8 Q +(ectory to change to.)-.18 E F1(cdspell)144 538.8 Q F2 1.137 (If set, minor err)7.24 F 1.138(ors in the spelling of a dir)-.18 F 1.138(ectory component in a)-.18 F F1(cd)3.638 E F2(command)3.638 E -1.289(will be corr)184 457.2 R 3.788(ected. The)-.18 F(err)3.788 E 1.288 +1.289(will be corr)184 550.8 R 3.788(ected. The)-.18 F(err)3.788 E 1.288 (ors checked for ar)-.18 F 3.788(et)-.18 G 1.288 -(ransposed characters, a missing)-3.788 F(character)184 469.2 Q 2.74(,a) +(ransposed characters, a missing)-3.788 F(character)184 562.8 Q 2.74(,a) -.74 G .24(nd one character too many)-2.74 F 5.241(.I)-1.11 G 2.741(fac) -5.241 G(orr)-2.741 E .241(ection is found, the corr)-.18 F .241 -(ected \214le)-.18 F .431(name is printed, and the command pr)184 481.2 +(ected \214le)-.18 F .431(name is printed, and the command pr)184 574.8 R 2.931(oceeds. This)-.18 F .43(option is only used by inter)2.931 F(-) --.18 E(active shells.)184 493.2 Q F1(checkhash)144 505.2 Q F2 .762 -(If set,)184 517.2 R F1(bash)3.262 E F2 .763 +-.18 E(active shells.)184 586.8 Q F1(checkhash)144 598.8 Q F2 .762 +(If set,)184 610.8 R F1(bash)3.262 E F2 .763 (checks that a command found in the hash table exists befor)3.263 F -3.263(et)-.18 G(rying)-3.263 E .023(to execute it.)184 529.2 R .023 +3.263(et)-.18 G(rying)-3.263 E .023(to execute it.)184 622.8 R .023 (If a hashed command no longer exists, a normal path sear)5.023 F .022 -(ch is per)-.18 F(-)-.18 E(formed.)184 541.2 Q F1(checkwinsize)144 553.2 -Q F2 2.584(If set,)184 565.2 R F1(bash)5.084 E F2 2.584 +(ch is per)-.18 F(-)-.18 E(formed.)184 634.8 Q F1(checkwinsize)144 646.8 +Q F2 2.584(If set,)184 658.8 R F1(bash)5.084 E F2 2.584 (checks the window size after each command and, if necessary)5.084 F(,) --1.11 E(updates the values of)184 577.2 Q/F4 9/Palatino-Bold@0 SF(LINES) +-1.11 E(updates the values of)184 670.8 Q/F4 9/Palatino-Bold@0 SF(LINES) 2.5 E F2(and)2.25 E F4(COLUMNS)2.5 E/F5 9/Palatino-Roman@0 SF(.)A F1 -(cmdhist)144 589.2 Q F2 1.298(If set,)184 601.2 R F1(bash)3.798 E F2 +(cmdhist)144 682.8 Q F2 1.298(If set,)184 694.8 R F1(bash)3.798 E F2 1.297(attempts to save all lines of a multiple-line command in the same) -3.797 F(history entry)184 613.2 Q 5(.T)-1.11 G(his allows easy r)-5 E -(e-editing of multi-line commands.)-.18 E F1(dotglob)144 625.2 Q F2 -1.338(If set,)184 637.2 R F1(bash)3.838 E F2 1.338 -(includes \214lenames beginning with a `.' in the r)3.838 F 1.339 -(esults of pathname)-.18 F(expansion.)184 649.2 Q F1(execfail)144 661.2 -Q F2 .315(If set, a non-interactive shell will not exit if it cannot ex\ -ecute the \214le speci\214ed as)5.01 F .783(an ar)184 673.2 R .783 -(gument to the)-.18 F F1(exec)3.283 E F2 .783(builtin command.)3.283 F -.783(An interactive shell does not exit if)5.783 F F1(exec)184 685.2 Q -F2(fails.)2.5 E F1(expand_aliases)144 697.2 Q F2 1.159 -(If set, aliases ar)184 709.2 R 3.659(ee)-.18 G 1.159 -(xpanded as described above under)-3.659 F F4(ALIASES)3.659 E F5(.)A F2 -1.159(This option is)5.659 F(enabled by default for interactive shells.) -184 721.2 Q F0(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(57)197.335 E -0 Cg EP +3.797 F(history entry)184 706.8 Q 5(.T)-1.11 G(his allows easy r)-5 E +(e-editing of multi-line commands.)-.18 E F0(GNU Bash-3.0)72 768 Q +(2004 Sep 17)149.01 E(57)199 E 0 Cg EP %%Page: 58 58 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Palatino-Bold@0 SF(extdebug)144 84 Q/F2 10/Palatino-Roman@0 -SF(If set, behavior intended for use by debuggers is enabled:)184 96 Q -F1(1.)184 108 Q F2(The)28.5 E F13.607 E F2 1.107(option to the) -3.607 F F1(declare)3.607 E F2 1.108(builtin displays the sour)3.607 F -1.108(ce \214le name and)-.18 F .624(line number corr)220 120 R .624 +-.35 E/F1 10/Palatino-Bold@0 SF(dotglob)144 84 Q/F2 10/Palatino-Roman@0 +SF 1.338(If set,)184 96 R F1(bash)3.838 E F2 1.338 +(includes \214lenames beginning with a `.' in the r)3.838 F 1.339 +(esults of pathname)-.18 F(expansion.)184 108 Q F1(execfail)144 120 Q F2 +.315(If set, a non-interactive shell will not exit if it cannot execute\ + the \214le speci\214ed as)5.01 F .783(an ar)184 132 R .783 +(gument to the)-.18 F F1(exec)3.283 E F2 .783(builtin command.)3.283 F +.783(An interactive shell does not exit if)5.783 F F1(exec)184 144 Q F2 +(fails.)2.5 E F1(expand_aliases)144 156 Q F2 1.159(If set, aliases ar) +184 168 R 3.659(ee)-.18 G 1.159(xpanded as described above under)-3.659 +F/F3 9/Palatino-Bold@0 SF(ALIASES)3.659 E/F4 9/Palatino-Roman@0 SF(.)A +F2 1.159(This option is)5.659 F +(enabled by default for interactive shells.)184 180 Q F1(extdebug)144 +192 Q F2(If set, behavior intended for use by debuggers is enabled:)184 +204 Q F1(1.)184 216 Q F2(The)28.5 E F13.607 E F2 1.107 +(option to the)3.607 F F1(declare)3.607 E F2 1.108 +(builtin displays the sour)3.607 F 1.108(ce \214le name and)-.18 F .624 +(line number corr)220 228 R .624 (esponding to each function name supplied as an ar)-.18 F(gu-)-.18 E -(ment.)220 132 Q F1(2.)184 144 Q F2 .98(If the command r)28.5 F .98 +(ment.)220 240 Q F1(2.)184 252 Q F2 .98(If the command r)28.5 F .98 (un by the)-.08 F F1(DEBUG)3.48 E F2 .98(trap r)3.48 F .98 (eturns a non-zer)-.18 F 3.48(ov)-.18 G .98(alue, the)-3.48 F -(next command is skipped and not executed.)220 156 Q F1(3.)184 168 Q F2 +(next command is skipped and not executed.)220 264 Q F1(3.)184 276 Q F2 1.107(If the command r)28.5 F 1.107(un by the)-.08 F F1(DEBUG)3.607 E F2 1.106(trap r)3.606 F 1.106(eturns a value of 2, and the)-.18 F .87 -(shell is executing in a subr)220 180 R .871 +(shell is executing in a subr)220 288 R .871 (outine \(a shell function or a shell script exe-)-.18 F(cuted by the) -220 192 Q F1(.)2.5 E F2(or)2.5 E F1(source)2.5 E F2 +220 300 Q F1(.)2.5 E F2(or)2.5 E F1(source)2.5 E F2 (builtins\), a call to)2.5 E F1(return)2.5 E F2(is simulated.)2.5 E F1 -(extglob)144 204 Q F2 .432(If set, the extended pattern matching featur) +(extglob)144 312 Q F2 .432(If set, the extended pattern matching featur) 6.11 F .432(es described above under)-.18 F F1(Pathname)2.932 E -(Expansion)184 216 Q F2(ar)2.5 E 2.5(ee)-.18 G(nabled.)-2.5 E F1 -(extquote)144 228 Q F2 .143(If set,)184 240 R F1($)2.643 E F2(')A/F3 10 +(Expansion)184 324 Q F2(ar)2.5 E 2.5(ee)-.18 G(nabled.)-2.5 E F1 +(extquote)144 336 Q F2 .143(If set,)184 348 R F1($)2.643 E F2(')A/F5 10 /Palatino-Italic@0 SF(string)A F2 2.643('a)C(nd)-2.643 E F1($)2.643 E F2 -(")A F3(string)A F2 2.643("q)C .143(uoting is performed within)-2.643 F -F1(${)2.643 E F3(parameter)A F1(})A F2(expansions)2.643 E -(enclosed in double quotes.)184 252 Q -(This option is enabled by default.)5 E F1(failglob)144 264 Q F2 .507(I\ +(")A F5(string)A F2 2.643("q)C .143(uoting is performed within)-2.643 F +F1(${)2.643 E F5(parameter)A F1(})A F2(expansions)2.643 E +(enclosed in double quotes.)184 360 Q +(This option is enabled by default.)5 E F1(failglob)144 372 Q F2 .507(I\ f set, patterns which fail to match \214lenames during pathname expansi\ -on r)184 276 R(esult)-.18 E(in an expansion err)184 288 Q(or)-.18 E(.) --.74 E F1(force_\214gnore)144 300 Q F2 1.118(If set, the suf)184 312 R +on r)184 384 R(esult)-.18 E(in an expansion err)184 396 Q(or)-.18 E(.) +-.74 E F1(force_\214gnore)144 408 Q F2 1.118(If set, the suf)184 420 R 1.118(\214xes speci\214ed by the)-.18 F F1(FIGNORE)3.618 E F2 1.119 -(shell variable cause wor)3.619 F 1.119(ds to be)-.18 F(ignor)184 324 Q +(shell variable cause wor)3.619 F 1.119(ds to be)-.18 F(ignor)184 432 Q 1.291(ed when performing wor)-.18 F 3.791(dc)-.18 G 1.291 (ompletion even if the ignor)-3.791 F 1.291(ed wor)-.18 F 1.291(ds ar) --.18 F 3.79(et)-.18 G(he)-3.79 E 1.7(only possible completions.)184 336 -R(See)6.7 E/F4 9/Palatino-Bold@0 SF 1.7(SHELL V)4.2 F(ARIABLES)-1.161 E -F2 1.701(above for a description of)3.95 F F1(FIGNORE)184 348 Q F2 5(.T) -C(his option is enabled by default.)-5 E F1(gnu_errfmt)144 360 Q F2 .843 -(If set, shell err)184 372 R .843(or messages ar)-.18 F 3.342(ew)-.18 G +-.18 F 3.79(et)-.18 G(he)-3.79 E 1.7(only possible completions.)184 444 +R(See)6.7 E F3 1.7(SHELL V)4.2 F(ARIABLES)-1.161 E F2 1.701 +(above for a description of)3.95 F F1(FIGNORE)184 456 Q F2 5(.T)C +(his option is enabled by default.)-5 E F1(gnu_errfmt)144 468 Q F2 .843 +(If set, shell err)184 480 R .843(or messages ar)-.18 F 3.342(ew)-.18 G .842(ritten in the standar)-3.342 F 3.342(dG)-.18 G .842(NU err)-3.342 F -.842(or message for)-.18 F(-)-.18 E(mat.)184 384 Q F1(histappend)144 396 +.842(or message for)-.18 F(-)-.18 E(mat.)184 492 Q F1(histappend)144 504 Q F2 1.127(If set, the history list is appended to the \214le named by \ -the value of the)184 408 R F1(HIST)3.627 E(-)-.92 E(FILE)184 420 Q F2 +the value of the)184 516 R F1(HIST)3.627 E(-)-.92 E(FILE)184 528 Q F2 (variable when the shell exits, rather than overwriting the \214le.)2.5 -E F1(histreedit)144 432 Q F2 1.381(If set, and)184 444 R F1(readline) +E F1(histreedit)144 540 Q F2 1.381(If set, and)184 552 R F1(readline) 3.881 E F2 1.381(is being used, a user is given the opportunity to r) -3.881 F 1.38(e-edit a)-.18 F(failed history substitution.)184 456 Q F1 -(histverify)144 468 Q F2 2.133(If set, and)184 480 R F1(readline)4.633 E +3.881 F 1.38(e-edit a)-.18 F(failed history substitution.)184 564 Q F1 +(histverify)144 576 Q F2 2.133(If set, and)184 588 R F1(readline)4.633 E F2 2.133(is being used, the r)4.633 F 2.133 (esults of history substitution ar)-.18 F 4.634(en)-.18 G(ot)-4.634 E -.383(immediately passed to the shell parser)184 492 R 5.383(.I)-.74 G +.383(immediately passed to the shell parser)184 600 R 5.383(.I)-.74 G .382(nstead, the r)-5.383 F .382(esulting line is loaded into)-.18 F -(the)184 504 Q F1(readline)2.5 E F2(editing buf)2.5 E(fer)-.18 E 2.5(,a) --.74 G(llowing further modi\214cation.)-2.5 E F1(hostcomplete)144 516 Q -F2 .647(If set, and)184 528 R F1(readline)3.147 E F2 .648 +(the)184 612 Q F1(readline)2.5 E F2(editing buf)2.5 E(fer)-.18 E 2.5(,a) +-.74 G(llowing further modi\214cation.)-2.5 E F1(hostcomplete)144 624 Q +F2 .647(If set, and)184 636 R F1(readline)3.147 E F2 .648 (is being used,)3.147 F F1(bash)3.148 E F2 .648 (will attempt to perform hostname com-)3.148 F .44(pletion when a wor) -184 540 R 2.939(dc)-.18 G .439(ontaining a)-2.939 F F1(@)2.939 E F2 .439 +184 648 R 2.939(dc)-.18 G .439(ontaining a)-2.939 F F1(@)2.939 E F2 .439 (is being completed \(see)2.939 F F1(Completing)2.939 E F2(under)2.939 E -F4(READLINE)184 552 Q F2 2.5(above\). This)2.25 F -(is enabled by default.)2.5 E F1(huponexit)144 564 Q F2(If set,)184 576 -Q F1(bash)2.5 E F2(will send)2.5 E F4(SIGHUP)2.5 E F2 +F3(READLINE)184 660 Q F2 2.5(above\). This)2.25 F +(is enabled by default.)2.5 E F1(huponexit)144 672 Q F2(If set,)184 684 +Q F1(bash)2.5 E F2(will send)2.5 E F3(SIGHUP)2.5 E F2 (to all jobs when an interactive login shell exits.)2.25 E F1 -(interactive_comments)144 588 Q F2 .26(If set, allow a wor)184 600 R +(interactive_comments)144 696 Q F2 .26(If set, allow a wor)184 708 R 2.76(db)-.18 G .26(eginning with)-2.76 F F1(#)2.76 E F2 .26 (to cause that wor)2.76 F 2.76(da)-.18 G .26(nd all r)-2.76 F .26 (emaining char)-.18 F(-)-.18 E .512(acters on that line to be ignor)184 -612 R .512(ed in an interactive shell \(see)-.18 F F4(COMMENTS)3.012 E -F2(above\).)2.762 E(This option is enabled by default.)184 624 Q F1 -(lithist)144 636 Q F2 .513(If set, and the)12.8 F F1(cmdhist)3.013 E F2 -.513(option is enabled, multi-line commands ar)3.013 F 3.013(es)-.18 G -.513(aved to the)-3.013 F .643(history with embedded newlines rather th\ -an using semicolon separators wher)184 648 R(e)-.18 E(possible.)184 660 -Q F1(login_shell)144 672 Q F2 2.454 -(The shell sets this option if it is started as a login shell \(see)184 -684 R F4(INVOCA)4.954 E(TION)-.828 E F2 2.5(above\). The)184 696 R -(value may not be changed.)2.5 E F0(GNU Bash-3.0)72 768 Q(2004 June 26) -147.345 E(58)197.335 E 0 Cg EP +720 R .512(ed in an interactive shell \(see)-.18 F F3(COMMENTS)3.012 E +F2(above\).)2.762 E F0(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(58)199 +E 0 Cg EP %%Page: 59 59 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Palatino-Bold@0 SF(mailwarn)144 84 Q/F2 10/Palatino-Roman@0 -SF .965(If set, and a \214le that)184 96 R F1(bash)3.465 E F2 .964 -(is checking for mail has been accessed since the last)3.464 F 1.647 -(time it was checked, the message `)184 108 R 1.647(`The mail in)-.37 F -/F3 10/Palatino-Italic@0 SF(mail\214le)4.147 E F2 1.647(has been r)4.147 +-.35 E/F1 10/Palatino-Roman@0 SF(This option is enabled by default.)184 +84 Q/F2 10/Palatino-Bold@0 SF(lithist)144 96 Q F1 .513(If set, and the) +12.8 F F2(cmdhist)3.013 E F1 .513 +(option is enabled, multi-line commands ar)3.013 F 3.013(es)-.18 G .513 +(aved to the)-3.013 F .643(history with embedded newlines rather than u\ +sing semicolon separators wher)184 108 R(e)-.18 E(possible.)184 120 Q F2 +(login_shell)144 132 Q F1 2.454 +(The shell sets this option if it is started as a login shell \(see)184 +144 R/F3 9/Palatino-Bold@0 SF(INVOCA)4.954 E(TION)-.828 E F1 2.5 +(above\). The)184 156 R(value may not be changed.)2.5 E F2(mailwarn)144 +168 Q F1 .965(If set, and a \214le that)184 180 R F2(bash)3.465 E F1 +.964(is checking for mail has been accessed since the last)3.464 F 1.647 +(time it was checked, the message `)184 192 R 1.647(`The mail in)-.37 F +/F4 10/Palatino-Italic@0 SF(mail\214le)4.147 E F1 1.647(has been r)4.147 F(ead')-.18 E 4.148('i)-.37 G 4.148(sd)-4.148 G(is-)-4.148 E(played.)184 -120 Q F1(no_empty_cmd_completion)144 132 Q F2 .572(If set, and)184 144 R -F1(readline)3.072 E F2 .572(is being used,)3.072 F F1(bash)3.072 E F2 -.572(will not attempt to sear)3.072 F .572(ch the)-.18 F F1 -.74(PA) -3.072 G(TH)-.18 E F2(for)3.072 E +204 Q F2(no_empty_cmd_completion)144 216 Q F1 .572(If set, and)184 228 R +F2(readline)3.072 E F1 .572(is being used,)3.072 F F2(bash)3.072 E F1 +.572(will not attempt to sear)3.072 F .572(ch the)-.18 F F2 -.74(PA) +3.072 G(TH)-.18 E F1(for)3.072 E (possible completions when completion is attempted on an empty line.)184 -156 Q F1(nocaseglob)144 168 Q F2 1.548(If set,)184 180 R F1(bash)4.048 E -F2 1.548 +240 Q F2(nocaseglob)144 252 Q F1 1.548(If set,)184 264 R F2(bash)4.048 E +F1 1.548 (matches \214lenames in a case\255insensitive fashion when performing) -4.048 F(pathname expansion \(see)184 192 Q F1(Pathname Expansion)2.5 E -F2(above\).)2.5 E F1(nullglob)144 204 Q F2 2.34(If set,)184 216 R F1 -(bash)4.84 E F2 2.34(allows patterns which match no \214les \(see)4.84 F -F1 2.34(Pathname Expansion)4.84 F F2 -(above\) to expand to a null string, rather than themselves.)184 228 Q -F1(progcomp)144 240 Q F2 1.198(If set, the pr)184 252 R 1.199 -(ogrammable completion facilities \(see)-.18 F F1 1.199 -(Programmable Completion)3.699 F F2(above\) ar)184 264 Q 2.5(ee)-.18 G -2.5(nabled. This)-2.5 F(option is enabled by default.)2.5 E F1 -(promptvars)144 276 Q F2 2.553(If set, pr)184 288 R 2.553 +4.048 F(pathname expansion \(see)184 276 Q F2(Pathname Expansion)2.5 E +F1(above\).)2.5 E F2(nullglob)144 288 Q F1 2.34(If set,)184 300 R F2 +(bash)4.84 E F1 2.34(allows patterns which match no \214les \(see)4.84 F +F2 2.34(Pathname Expansion)4.84 F F1 +(above\) to expand to a null string, rather than themselves.)184 312 Q +F2(progcomp)144 324 Q F1 1.198(If set, the pr)184 336 R 1.199 +(ogrammable completion facilities \(see)-.18 F F2 1.199 +(Programmable Completion)3.699 F F1(above\) ar)184 348 Q 2.5(ee)-.18 G +2.5(nabled. This)-2.5 F(option is enabled by default.)2.5 E F2 +(promptvars)144 360 Q F1 2.553(If set, pr)184 372 R 2.553 (ompt strings under)-.18 F 2.552 (go parameter expansion, command substitution,)-.18 F 1.007 -(arithmetic expansion, and quote r)184 300 R 1.007 -(emoval after being expanded as described in)-.18 F/F4 9/Palatino-Bold@0 -SF(PROMPTING)184 312 Q F2 2.5(above. This)2.25 F -(option is enabled by default.)2.5 E F1(restricted_shell)144 324 Q F2 -1.743(The shell sets this option if it is started in r)184 336 R 1.742 -(estricted mode \(see)-.18 F F4(RESTRICTED)4.242 E(SHELL)184 348 Q F2 +(arithmetic expansion, and quote r)184 384 R 1.007 +(emoval after being expanded as described in)-.18 F F3(PROMPTING)184 396 +Q F1 2.5(above. This)2.25 F(option is enabled by default.)2.5 E F2 +(restricted_shell)144 408 Q F1 1.743 +(The shell sets this option if it is started in r)184 420 R 1.742 +(estricted mode \(see)-.18 F F3(RESTRICTED)4.242 E(SHELL)184 432 Q F1 4.862(below\). The)4.612 F 2.362(value may not be changed.)4.862 F 2.362 (This is not r)7.362 F 2.362(eset when the)-.18 F .294 -(startup \214les ar)184 360 R 2.794(ee)-.18 G .294 +(startup \214les ar)184 444 R 2.794(ee)-.18 G .294 (xecuted, allowing the startup \214les to discover whether or not a) --2.794 F(shell is r)184 372 Q(estricted.)-.18 E F1(shift_verbose)144 384 -Q F2 .527(If set, the)184 396 R F1(shift)3.028 E F2 .528 +-2.794 F(shell is r)184 456 Q(estricted.)-.18 E F2(shift_verbose)144 468 +Q F1 .527(If set, the)184 480 R F2(shift)3.028 E F1 .528 (builtin prints an err)3.028 F .528 (or message when the shift count exceeds the)-.18 F -(number of positional parameters.)184 408 Q F1(sourcepath)144 420 Q F2 -.515(If set, the)184 432 R F1(source)3.015 E F2(\()3.014 E F1(.)A F2 -3.014(\)b)C .514(uiltin uses the value of)-3.014 F F4 -.666(PA)3.014 G -(TH)-.162 E F2 .514(to \214nd the dir)2.764 F .514(ectory contain-)-.18 -F(ing the \214le supplied as an ar)184 444 Q 2.5(gument. This)-.18 F -(option is enabled by default.)2.5 E F1(xpg_echo)144 456 Q F2 -(If set, the)184 468 Q F1(echo)2.5 E F2 -(builtin expands backslash-escape sequences by default.)2.5 E F1 -(suspend)108 480 Q F2([)2.5 E F1A F2(])A .048 -(Suspend the execution of this shell until it r)144 492 R .048 -(eceives a)-.18 F F4(SIGCONT)2.548 E F2 2.548(signal. The)2.298 F F1 -2.548 E F2 .048(option says)2.548 F .327 -(not to complain if this is a login shell; just suspend anyway)144 504 R +(number of positional parameters.)184 492 Q F2(sourcepath)144 504 Q F1 +.515(If set, the)184 516 R F2(source)3.015 E F1(\()3.014 E F2(.)A F1 +3.014(\)b)C .514(uiltin uses the value of)-3.014 F F3 -.666(PA)3.014 G +(TH)-.162 E F1 .514(to \214nd the dir)2.764 F .514(ectory contain-)-.18 +F(ing the \214le supplied as an ar)184 528 Q 2.5(gument. This)-.18 F +(option is enabled by default.)2.5 E F2(xpg_echo)144 540 Q F1 +(If set, the)184 552 Q F2(echo)2.5 E F1 +(builtin expands backslash-escape sequences by default.)2.5 E F2 +(suspend)108 564 Q F1([)2.5 E F2A F1(])A .048 +(Suspend the execution of this shell until it r)144 576 R .048 +(eceives a)-.18 F F3(SIGCONT)2.548 E F1 2.548(signal. The)2.298 F F2 +2.548 E F1 .048(option says)2.548 F .327 +(not to complain if this is a login shell; just suspend anyway)144 588 R 5.327(.T)-1.11 G .327(he r)-5.327 F .327(eturn status is 0 unless)-.18 F -(the shell is a login shell and)144 516 Q F12.5 E F2 -(is not supplied, or if job contr)2.5 E(ol is not enabled.)-.18 E F1 -(test)108 528 Q F3(expr)2.5 E F1([)108 540 Q F3(expr)2.5 E F1(])2.5 E F2 +(the shell is a login shell and)144 600 Q F22.5 E F1 +(is not supplied, or if job contr)2.5 E(ol is not enabled.)-.18 E F2 +(test)108 612 Q F4(expr)2.5 E F2([)108 624 Q F4(expr)2.5 E F2(])2.5 E F1 .544(Return a status of 0 or 1 depending on the evaluation of the condi\ -tional expr)6.56 F(ession)-.18 E F3(expr)3.044 E F2(.).45 E .789 -(Each operator and operand must be a separate ar)144 552 R 3.288 +tional expr)6.56 F(ession)-.18 E F4(expr)3.044 E F1(.).45 E .789 +(Each operator and operand must be a separate ar)144 636 R 3.288 (gument. Expr)-.18 F .788(essions ar)-.18 F 3.288(ec)-.18 G .788 -(omposed of)-3.288 F(the primaries described above under)144 564 Q F4 -(CONDITIONAL EXPRESSIONS)2.5 E/F5 9/Palatino-Roman@0 SF(.)A F2(Expr)144 -582 Q .054 +(omposed of)-3.288 F(the primaries described above under)144 648 Q F3 +(CONDITIONAL EXPRESSIONS)2.5 E/F5 9/Palatino-Roman@0 SF(.)A F1(Expr)144 +666 Q .054 (essions may be combined using the following operators, listed in decr) --.18 F .055(easing or)-.18 F .055(der of)-.18 F(pr)144 594 Q(ecedence.) --.18 E F1(!)144 606 Q F3(expr)2.5 E F2 -.78 -.9(Tr u)12.94 H 2.5(ei).9 G -(f)-2.5 E F3(expr)2.85 E F2(is false.)2.95 E F1(\()144 618 Q F3(expr)2.5 -E F1(\))2.5 E F2 .847(Returns the value of)6.56 F F3(expr)3.347 E F2 +-.18 F .055(easing or)-.18 F .055(der of)-.18 F(pr)144 678 Q(ecedence.) +-.18 E F2(!)144 690 Q F4(expr)2.5 E F1 -.78 -.9(Tr u)12.94 H 2.5(ei).9 G +(f)-2.5 E F4(expr)2.85 E F1(is false.)2.95 E F2(\()144 702 Q F4(expr)2.5 +E F2(\))2.5 E F1 .847(Returns the value of)6.56 F F4(expr)3.347 E F1 5.847(.T)C .847(his may be used to override the normal pr)-5.847 F -(ecedence)-.18 E(of operators.)180 630 Q F3(expr1)144 642 Q F22.5 E -F1(a)A F3(expr2)2.5 E F2 -.78 -.9(Tr u)180 654 T 2.5(ei).9 G 2.5(fb)-2.5 -G(oth)-2.5 E F3(expr1)2.85 E F2(and)2.5 E F3(expr2)2.85 E F2(ar)2.5 E -2.5(et)-.18 G -.08(ru)-2.5 G(e.).08 E F3(expr1)144 666 Q F22.5 E F1 -(o)A F3(expr2)2.5 E F2 -.78 -.9(Tr u)180 678 T 2.5(ei).9 G 2.5(fe)-2.5 G -(ither)-2.5 E F3(expr1)2.85 E F2(or)2.5 E F3(expr2)2.85 E F2(is tr)2.5 E -(ue.)-.08 E F1(test)144 694.8 Q F2(and)3.576 E F1([)3.576 E F2 1.076 -(evaluate conditional expr)3.576 F 1.076(essions using a set of r)-.18 F -1.076(ules based on the number of)-.08 F(ar)144 706.8 Q(guments.)-.18 E -F0(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(59)197.335 E 0 Cg EP +(ecedence)-.18 E(of operators.)180 714 Q F0(GNU Bash-3.0)72 768 Q +(2004 Sep 17)149.01 E(59)199 E 0 Cg EP %%Page: 60 60 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Palatino-Roman@0 SF 2.5(0a)144 84 S -.18(rg)-2.5 G(uments) -.18 E(The expr)180 96 Q(ession is false.)-.18 E 2.5(1a)144 108 S -.18 -(rg)-2.5 G(ument).18 E(The expr)180 120 Q(ession is tr)-.18 E -(ue if and only if the ar)-.08 E(gument is not null.)-.18 E 2.5(2a)144 -132 S -.18(rg)-2.5 G(uments).18 E .209(If the \214rst ar)180 144 R .208 -(gument is)-.18 F/F2 10/Palatino-Bold@0 SF(!)2.708 E F1 2.708(,t)C .208 -(he expr)-2.708 F .208(ession is tr)-.18 F .208 -(ue if and only if the second ar)-.08 F(gument)-.18 E 2.143(is null.)180 -156 R 2.144(If the \214rst ar)7.143 F 2.144 -(gument is one of the unary conditional operators listed)-.18 F 1.402 -(above under)180 168 R/F3 9/Palatino-Bold@0 SF 1.401 -(CONDITIONAL EXPRESSIONS)3.901 F/F4 9/Palatino-Roman@0 SF(,)A F1 1.401 +-.35 E/F1 10/Palatino-Italic@0 SF(expr1)144 84 Q/F2 10/Palatino-Roman@0 +SF2.5 E/F3 10/Palatino-Bold@0 SF(a)A F1(expr2)2.5 E F2 -.78 -.9 +(Tr u)180 96 T 2.5(ei).9 G 2.5(fb)-2.5 G(oth)-2.5 E F1(expr1)2.85 E F2 +(and)2.5 E F1(expr2)2.85 E F2(ar)2.5 E 2.5(et)-.18 G -.08(ru)-2.5 G(e.) +.08 E F1(expr1)144 108 Q F22.5 E F3(o)A F1(expr2)2.5 E F2 -.78 -.9 +(Tr u)180 120 T 2.5(ei).9 G 2.5(fe)-2.5 G(ither)-2.5 E F1(expr1)2.85 E +F2(or)2.5 E F1(expr2)2.85 E F2(is tr)2.5 E(ue.)-.08 E F3(test)144 136.8 +Q F2(and)3.576 E F3([)3.576 E F2 1.076(evaluate conditional expr)3.576 F +1.076(essions using a set of r)-.18 F 1.076(ules based on the number of) +-.08 F(ar)144 148.8 Q(guments.)-.18 E 2.5(0a)144 166.8 S -.18(rg)-2.5 G +(uments).18 E(The expr)180 178.8 Q(ession is false.)-.18 E 2.5(1a)144 +190.8 S -.18(rg)-2.5 G(ument).18 E(The expr)180 202.8 Q(ession is tr) +-.18 E(ue if and only if the ar)-.08 E(gument is not null.)-.18 E 2.5 +(2a)144 214.8 S -.18(rg)-2.5 G(uments).18 E .209(If the \214rst ar)180 +226.8 R .208(gument is)-.18 F F3(!)2.708 E F2 2.708(,t)C .208(he expr) +-2.708 F .208(ession is tr)-.18 F .208(ue if and only if the second ar) +-.08 F(gument)-.18 E 2.143(is null.)180 238.8 R 2.144(If the \214rst ar) +7.143 F 2.144(gument is one of the unary conditional operators listed) +-.18 F 1.402(above under)180 250.8 R/F4 9/Palatino-Bold@0 SF 1.401 +(CONDITIONAL EXPRESSIONS)3.901 F/F5 9/Palatino-Roman@0 SF(,)A F2 1.401 (the expr)3.651 F 1.401(ession is tr)-.18 F 1.401(ue if the unary)-.08 F -1.355(test is tr)180 180 R 3.855(ue. If)-.08 F 1.356(the \214rst ar) +1.355(test is tr)180 262.8 R 3.855(ue. If)-.08 F 1.356(the \214rst ar) 3.855 F 1.356(gument is not a valid unary conditional operator)-.18 F -3.856(,t)-.74 G(he)-3.856 E(expr)180 192 Q(ession is false.)-.18 E 2.5 -(3a)144 204 S -.18(rg)-2.5 G(uments).18 E 1.5(If the second ar)180 216 R -1.499(gument is one of the binary conditional operators listed above) --.18 F(under)180 228 Q F3 .64(CONDITIONAL EXPRESSIONS)3.14 F F4(,)A F1 -.64(the r)2.89 F .64(esult of the expr)-.18 F .64(ession is the r)-.18 F +3.856(,t)-.74 G(he)-3.856 E(expr)180 274.8 Q(ession is false.)-.18 E 2.5 +(3a)144 286.8 S -.18(rg)-2.5 G(uments).18 E 1.5(If the second ar)180 +298.8 R 1.499 +(gument is one of the binary conditional operators listed above)-.18 F +(under)180 310.8 Q F4 .64(CONDITIONAL EXPRESSIONS)3.14 F F5(,)A F2 .64 +(the r)2.89 F .64(esult of the expr)-.18 F .64(ession is the r)-.18 F .641(esult of)-.18 F .529(the binary test using the \214rst and thir)180 -240 R 3.029(da)-.18 G -.18(rg)-3.029 G .528(uments as operands.).18 F -.528(If the \214rst ar)5.528 F(gu-)-.18 E .106(ment is)180 252 R F2(!) -2.606 E F1 2.606(,t)C .107(he value is the negation of the two-ar)-2.606 -F .107(gument test using the second and)-.18 F(thir)180 264 Q 4.633(da) --.18 G -.18(rg)-4.633 G 4.633(uments. If).18 F 2.133(the \214rst ar) -4.633 F 2.132(gument is exactly)-.18 F F2(\()4.632 E F1 2.132 +322.8 R 3.029(da)-.18 G -.18(rg)-3.029 G .528(uments as operands.).18 F +.528(If the \214rst ar)5.528 F(gu-)-.18 E .106(ment is)180 334.8 R F3(!) +2.606 E F2 2.606(,t)C .107(he value is the negation of the two-ar)-2.606 +F .107(gument test using the second and)-.18 F(thir)180 346.8 Q 4.633 +(da)-.18 G -.18(rg)-4.633 G 4.633(uments. If).18 F 2.133(the \214rst ar) +4.633 F 2.132(gument is exactly)-.18 F F3(\()4.632 E F2 2.132 (and the thir)4.632 F 4.632(da)-.18 G -.18(rg)-4.632 G 2.132(ument is) -.18 F(exactly)180 276 Q F2(\))2.925 E F1 2.925(,t)C .426(he r)-2.925 F +.18 F(exactly)180 358.8 Q F3(\))2.925 E F2 2.925(,t)C .426(he r)-2.925 F .426(esult is the one-ar)-.18 F .426(gument test of the second ar)-.18 F -2.926(gument. Otherwise,)-.18 F .43(the expr)180 288 R .43 -(ession is false.)-.18 F(The)5.43 E F22.93 E F1(and)2.93 E F2 -2.93 E F1 .43(operators ar)2.93 F 2.93(ec)-.18 G(onsider)-2.93 E -.43(ed binary operators)-.18 F(in this case.)180 300 Q 2.5(4a)144 312 S --.18(rg)-2.5 G(uments).18 E .668(If the \214rst ar)180 324 R .668 -(gument is)-.18 F F2(!)3.168 E F1 3.168(,t)C .669(he r)-3.168 F .669 +2.926(gument. Otherwise,)-.18 F .43(the expr)180 370.8 R .43 +(ession is false.)-.18 F(The)5.43 E F32.93 E F2(and)2.93 E F3 +2.93 E F2 .43(operators ar)2.93 F 2.93(ec)-.18 G(onsider)-2.93 E +.43(ed binary operators)-.18 F(in this case.)180 382.8 Q 2.5(4a)144 +394.8 S -.18(rg)-2.5 G(uments).18 E .668(If the \214rst ar)180 406.8 R +.668(gument is)-.18 F F3(!)3.168 E F2 3.168(,t)C .669(he r)-3.168 F .669 (esult is the negation of the thr)-.18 F(ee-ar)-.18 E .669(gument expr) --.18 F(es-)-.18 E .409(sion composed of the r)180 336 R .409 +-.18 F(es-)-.18 E .409(sion composed of the r)180 418.8 R .409 (emaining ar)-.18 F 2.909(guments. Otherwise,)-.18 F .409(the expr)2.909 -F .409(ession is parsed)-.18 F(and evaluated accor)180 348 Q(ding to pr) --.18 E(ecedence using the r)-.18 E(ules listed above.)-.08 E 2.5(5o)144 -360 S 2.5(rm)-2.5 G(or)-2.5 E 2.5(ea)-.18 G -.18(rg)-2.5 G(uments).18 E -.781(The expr)180 372 R .782(ession is parsed and evaluated accor)-.18 F -.782(ding to pr)-.18 F .782(ecedence using the r)-.18 F(ules)-.08 E -(listed above.)180 384 Q F2(times)108 400.8 Q F1 .334 +F .409(ession is parsed)-.18 F(and evaluated accor)180 430.8 Q +(ding to pr)-.18 E(ecedence using the r)-.18 E(ules listed above.)-.08 E +2.5(5o)144 442.8 S 2.5(rm)-2.5 G(or)-2.5 E 2.5(ea)-.18 G -.18(rg)-2.5 G +(uments).18 E .781(The expr)180 454.8 R .782 +(ession is parsed and evaluated accor)-.18 F .782(ding to pr)-.18 F .782 +(ecedence using the r)-.18 F(ules)-.08 E(listed above.)180 466.8 Q F3 +(times)108 483.6 Q F2 .334 (Print the accumulated user and system times for the shell and for pr) 11.01 F .334(ocesses r)-.18 F .334(un fr)-.08 F .334(om the)-.18 F 2.5 -(shell. The)144 412.8 R -.18(re)2.5 G(turn status is 0.).18 E F2(trap) -108 429.6 Q F1([)2.5 E F2(\255lp)A F1 2.5(][)C([)-2.5 E/F5 10 -/Palatino-Italic@0 SF(ar)A(g)-.18 E F1(])A F5(sigspec)2.5 E F1(...])2.5 -E .563(The command)144 441.6 R F5(ar)3.523 E(g)-.18 E F1 .563 -(is to be r)3.543 F .563(ead and executed when the shell r)-.18 F .564 -(eceives signal\(s\))-.18 F F5(sigspec)3.064 E F1 5.564(.I).32 G(f) --5.564 E F5(ar)144.46 453.6 Q(g)-.18 E F1 .153(is absent \(and ther) -3.133 F 2.653(ei)-.18 G 2.653(sas)-2.653 G(ingle)-2.653 E F5(sigspec) -2.653 E F1 2.653(\)o)C(r)-2.653 E F22.653 E F1 2.653(,e)C .153 -(ach speci\214ed signal is r)-2.653 F .152(eset to its original)-.18 F -.069(disposition \(the value it had upon entrance to the shell\).)144 -465.6 R(If)5.069 E F5(ar)3.03 E(g)-.18 E F1 .07 -(is the null string the signal)3.05 F .142(speci\214ed by each)144 477.6 -R F5(sigspec)3.052 E F1 .142(is ignor)2.962 F .142 -(ed by the shell and by the commands it invokes.)-.18 F(If)5.141 E F5 -(ar)3.101 E(g)-.18 E F1(is)3.121 E 1.795(not pr)144 489.6 R 1.795 -(esent and)-.18 F F24.295 E F1 1.796 +(shell. The)144 495.6 R -.18(re)2.5 G(turn status is 0.).18 E F3(trap) +108 512.4 Q F2([)2.5 E F3(\255lp)A F2 2.5(][)C([)-2.5 E F1(ar)A(g)-.18 E +F2(])A F1(sigspec)2.5 E F2(...])2.5 E .563(The command)144 524.4 R F1 +(ar)3.523 E(g)-.18 E F2 .563(is to be r)3.543 F .563 +(ead and executed when the shell r)-.18 F .564(eceives signal\(s\))-.18 +F F1(sigspec)3.064 E F2 5.564(.I).32 G(f)-5.564 E F1(ar)144.46 536.4 Q +(g)-.18 E F2 .153(is absent \(and ther)3.133 F 2.653(ei)-.18 G 2.653 +(sas)-2.653 G(ingle)-2.653 E F1(sigspec)2.653 E F2 2.653(\)o)C(r)-2.653 +E F32.653 E F2 2.653(,e)C .153(ach speci\214ed signal is r)-2.653 F +.152(eset to its original)-.18 F .069 +(disposition \(the value it had upon entrance to the shell\).)144 548.4 +R(If)5.069 E F1(ar)3.03 E(g)-.18 E F2 .07(is the null string the signal) +3.05 F .142(speci\214ed by each)144 560.4 R F1(sigspec)3.052 E F2 .142 +(is ignor)2.962 F .142(ed by the shell and by the commands it invokes.) +-.18 F(If)5.141 E F1(ar)3.101 E(g)-.18 E F2(is)3.121 E 1.795(not pr)144 +572.4 R 1.795(esent and)-.18 F F34.295 E F2 1.796 (has been supplied, then the trap commands associated with each)4.295 F -F5(sigspec)144.41 501.6 Q F1(ar)3.218 E 2.898(ed)-.18 G 2.898 +F1(sigspec)144.41 584.4 Q F2(ar)3.218 E 2.898(ed)-.18 G 2.898 (isplayed. If)-2.898 F .398(no ar)2.898 F .398(guments ar)-.18 F 2.898 -(es)-.18 G .397(upplied or if only)-2.898 F F22.897 E F1 .397 -(is given,)2.897 F F2(trap)2.897 E F1 .397(prints the)2.897 F .035 -(list of commands associated with each signal.)144 513.6 R(The)5.036 E -F22.536 E F1 .036(option causes the shell to print a list)2.536 F -1.095(of signal names and their corr)144 525.6 R 1.095 -(esponding numbers.)-.18 F(Each)6.095 E F5(sigspec)4.005 E F1 1.094 -(is either a signal name)3.914 F .672(de\214ned in <)144 537.6 R F5 -(signal.h)A F1 .673(>, or a signal number)B 5.673(.S)-.74 G .673 +(es)-.18 G .397(upplied or if only)-2.898 F F32.897 E F2 .397 +(is given,)2.897 F F3(trap)2.897 E F2 .397(prints the)2.897 F .035 +(list of commands associated with each signal.)144 596.4 R(The)5.036 E +F32.536 E F2 .036(option causes the shell to print a list)2.536 F +1.095(of signal names and their corr)144 608.4 R 1.095 +(esponding numbers.)-.18 F(Each)6.095 E F1(sigspec)4.005 E F2 1.094 +(is either a signal name)3.914 F .672(de\214ned in <)144 620.4 R F1 +(signal.h)A F2 .673(>, or a signal number)B 5.673(.S)-.74 G .673 (ignal names ar)-5.673 F 3.173(ec)-.18 G .673 -(ase insensitive and the SIG)-3.173 F(pr)144 549.6 Q .977 -(e\214x is optional.)-.18 F .976(If a)5.976 F F5(sigspec)3.886 E F1(is) -3.796 E F3(EXIT)3.476 E F1 .976(\(0\) the command)3.226 F F5(ar)3.936 E -(g)-.18 E F1 .976(is executed on exit fr)3.956 F .976(om the)-.18 F -3.404(shell. If)144 561.6 R(a)3.404 E F5(sigspec)3.814 E F1(is)3.724 E -F3(DEBUG)3.404 E F4(,)A F1 .904(the command)3.154 F F5(ar)3.864 E(g)-.18 -E F1 .905(is executed befor)3.885 F 3.405(ee)-.18 G(very)-3.405 E F5 -.905(simple command)3.405 F F1(,)A F5(for)144 573.6 Q F1(command,)3.016 -E F5(case)3.016 E F1(command,)3.016 E F5(select)3.016 E F1 .515 -(command, every arithmetic)3.016 F F5(for)3.015 E F1 .515 +(ase insensitive and the SIG)-3.173 F(pr)144 632.4 Q .977 +(e\214x is optional.)-.18 F .976(If a)5.976 F F1(sigspec)3.886 E F2(is) +3.796 E F4(EXIT)3.476 E F2 .976(\(0\) the command)3.226 F F1(ar)3.936 E +(g)-.18 E F2 .976(is executed on exit fr)3.956 F .976(om the)-.18 F +3.404(shell. If)144 644.4 R(a)3.404 E F1(sigspec)3.814 E F2(is)3.724 E +F4(DEBUG)3.404 E F5(,)A F2 .904(the command)3.154 F F1(ar)3.864 E(g)-.18 +E F2 .905(is executed befor)3.885 F 3.405(ee)-.18 G(very)-3.405 E F1 +.905(simple command)3.405 F F2(,)A F1(for)144 656.4 Q F2(command,)3.016 +E F1(case)3.016 E F2(command,)3.016 E F1(select)3.016 E F2 .515 +(command, every arithmetic)3.016 F F1(for)3.015 E F2 .515 (command, and befor)3.015 F(e)-.18 E 1.001 -(the \214rst command executes in a shell function \(see)144 585.6 R F3 -1.001(SHELL GRAMMAR)3.501 F F1 3.501(above\). Refer)3.251 F(to)3.501 E -.679(the description of the)144 597.6 R F2(extdebug)3.178 E F1 .678 -(option to the)3.178 F F2(shopt)3.178 E F1 .678 -(builtin for details of its ef)3.178 F .678(fect on the)-.18 F F2(DEBUG) -144 609.6 Q F1 3.153(trap. If)3.153 F(a)3.153 E F5(sigspec)3.563 E F1 -(is)3.473 E F3(ERR)3.153 E F4(,)A F1 .653(the command)2.903 F F5(ar) -3.613 E(g)-.18 E F1 .653(is executed whenever a simple com-)3.633 F .241 -(mand has a non\255zer)144 621.6 R 2.741(oe)-.18 G .24 -(xit status, subject to the following conditions.)-2.741 F(The)5.24 E F3 -(ERR)2.74 E F1 .24(trap is not)2.49 F 1.926(executed if the failed comm\ -and is part of the command list immediately following a)144 633.6 R F2 -(while)144 645.6 Q F1(or)2.552 E F2(until)2.552 E F1(keywor)2.552 E .052 -(d, part of the test in an)-.18 F F5(if)2.712 E F1 .052 -(statement, part of a)4.402 F F2(&&)2.552 E F1(or)2.552 E/F6 10/Symbol -SF2.552 E F1 .051(list, or if the)2.552 F .092(command's r)144 -657.6 R .092(eturn value is being inverted via)-.18 F F2(!)2.592 E F1 -5.092(.T)C .092(hese ar)-5.092 F 2.592(et)-.18 G .092 -(he same conditions obeyed by)-2.592 F(the)144 669.6 Q F2(errexit)2.825 -E F1 2.825(option. If)2.825 F(a)2.825 E F5(sigspec)3.235 E F1(is)3.145 E -F3(RETURN)2.825 E F4(,)A F1 .325(the command)2.575 F F5(ar)3.284 E(g) +(the \214rst command executes in a shell function \(see)144 668.4 R F4 +1.001(SHELL GRAMMAR)3.501 F F2 3.501(above\). Refer)3.251 F(to)3.501 E +.679(the description of the)144 680.4 R F3(extdebug)3.178 E F2 .678 +(option to the)3.178 F F3(shopt)3.178 E F2 .678 +(builtin for details of its ef)3.178 F .678(fect on the)-.18 F F3(DEBUG) +144 692.4 Q F2 3.153(trap. If)3.153 F(a)3.153 E F1(sigspec)3.563 E F2 +(is)3.473 E F4(ERR)3.153 E F5(,)A F2 .653(the command)2.903 F F1(ar) +3.613 E(g)-.18 E F2 .653(is executed whenever a simple com-)3.633 F .241 +(mand has a non\255zer)144 704.4 R 2.741(oe)-.18 G .24 +(xit status, subject to the following conditions.)-2.741 F(The)5.24 E F4 +(ERR)2.74 E F2 .24(trap is not)2.49 F 1.926(executed if the failed comm\ +and is part of the command list immediately following a)144 716.4 R F3 +(while)144 728.4 Q F2(or)2.552 E F3(until)2.552 E F2(keywor)2.552 E .052 +(d, part of the test in an)-.18 F F1(if)2.712 E F2 .052 +(statement, part of a)4.402 F F3(&&)2.552 E F2(or)2.552 E/F6 10/Symbol +SF2.552 E F2 .051(list, or if the)2.552 F F0(GNU Bash-3.0)72 768 Q +(2004 Sep 17)149.01 E(60)199 E 0 Cg EP +%%Page: 61 61 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) +-.35 E/F1 10/Palatino-Roman@0 SF .092(command's r)144 84 R .092 +(eturn value is being inverted via)-.18 F/F2 10/Palatino-Bold@0 SF(!) +2.592 E F1 5.092(.T)C .092(hese ar)-5.092 F 2.592(et)-.18 G .092 +(he same conditions obeyed by)-2.592 F(the)144 96 Q F2(errexit)2.825 E +F1 2.825(option. If)2.825 F(a)2.825 E/F3 10/Palatino-Italic@0 SF +(sigspec)3.235 E F1(is)3.145 E/F4 9/Palatino-Bold@0 SF(RETURN)2.825 E/F5 +9/Palatino-Roman@0 SF(,)A F1 .325(the command)2.575 F F3(ar)3.284 E(g) -.18 E F1 .324(is executed each time a shell)3.304 F 1.95 -(function or a script executed with the)144 681.6 R F2(.)4.451 E F1(or) +(function or a script executed with the)144 108 R F2(.)4.451 E F1(or) 4.451 E F2(source)4.451 E F1 1.951(builtins \214nishes executing.)4.451 -F(Signals)6.951 E(ignor)144 693.6 Q .847 +F(Signals)6.951 E(ignor)144 120 Q .847 (ed upon entry to the shell cannot be trapped or r)-.18 F 3.346(eset. T) -.18 F .846(rapped signals ar)-.9 F 3.346(er)-.18 G .846(eset to)-3.526 -F .298(their original values in a child pr)144 705.6 R .299 +F .298(their original values in a child pr)144 132 R .299 (ocess when it is cr)-.18 F 2.799(eated. The)-.18 F -.18(re)2.799 G .299 -(turn status is false if any).18 F F5(sigspec)144.41 717.6 Q F1 +(turn status is false if any).18 F F3(sigspec)144.41 144 Q F1 (is invalid; otherwise)2.82 E F2(trap)2.5 E F1 -.18(re)2.5 G(turns tr) -.18 E(ue.)-.08 E F0(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(60) -197.335 E 0 Cg EP -%%Page: 61 61 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Palatino-Bold@0 SF(type)108 84 Q/F2 10/Palatino-Roman@0 SF -([)2.5 E F1(\255aftpP)A F2(])A/F3 10/Palatino-Italic@0 SF(name)2.5 E F2 -([)2.5 E F3(name)A F2(...])2.5 E -.55(Wi)144 96 S 1.476 -(th no options, indicate how each).55 F F3(name)4.236 E F2 1.476 +.18 E(ue.)-.08 E F2(type)108 160.8 Q F1([)2.5 E F2(\255aftpP)A F1(])A F3 +(name)2.5 E F1([)2.5 E F3(name)A F1(...])2.5 E -.55(Wi)144 172.8 S 1.476 +(th no options, indicate how each).55 F F3(name)4.236 E F1 1.476 (would be interpr)4.326 F 1.475(eted if used as a command)-.18 F 2.725 -(name. If)144 108 R(the)2.725 E F12.725 E F2 .225(option is used,) -2.725 F F1(type)2.725 E F2 .225(prints a string which is one of)2.725 F -F3(alias)2.726 E F2(,).06 E F3(keyword)2.726 E F2(,).33 E F3(function) -2.726 E F2(,).08 E F3(builtin)144 120 Q F2 2.556(,o).08 G(r)-2.556 E F3 -(\214le)4.676 E F2(if)2.906 E F3(name)2.816 E F2 .056 -(is an alias, shell r)2.906 F .056(eserved wor)-.18 F .055 -(d, function, builtin, or disk \214le, r)-.18 F(espec-)-.18 E(tively)144 -132 Q 6.634(.I)-1.11 G 4.134(ft)-6.634 G(he)-4.134 E F3(name)4.394 E F2 -1.635 +(name. If)144 184.8 R(the)2.725 E F22.725 E F1 .225 +(option is used,)2.725 F F2(type)2.725 E F1 .225 +(prints a string which is one of)2.725 F F3(alias)2.726 E F1(,).06 E F3 +(keyword)2.726 E F1(,).33 E F3(function)2.726 E F1(,).08 E F3(builtin) +144 196.8 Q F1 2.556(,o).08 G(r)-2.556 E F3(\214le)4.676 E F1(if)2.906 E +F3(name)2.816 E F1 .056(is an alias, shell r)2.906 F .056(eserved wor) +-.18 F .055(d, function, builtin, or disk \214le, r)-.18 F(espec-)-.18 E +(tively)144 208.8 Q 6.634(.I)-1.11 G 4.134(ft)-6.634 G(he)-4.134 E F3 +(name)4.394 E F1 1.635 (is not found, then nothing is printed, and an exit status of false is) -4.484 F -.18(re)144 144 S 2.523(turned. If).18 F(the)2.523 E F1 -2.523 E F2 .023(option is used,)2.523 F F1(type)2.523 E F2 .023 +4.484 F -.18(re)144 220.8 S 2.523(turned. If).18 F(the)2.523 E F2 +2.523 E F1 .023(option is used,)2.523 F F2(type)2.523 E F1 .023 (either r)2.523 F .023(eturns the name of the disk \214le that would) --.18 F 1.086(be executed if)144 156 R F3(name)3.846 E F2(wer)3.936 E +-.18 F 1.086(be executed if)144 232.8 R F3(name)3.846 E F1(wer)3.936 E 3.586(es)-.18 G 1.086(peci\214ed as a command name, or nothing if)-3.586 -F/F4 10/Courier@0 SF 1.086(type -t name)3.586 F F2 .016(would not r)144 -168 R(eturn)-.18 E F3(\214le)2.516 E F2 5.016(.T).35 G(he)-5.016 E F1 -2.516 E F2 .016(option for)2.516 F .016(ces a)-.18 F/F5 9 -/Palatino-Bold@0 SF -.666(PA)2.515 G(TH)-.162 E F2(sear)2.265 E .015 -(ch for each)-.18 F F3(name)2.515 E F2 2.515(,e)C .015(ven if)-2.515 F -F4 .015(type -t)2.515 F(name)144 180 Q F2 .645(would not r)3.145 F -(eturn)-.18 E F3(\214le)3.145 E F2 5.645(.I).35 G 3.145(fac)-5.645 G -.645(ommand is hashed,)-3.145 F F13.145 E F2(and)3.145 E F1 -3.145 E F2 .645(print the hashed value,)3.145 F .411 -(not necessarily the \214le that appears \214rst in)144 192 R F5 -.666 -(PA)2.911 G(TH)-.162 E/F6 9/Palatino-Roman@0 SF(.)A F2 .411(If the)4.911 -F F12.911 E F2 .411(option is used,)2.911 F F1(type)2.91 E F2 .41 -(prints all)2.91 F .164(of the places that contain an executable named) -144 204 R F3(name)2.664 E F2 5.164(.T).35 G .164 -(his includes aliases and functions,)-5.164 F .73(if and only if the)144 -216 R F13.23 E F2 .73(option is not also used.)3.23 F .73 +F/F6 10/Courier@0 SF 1.086(type -t name)3.586 F F1 .016(would not r)144 +244.8 R(eturn)-.18 E F3(\214le)2.516 E F1 5.016(.T).35 G(he)-5.016 E F2 +2.516 E F1 .016(option for)2.516 F .016(ces a)-.18 F F4 -.666(PA) +2.515 G(TH)-.162 E F1(sear)2.265 E .015(ch for each)-.18 F F3(name)2.515 +E F1 2.515(,e)C .015(ven if)-2.515 F F6 .015(type -t)2.515 F(name)144 +256.8 Q F1 .645(would not r)3.145 F(eturn)-.18 E F3(\214le)3.145 E F1 +5.645(.I).35 G 3.145(fac)-5.645 G .645(ommand is hashed,)-3.145 F F2 +3.145 E F1(and)3.145 E F23.145 E F1 .645 +(print the hashed value,)3.145 F .411 +(not necessarily the \214le that appears \214rst in)144 268.8 R F4 -.666 +(PA)2.911 G(TH)-.162 E F5(.)A F1 .411(If the)4.911 F F22.911 E F1 +.411(option is used,)2.911 F F2(type)2.91 E F1 .41(prints all)2.91 F +.164(of the places that contain an executable named)144 280.8 R F3(name) +2.664 E F1 5.164(.T).35 G .164(his includes aliases and functions,) +-5.164 F .73(if and only if the)144 292.8 R F23.23 E F1 .73 +(option is not also used.)3.23 F .73 (The table of hashed commands is not con-)5.73 F .497(sulted when using) -144 228 R F12.998 E F2 5.498(.T)C(he)-5.498 E F12.998 E F2 +144 304.8 R F22.998 E F1 5.498(.T)C(he)-5.498 E F22.998 E F1 .498(option suppr)2.998 F .498(esses shell function lookup, as with the) --.18 F F1(com-)2.998 E(mand)144 240 Q F2(builtin.)4.558 E F1(type)7.058 -E F2 -.18(re)4.558 G 2.058(turns tr).18 F 2.057(ue if any of the ar)-.08 -F 2.057(guments ar)-.18 F 4.557(ef)-.18 G 2.057(ound, false if none ar) --4.557 F(e)-.18 E(found.)144 252 Q F1(ulimit)108 268.8 Q F2([)2.5 E F1 -(\255SHacd\215mnpstuv)A F2([)2.5 E F3(limit)A F2(]])A(Pr)144 280.8 Q -.061(ovides contr)-.18 F .061(ol over the r)-.18 F(esour)-.18 E .061 +-.18 F F2(com-)2.998 E(mand)144 316.8 Q F1(builtin.)4.558 E F2(type) +7.058 E F1 -.18(re)4.558 G 2.058(turns tr).18 F 2.057 +(ue if any of the ar)-.08 F 2.057(guments ar)-.18 F 4.557(ef)-.18 G +2.057(ound, false if none ar)-4.557 F(e)-.18 E(found.)144 328.8 Q F2 +(ulimit)108 345.6 Q F1([)2.5 E F2(\255SHacd\215mnpstuv)A F1([)2.5 E F3 +(limit)A F1(]])A(Pr)144 357.6 Q .061(ovides contr)-.18 F .061 +(ol over the r)-.18 F(esour)-.18 E .061 (ces available to the shell and to pr)-.18 F .062 (ocesses started by it, on)-.18 F 1.497(systems that allow such contr) -144 292.8 R 3.997(ol. The)-.18 F F13.997 E F2(and)3.997 E F1 -3.997 E F2 1.496(options specify that the har)3.997 F 3.996(do)-.18 G +144 369.6 R 3.997(ol. The)-.18 F F23.997 E F1(and)3.997 E F2 +3.997 E F1 1.496(options specify that the har)3.997 F 3.996(do)-.18 G 3.996(rs)-3.996 G(oft)-3.996 E .884(limit is set for the given r)144 -304.8 R(esour)-.18 E 3.384(ce. A)-.18 F(har)3.384 E 3.384(dl)-.18 G .884 +381.6 R(esour)-.18 E 3.384(ce. A)-.18 F(har)3.384 E 3.384(dl)-.18 G .884 (imit cannot be incr)-3.384 F .884(eased once it is set; a soft)-.18 F -.089(limit may be incr)144 316.8 R .088 +.089(limit may be incr)144 393.6 R .088 (eased up to the value of the har)-.18 F 2.588(dl)-.18 G 2.588(imit. If) --2.588 F(neither)2.588 E F12.588 E F2(nor)2.588 E F12.588 E -F2 .088(is speci\214ed,)2.588 F .162(both the soft and har)144 328.8 R +-2.588 F(neither)2.588 E F22.588 E F1(nor)2.588 E F22.588 E +F1 .088(is speci\214ed,)2.588 F .162(both the soft and har)144 405.6 R 2.662(dl)-.18 G .162(imits ar)-2.662 F 2.662(es)-.18 G 2.663(et. The) --2.662 F .163(value of)2.663 F F3(limit)2.803 E F2 .163 +-2.662 F .163(value of)2.663 F F3(limit)2.803 E F1 .163 (can be a number in the unit speci-)2.933 F .176(\214ed for the r)144 -340.8 R(esour)-.18 E .176(ce or one of the special values)-.18 F F1 -(hard)2.676 E F2(,)A F1(soft)2.675 E F2 2.675(,o)C(r)-2.675 E F1 -(unlimited)2.675 E F2 2.675(,w)C .175(hich stand for)-2.675 F .242 -(the curr)144 352.8 R .242(ent har)-.18 F 2.742(dl)-.18 G .242 +417.6 R(esour)-.18 E .176(ce or one of the special values)-.18 F F2 +(hard)2.676 E F1(,)A F2(soft)2.675 E F1 2.675(,o)C(r)-2.675 E F2 +(unlimited)2.675 E F1 2.675(,w)C .175(hich stand for)-2.675 F .242 +(the curr)144 429.6 R .242(ent har)-.18 F 2.742(dl)-.18 G .242 (imit, the curr)-2.742 F .243(ent soft limit, and no limit, r)-.18 F -(espectively)-.18 E 5.243(.I)-1.11 G(f)-5.243 E F3(limit)2.883 E F2 .243 -(is omitted,)3.013 F .082(the curr)144 364.8 R .081 +(espectively)-.18 E 5.243(.I)-1.11 G(f)-5.243 E F3(limit)2.883 E F1 .243 +(is omitted,)3.013 F .082(the curr)144 441.6 R .081 (ent value of the soft limit of the r)-.18 F(esour)-.18 E .081 -(ce is printed, unless the)-.18 F F12.581 E F2 .081 -(option is given.)2.581 F .329(When mor)144 376.8 R 2.829(et)-.18 G .329 +(ce is printed, unless the)-.18 F F22.581 E F1 .081 +(option is given.)2.581 F .329(When mor)144 453.6 R 2.829(et)-.18 G .329 (han one r)-2.829 F(esour)-.18 E .329 (ce is speci\214ed, the limit name and unit ar)-.18 F 2.83(ep)-.18 G .33 (rinted befor)-2.83 F 2.83(et)-.18 G(he)-2.83 E 2.5(value. Other)144 -388.8 R(options ar)2.5 E 2.5(ei)-.18 G(nterpr)-2.5 E(eted as follows:) --.18 E F1144 400.8 Q F2(All curr)24.94 E(ent limits ar)-.18 E 2.5 -(er)-.18 G(eported)-2.68 E F1144 412.8 Q F2 +465.6 R(options ar)2.5 E 2.5(ei)-.18 G(nterpr)-2.5 E(eted as follows:) +-.18 E F2144 477.6 Q F1(All curr)24.94 E(ent limits ar)-.18 E 2.5 +(er)-.18 G(eported)-2.68 E F2144 489.6 Q F1 (The maximum size of cor)25.5 E 2.5<658c>-.18 G(les cr)-2.5 E(eated)-.18 -E F1144 424.8 Q F2(The maximum size of a pr)23.83 E -(ocess's data segment)-.18 E F1144 436.8 Q F2 -(The maximum size of \214les cr)26.05 E(eated by the shell)-.18 E F1 -144 448.8 Q F2(The maximum size that may be locked into memory) -26.61 E F1144 460.8 Q F2(The maximum r)21.05 E(esident set size) --.18 E F1144 472.8 Q F2 .958(The maximum number of open \214le de\ +E F2144 501.6 Q F1(The maximum size of a pr)23.83 E +(ocess's data segment)-.18 E F2144 513.6 Q F1 +(The maximum size of \214les cr)26.05 E(eated by the shell)-.18 E F2 +144 525.6 Q F1(The maximum size that may be locked into memory) +26.61 E F2144 537.6 Q F1(The maximum r)21.05 E(esident set size) +-.18 E F2144 549.6 Q F1 .958(The maximum number of open \214le de\ scriptors \(most systems do not allow this)23.83 F(value to be set\))180 -484.8 Q F1144 496.8 Q F2 -(The pipe size in 512-byte blocks \(this may not be set\))23.83 E F1 -144 508.8 Q F2(The maximum stack size)25.5 E F1144 520.8 Q -F2(The maximum amount of cpu time in seconds)26.61 E F1144 532.8 Q -F2(The maximum number of pr)23.83 E(ocesses available to a single user) --.18 E F1144 544.8 Q F2 +561.6 Q F2144 573.6 Q F1 +(The pipe size in 512-byte blocks \(this may not be set\))23.83 E F2 +144 585.6 Q F1(The maximum stack size)25.5 E F2144 597.6 Q +F1(The maximum amount of cpu time in seconds)26.61 E F2144 609.6 Q +F1(The maximum number of pr)23.83 E(ocesses available to a single user) +-.18 E F2144 621.6 Q F1 (The maximum amount of virtual memory available to the shell)24.38 E(If) -144 561.6 Q F3(limit)4.15 E F2 1.51 +144 638.4 Q F3(limit)4.15 E F1 1.51 (is given, it is the new value of the speci\214ed r)4.28 F(esour)-.18 E -1.511(ce \(the)-.18 F F14.011 E F2 1.511(option is display)4.011 F -4.315(only\). If)144 573.6 R 1.815(no option is given, then)4.315 F F1 -4.315 E F2 1.815(is assumed.)4.315 F -.92(Va)6.815 G 1.815 +1.511(ce \(the)-.18 F F24.011 E F1 1.511(option is display)4.011 F +4.315(only\). If)144 650.4 R 1.815(no option is given, then)4.315 F F2 +4.315 E F1 1.815(is assumed.)4.315 F -.92(Va)6.815 G 1.815 (lues ar).92 F 4.315(ei)-.18 G 4.315(n1)-4.315 G 1.815(024-byte incr) --4.315 F(ements,)-.18 E .972(except for)144 585.6 R F13.473 E F2 -3.473(,w)C .973(hich is in seconds,)-3.473 F F13.473 E F2 3.473 -(,w)C .973(hich is in units of 512-byte blocks, and)-3.473 F F1 -3.473 E F2(and)3.473 E F1144 597.6 Q F2 3.518(,w)C 1.018(hich ar) +-4.315 F(ements,)-.18 E .972(except for)144 662.4 R F23.473 E F1 +3.473(,w)C .973(hich is in seconds,)-3.473 F F23.473 E F1 3.473 +(,w)C .973(hich is in units of 512-byte blocks, and)-3.473 F F2 +3.473 E F1(and)3.473 E F2144 674.4 Q F1 3.518(,w)C 1.018(hich ar) -3.518 F 3.518(eu)-.18 G 1.018(nscaled values.)-3.518 F 1.017(The r) 6.018 F 1.017(eturn status is 0 unless an invalid option or ar)-.18 F -(gu-)-.18 E(ment is supplied, or an err)144 609.6 Q -(or occurs while setting a new limit.)-.18 E F1(umask)108 626.4 Q F2([) -2.5 E F1A F2 2.5(][)C F1-2.5 E F2 2.5(][)C F3(mode)-2.5 E F2 -(])A .535(The user \214le-cr)144 638.4 R .535(eation mask is set to)-.18 -F F3(mode)3.035 E F2 5.535(.I).35 G(f)-5.535 E F3(mode)3.295 E F2 .536 +(gu-)-.18 E(ment is supplied, or an err)144 686.4 Q +(or occurs while setting a new limit.)-.18 E F2(umask)108 703.2 Q F1([) +2.5 E F2A F1 2.5(][)C F2-2.5 E F1 2.5(][)C F3(mode)-2.5 E F1 +(])A .535(The user \214le-cr)144 715.2 R .535(eation mask is set to)-.18 +F F3(mode)3.035 E F1 5.535(.I).35 G(f)-5.535 E F3(mode)3.295 E F1 .536 (begins with a digit, it is interpr)3.385 F .536(eted as)-.18 F 1.827 -(an octal number; otherwise it is interpr)144 650.4 R 1.826 -(eted as a symbolic mode mask similar to that)-.18 F .95(accepted by)144 -662.4 R F3(chmod)3.45 E F2 3.45(\(1\). If).33 F F3(mode)3.71 E F2 .951 -(is omitted, the curr)3.8 F .951(ent value of the mask is printed.)-.18 -F(The)5.951 E F1144 674.4 Q F2 .607(option causes the mask to be \ -printed in symbolic form; the default output is an octal)3.107 F(number) -144 686.4 Q 6.02(.I)-.74 G 3.52(ft)-6.02 G(he)-3.52 E F13.52 E F2 -1.02(option is supplied, and)3.52 F F3(mode)3.78 E F2 1.02 -(is omitted, the output is in a form that)3.87 F .237(may be r)144 698.4 -R .237(eused as input.)-.18 F .237(The r)5.237 F .236 -(eturn status is 0 if the mode was successfully changed or if)-.18 F(no) -144 710.4 Q F3(mode)2.5 E F2(ar)2.5 E -(gument was supplied, and false otherwise.)-.18 E F0(GNU Bash-3.0)72 768 -Q(2004 June 26)147.345 E(61)197.335 E 0 Cg EP +(an octal number; otherwise it is interpr)144 727.2 R 1.826 +(eted as a symbolic mode mask similar to that)-.18 F F0(GNU Bash-3.0)72 +768 Q(2004 Sep 17)149.01 E(61)199 E 0 Cg EP %%Page: 62 62 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Palatino-Bold@0 SF(unalias)108 84 Q/F2 10/Palatino-Roman@0 -SF<5bad>2.5 E F1(a)A F2 2.5(][)C/F3 10/Palatino-Italic@0 SF(name)-2.5 E -F2(...])2.5 E .718(Remove each)144 96 R F3(name)3.218 E F2(fr)3.218 E -.719(om the list of de\214ned aliases.)-.18 F(If)5.719 E F13.219 E -F2 .719(is supplied, all alias de\214nitions)3.219 F(ar)144 108 Q 2.5 -(er)-.18 G 2.5(emoved. The)-2.68 F -.18(re)2.5 G(turn value is tr).18 E -(ue unless a supplied)-.08 E F3(name)2.76 E F2 -(is not a de\214ned alias.)2.85 E F1(unset)108 124.8 Q F2<5bad>2.5 E F1 -(fv)A F2 2.5(][)C F3(name)-2.5 E F2(...])2.5 E 1.61(For each)144 136.8 R -F3(name)4.11 E F2 4.11(,r).35 G 1.61(emove the corr)-4.29 F 1.61 +-.35 E/F1 10/Palatino-Roman@0 SF .95(accepted by)144 84 R/F2 10 +/Palatino-Italic@0 SF(chmod)3.45 E F1 3.45(\(1\). If).33 F F2(mode)3.71 +E F1 .951(is omitted, the curr)3.8 F .951 +(ent value of the mask is printed.)-.18 F(The)5.951 E/F3 10 +/Palatino-Bold@0 SF144 96 Q F1 .607(option causes the mask to be \ +printed in symbolic form; the default output is an octal)3.107 F(number) +144 108 Q 6.02(.I)-.74 G 3.52(ft)-6.02 G(he)-3.52 E F33.52 E F1 +1.02(option is supplied, and)3.52 F F2(mode)3.78 E F1 1.02 +(is omitted, the output is in a form that)3.87 F .237(may be r)144 120 R +.237(eused as input.)-.18 F .237(The r)5.237 F .236 +(eturn status is 0 if the mode was successfully changed or if)-.18 F(no) +144 132 Q F2(mode)2.5 E F1(ar)2.5 E +(gument was supplied, and false otherwise.)-.18 E F3(unalias)108 148.8 Q +F1<5bad>2.5 E F3(a)A F1 2.5(][)C F2(name)-2.5 E F1(...])2.5 E .718 +(Remove each)144 160.8 R F2(name)3.218 E F1(fr)3.218 E .719 +(om the list of de\214ned aliases.)-.18 F(If)5.719 E F33.219 E F1 +.719(is supplied, all alias de\214nitions)3.219 F(ar)144 172.8 Q 2.5(er) +-.18 G 2.5(emoved. The)-2.68 F -.18(re)2.5 G(turn value is tr).18 E +(ue unless a supplied)-.08 E F2(name)2.76 E F1 +(is not a de\214ned alias.)2.85 E F3(unset)108 189.6 Q F1<5bad>2.5 E F3 +(fv)A F1 2.5(][)C F2(name)-2.5 E F1(...])2.5 E 1.61(For each)144 201.6 R +F2(name)4.11 E F1 4.11(,r).35 G 1.61(emove the corr)-4.29 F 1.61 (esponding variable or function.)-.18 F 1.61(If no options ar)6.61 F -4.11(es)-.18 G(up-)-4.11 E .473(plied, or the)144 148.8 R F12.973 -E F2 .473(option is given, each)2.973 F F3(name)3.233 E F2 -.18(re)3.323 +4.11(es)-.18 G(up-)-4.11 E .473(plied, or the)144 213.6 R F32.973 +E F1 .473(option is given, each)2.973 F F2(name)3.233 E F1 -.18(re)3.323 G .474(fers to a shell variable.).18 F .474(Read-only variables)5.474 F -.48(may not be unset.)144 160.8 R(If)5.48 E F12.98 E F2 .48 -(is specifed, each)2.98 F F3(name)3.24 E F2 -.18(re)3.33 G .48 +.48(may not be unset.)144 225.6 R(If)5.48 E F32.98 E F1 .48 +(is specifed, each)2.98 F F2(name)3.24 E F1 -.18(re)3.33 G .48 (fers to a shell function, and the function).18 F .405 -(de\214nition is r)144 172.8 R 2.905(emoved. Each)-.18 F .405 +(de\214nition is r)144 237.6 R 2.905(emoved. Each)-.18 F .405 (unset variable or function is r)2.905 F .405(emoved fr)-.18 F .405 (om the envir)-.18 F(onment)-.18 E 1.475(passed to subsequent commands.) -144 184.8 R 1.475(If any of)6.475 F/F4 9/Palatino-Bold@0 SF(RANDOM)3.975 +144 249.6 R 1.475(If any of)6.475 F/F4 9/Palatino-Bold@0 SF(RANDOM)3.975 E/F5 9/Palatino-Roman@0 SF(,)A F4(SECONDS)3.725 E F5(,)A F4(LINENO)3.724 -E F5(,)A F4(HISTCMD)3.724 E F5(,)A F4(FUNCNAME)144 196.8 Q F5(,)A F4 -(GROUPS)2.803 E F5(,)A F2(or)2.803 E F4(DIRST)3.053 E(ACK)-.828 E F2(ar) +E F5(,)A F4(HISTCMD)3.724 E F5(,)A F4(FUNCNAME)144 261.6 Q F5(,)A F4 +(GROUPS)2.803 E F5(,)A F1(or)2.803 E F4(DIRST)3.053 E(ACK)-.828 E F1(ar) 2.803 E 3.053(eu)-.18 G .553(nset, they lose their special pr)-3.053 F -.553(operties, even if)-.18 F(they ar)144 208.8 Q 2.5(es)-.18 G +.553(operties, even if)-.18 F(they ar)144 273.6 Q 2.5(es)-.18 G (ubsequently r)-2.5 E 2.5(eset. The)-.18 F(exit status is tr)2.5 E -(ue unless a)-.08 E F3(name)2.76 E F2(is r)2.85 E(eadonly)-.18 E(.)-1.11 -E F1(wait)108 225.6 Q F2([)2.5 E F3(n)A F2(])A -.92(Wa)144 237.6 S .299 +(ue unless a)-.08 E F2(name)2.76 E F1(is r)2.85 E(eadonly)-.18 E(.)-1.11 +E F3(wait)108 290.4 Q F1([)2.5 E F2(n)A F1(])A -.92(Wa)144 302.4 S .299 (it for the speci\214ed pr).92 F .298(ocess and r)-.18 F .298 -(eturn its termination status.)-.18 F F3(n)5.558 E F2 .298(may be a pr) -2.878 F .298(ocess ID or)-.18 F 2.798(aj)144 249.6 S .298 +(eturn its termination status.)-.18 F F2(n)5.558 E F1 .298(may be a pr) +2.878 F .298(ocess ID or)-.18 F 2.798(aj)144 314.4 S .298 (ob speci\214cation; if a job spec is given, all pr)-2.798 F .298 (ocesses in that job's pipeline ar)-.18 F 2.799(ew)-.18 G .299 -(aited for)-2.799 F(.)-.74 E(If)144 261.6 Q F3(n)2.78 E F2 .02 +(aited for)-2.799 F(.)-.74 E(If)144 326.4 Q F2(n)2.78 E F1 .02 (is not given, all curr)2.6 F .02(ently active child pr)-.18 F .02 (ocesses ar)-.18 F 2.52(ew)-.18 G .02(aited for)-2.52 F 2.52(,a)-.74 G -.02(nd the r)-2.52 F .02(eturn status is)-.18 F(zer)144 273.6 Q 3.137 -(o. If)-.18 F F3(n)3.397 E F2 .637(speci\214es a non-existent pr)3.217 F +.02(nd the r)-2.52 F .02(eturn status is)-.18 F(zer)144 338.4 Q 3.137 +(o. If)-.18 F F2(n)3.397 E F1 .637(speci\214es a non-existent pr)3.217 F .637(ocess or job, the r)-.18 F .638(eturn status is 127.)-.18 F .638 -(Otherwise, the)5.638 F -.18(re)144 285.6 S +(Otherwise, the)5.638 F -.18(re)144 350.4 S (turn status is the exit status of the last pr).18 E (ocess or job waited for)-.18 E(.)-.74 E/F6 10.95/Palatino-Bold@0 SF -(RESTRICTED SHELL)72 302.4 Q F2(If)108 314.4 Q F1(bash)4.639 E F2 2.139 -(is started with the name)4.639 F F1(rbash)4.638 E F2 4.638(,o)C 4.638 -(rt)-4.638 G(he)-4.638 E F14.638 E F2 2.138 +(RESTRICTED SHELL)72 367.2 Q F1(If)108 379.2 Q F3(bash)4.639 E F1 2.139 +(is started with the name)4.639 F F3(rbash)4.638 E F1 4.638(,o)C 4.638 +(rt)-4.638 G(he)-4.638 E F34.638 E F1 2.138 (option is supplied at invocation, the shell)4.638 F .618(becomes r)108 -326.4 R 3.118(estricted. A)-.18 F -.18(re)3.118 G .618 +391.2 R 3.118(estricted. A)-.18 F -.18(re)3.118 G .618 (stricted shell is used to set up an envir).18 F .618(onment mor)-.18 F 3.118(ec)-.18 G(ontr)-3.118 E .618(olled than the)-.18 F(standar)108 -338.4 Q 4.198(ds)-.18 G 4.198(hell. It)-4.198 F 1.697 -(behaves identically to)4.197 F F1(bash)4.197 E F2 1.697 +403.2 Q 4.198(ds)-.18 G 4.198(hell. It)-4.198 F 1.697 +(behaves identically to)4.197 F F3(bash)4.197 E F1 1.697 (with the exception that the following ar)4.197 F 4.197(ed)-.18 G(isal-) --4.197 E(lowed or not performed:)108 350.4 Q 29.94<8363>108 367.2 S -(hanging dir)-29.94 E(ectories with)-.18 E F1(cd)2.5 E F2 29.94<8373>108 -384 S(etting or unsetting the values of)-29.94 E F1(SHELL)2.5 E F2(,)A -F1 -.74(PA)2.5 G(TH)-.18 E F2(,)A F1(ENV)2.5 E F2 2.5(,o)C(r)-2.5 E F1 -(BASH_ENV)2.5 E F2 29.94<8373>108 400.8 S -(pecifying command names containing)-29.94 E F1(/)2.5 E F2 29.94<8373> -108 417.6 S(pecifying a \214le name containing a)-29.94 E F1(/)2.5 E F2 -(as an ar)2.5 E(gument to the)-.18 E F1(.)2.5 E F2(builtin command)5 E -29.94<8353>108 434.4 S 1.564 +-4.197 E(lowed or not performed:)108 415.2 Q 29.94<8363>108 432 S +(hanging dir)-29.94 E(ectories with)-.18 E F3(cd)2.5 E F1 29.94<8373>108 +448.8 S(etting or unsetting the values of)-29.94 E F3(SHELL)2.5 E F1(,)A +F3 -.74(PA)2.5 G(TH)-.18 E F1(,)A F3(ENV)2.5 E F1 2.5(,o)C(r)-2.5 E F3 +(BASH_ENV)2.5 E F1 29.94<8373>108 465.6 S +(pecifying command names containing)-29.94 E F3(/)2.5 E F1 29.94<8373> +108 482.4 S(pecifying a \214le name containing a)-29.94 E F3(/)2.5 E F1 +(as an ar)2.5 E(gument to the)-.18 E F3(.)2.5 E F1(builtin command)5 E +29.94<8353>108 499.2 S 1.564 (pecifying a \214lename containing a slash as an ar)-29.94 F 1.565 -(gument to the)-.18 F F14.065 E F2 1.565(option to the)4.065 F F1 -(hash)4.065 E F2(builtin command)144 446.4 Q 29.94<8369>108 463.2 S +(gument to the)-.18 F F34.065 E F1 1.565(option to the)4.065 F F3 +(hash)4.065 E F1(builtin command)144 511.2 Q 29.94<8369>108 528 S (mporting function de\214nitions fr)-29.94 E(om the shell envir)-.18 E -(onment at startup)-.18 E 29.94<8370>108 480 S(arsing the value of) --29.94 E F1(SHELLOPTS)2.5 E F2(fr)2.5 E(om the shell envir)-.18 E -(onment at startup)-.18 E 29.94<8372>108 496.8 S(edir)-30.12 E +(onment at startup)-.18 E 29.94<8370>108 544.8 S(arsing the value of) +-29.94 E F3(SHELLOPTS)2.5 E F1(fr)2.5 E(om the shell envir)-.18 E +(onment at startup)-.18 E 29.94<8372>108 561.6 S(edir)-30.12 E (ecting output using the >, >|, <>, >&, &>, and >> r)-.18 E(edir)-.18 E -(ection operators)-.18 E 29.94<8375>108 513.6 S(sing the)-29.94 E F1 -(exec)2.5 E F2(builtin command to r)2.5 E -(eplace the shell with another command)-.18 E 29.94<8361>108 530.4 S -1.208(dding or deleting builtin commands with the)-29.94 F F13.708 -E F2(and)3.708 E F13.708 E F2 1.208(options to the)3.708 F F1 -(enable)3.707 E F2(builtin)3.707 E(command)144 542.4 Q 29.94<8355>108 -559.2 S(sing the)-29.94 E F1(enable)2.5 E F2 +(ection operators)-.18 E 29.94<8375>108 578.4 S(sing the)-29.94 E F3 +(exec)2.5 E F1(builtin command to r)2.5 E +(eplace the shell with another command)-.18 E 29.94<8361>108 595.2 S +1.208(dding or deleting builtin commands with the)-29.94 F F33.708 +E F1(and)3.708 E F33.708 E F1 1.208(options to the)3.708 F F3 +(enable)3.707 E F1(builtin)3.707 E(command)144 607.2 Q 29.94<8355>108 +624 S(sing the)-29.94 E F3(enable)2.5 E F1 (builtin command to enable disabled shell builtins)2.5 E 29.94<8373>108 -576 S(pecifying the)-29.94 E F12.5 E F2(option to the)2.5 E F1 -(command)2.5 E F2(builtin command)2.5 E 29.94<8374>108 592.8 S -(urning of)-29.94 E 2.5(fr)-.18 G(estricted mode with)-2.68 E F1(set +r) -2.5 E F2(or)2.5 E F1(set +o restricted)2.5 E F2(.)A(These r)108 609.6 Q +640.8 S(pecifying the)-29.94 E F32.5 E F1(option to the)2.5 E F3 +(command)2.5 E F1(builtin command)2.5 E 29.94<8374>108 657.6 S +(urning of)-29.94 E 2.5(fr)-.18 G(estricted mode with)-2.68 E F3(set +r) +2.5 E F1(or)2.5 E F3(set +o restricted)2.5 E F1(.)A(These r)108 674.4 Q (estrictions ar)-.18 E 2.5(ee)-.18 G(nfor)-2.5 E (ced after any startup \214les ar)-.18 E 2.5(er)-.18 G(ead.)-2.68 E 1.694 (When a command that is found to be a shell script is executed \(see)108 -626.4 R F4 1.694(COMMAND EXECUTION)4.194 F F2(above\),)108 638.4 Q F1 -(rbash)2.5 E F2(turns of)2.5 E 2.5(fa)-.18 G(ny r)-2.5 E -(estrictions in the shell spawned to execute the script.)-.18 E F6 -(SEE ALSO)72 655.2 Q F3(Bash Refer)108 667.2 Q(ence Manual)-.18 E F2 2.5 -(,B)C(rian Fox and Chet Ramey)-2.5 E F3(The Gnu Readline Library)108 -679.2 Q F2 2.5(,B)C(rian Fox and Chet Ramey)-2.5 E F3 -(The Gnu History Library)108 691.2 Q F2 2.5(,B)C -(rian Fox and Chet Ramey)-2.5 E F3(Portable Operating System Interface \ -\(POSIX\) Part 2: Shell and Utilities)108 703.2 Q F2 2.5(,I)C(EEE)-2.5 E -F0(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(62)197.335 E 0 Cg EP +691.2 R F4 1.694(COMMAND EXECUTION)4.194 F F1(above\),)108 703.2 Q F3 +(rbash)2.5 E F1(turns of)2.5 E 2.5(fa)-.18 G(ny r)-2.5 E +(estrictions in the shell spawned to execute the script.)-.18 E F0 +(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(62)199 E 0 Cg EP %%Page: 63 63 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Palatino-Italic@0 SF(sh)108 84 Q/F2 10/Palatino-Roman@0 SF -(\(1\),)A F1(ksh)2.5 E F2(\(1\),)A F1(csh)2.5 E F2(\(1\))A F1(emacs)108 -96 Q F2(\(1\),)A F1(vi)2.5 E F2(\(1\))A F1 -.18(re)108 108 S(adline).18 -E F2(\(3\))A/F3 10.95/Palatino-Bold@0 SF(FILES)72 124.8 Q F1(/bin/bash) -109.666 136.8 Q F2(The)144 148.8 Q/F4 10/Palatino-Bold@0 SF(bash)2.5 E -F2(executable)2.5 E F1(/etc/pr)109.666 160.8 Q(o\214le)-.18 E F2 +-.35 E/F1 10.95/Palatino-Bold@0 SF(SEE ALSO)72 84 Q/F2 10 +/Palatino-Italic@0 SF(Bash Refer)108 96 Q(ence Manual)-.18 E/F3 10 +/Palatino-Roman@0 SF 2.5(,B)C(rian Fox and Chet Ramey)-2.5 E F2 +(The Gnu Readline Library)108 108 Q F3 2.5(,B)C(rian Fox and Chet Ramey) +-2.5 E F2(The Gnu History Library)108 120 Q F3 2.5(,B)C +(rian Fox and Chet Ramey)-2.5 E F2(Portable Operating System Interface \ +\(POSIX\) Part 2: Shell and Utilities)108 132 Q F3 2.5(,I)C(EEE)-2.5 E +F2(sh)108 144 Q F3(\(1\),)A F2(ksh)2.5 E F3(\(1\),)A F2(csh)2.5 E F3 +(\(1\))A F2(emacs)108 156 Q F3(\(1\),)A F2(vi)2.5 E F3(\(1\))A F2 -.18 +(re)108 168 S(adline).18 E F3(\(3\))A F1(FILES)72 184.8 Q F2(/bin/bash) +109.666 196.8 Q F3(The)144 208.8 Q/F4 10/Palatino-Bold@0 SF(bash)2.5 E +F3(executable)2.5 E F2(/etc/pr)109.666 220.8 Q(o\214le)-.18 E F3 (The systemwide initialization \214le, executed for login shells)144 -172.8 Q F1(~/.bash_pr)109.666 184.8 Q(o\214le)-.18 E F2 -(The personal initialization \214le, executed for login shells)144 196.8 -Q F1(~/.bashr)109.666 208.8 Q(c)-.18 E F2(The individual per)144 220.8 Q -(-interactive-shell startup \214le)-.18 E F1(~/.bash_logout)109.666 -232.8 Q F2(The individual login shell cleanup \214le, executed when a l\ -ogin shell exits)144 244.8 Q F1(~/.inputr)109.666 256.8 Q(c)-.18 E F2 -(Individual)144 268.8 Q F1 -.18(re)2.5 G(adline).18 E F2 -(initialization \214le)2.5 E F3(AUTHORS)72 285.6 Q F2(Brian Fox, Fr)108 -297.6 Q(ee Softwar)-.18 E 2.5(eF)-.18 G(oundation)-2.5 E(bfox@gnu.or)108 -309.6 Q(g)-.18 E(Chet Ramey)108 326.4 Q 2.5(,C)-1.11 G(ase W)-2.5 E -(estern Reserve University)-.92 E(chet@po.CWRU.Edu)108 338.4 Q F3 -(BUG REPOR)72 355.2 Q(TS)-.602 E F2 .481(If you \214nd a bug in)108 -367.2 R F4(bash,)2.981 E F2 .481(you should r)2.981 F .481(eport it.) +232.8 Q F2(~/.bash_pr)109.666 244.8 Q(o\214le)-.18 E F3 +(The personal initialization \214le, executed for login shells)144 256.8 +Q F2(~/.bashr)109.666 268.8 Q(c)-.18 E F3(The individual per)144 280.8 Q +(-interactive-shell startup \214le)-.18 E F2(~/.bash_logout)109.666 +292.8 Q F3(The individual login shell cleanup \214le, executed when a l\ +ogin shell exits)144 304.8 Q F2(~/.inputr)109.666 316.8 Q(c)-.18 E F3 +(Individual)144 328.8 Q F2 -.18(re)2.5 G(adline).18 E F3 +(initialization \214le)2.5 E F1(AUTHORS)72 345.6 Q F3(Brian Fox, Fr)108 +357.6 Q(ee Softwar)-.18 E 2.5(eF)-.18 G(oundation)-2.5 E(bfox@gnu.or)108 +369.6 Q(g)-.18 E(Chet Ramey)108 386.4 Q 2.5(,C)-1.11 G(ase W)-2.5 E +(estern Reserve University)-.92 E(chet@po.CWRU.Edu)108 398.4 Q F1 +(BUG REPOR)72 415.2 Q(TS)-.602 E F3 .481(If you \214nd a bug in)108 +427.2 R F4(bash,)2.981 E F3 .481(you should r)2.981 F .481(eport it.) -.18 F .481(But \214rst, you should make sur)5.481 F 2.981(et)-.18 G .481(hat it r)-2.981 F .481(eally is a)-.18 F .459 -(bug, and that it appears in the latest version of)108 379.2 R F4(bash) -2.959 E F2 5.459(.T)C .459(he latest version is always available fr) --5.459 F(om)-.18 E F1(ftp://ftp.gnu.or)108 391.2 Q(g/pub/bash/)-.18 E F2 +(bug, and that it appears in the latest version of)108 439.2 R F4(bash) +2.959 E F3 5.459(.T)C .459(he latest version is always available fr) +-5.459 F(om)-.18 E F2(ftp://ftp.gnu.or)108 451.2 Q(g/pub/bash/)-.18 E F3 (.)A .558(Once you have determined that a bug actually exists, use the) -108 408 R F1(bashbug)3.188 E F2 .558(command to submit a bug)3.538 F --.18(re)108 420 S 3.161(port. If).18 F .662(you have a \214x, you ar) +108 468 R F2(bashbug)3.188 E F3 .558(command to submit a bug)3.538 F +-.18(re)108 480 S 3.161(port. If).18 F .662(you have a \214x, you ar) 3.161 F 3.162(ee)-.18 G .662(ncouraged to mail that as well!)-3.162 F -.662(Suggestions and `philosophi-)5.662 F 3.731(cal' bug r)108 432 R -3.731(eports may be mailed to)-.18 F F1(bug-bash@gnu.or)6.231 E(g)-.18 E -F2 3.73(or posted to the Usenet newsgr)6.231 F(oup)-.18 E F4 -(gnu.bash.bug)108 444 Q F2(.)A(ALL bug r)108 460.8 Q -(eports should include:)-.18 E(The version number of)108 477.6 Q F4 -(bash)2.5 E F2(The har)108 489.6 Q(dwar)-.18 E 2.5(ea)-.18 G -(nd operating system)-2.5 E(The compiler used to compile)108 501.6 Q 2.5 -(Ad)108 513.6 S(escription of the bug behaviour)-2.5 E 2.5(As)108 525.6 +.662(Suggestions and `philosophi-)5.662 F 3.731(cal' bug r)108 492 R +3.731(eports may be mailed to)-.18 F F2(bug-bash@gnu.or)6.231 E(g)-.18 E +F3 3.73(or posted to the Usenet newsgr)6.231 F(oup)-.18 E F4 +(gnu.bash.bug)108 504 Q F3(.)A(ALL bug r)108 520.8 Q +(eports should include:)-.18 E(The version number of)108 537.6 Q F4 +(bash)2.5 E F3(The har)108 549.6 Q(dwar)-.18 E 2.5(ea)-.18 G +(nd operating system)-2.5 E(The compiler used to compile)108 561.6 Q 2.5 +(Ad)108 573.6 S(escription of the bug behaviour)-2.5 E 2.5(As)108 585.6 S(hort script or `r)-2.5 E(ecipe' which exer)-.18 E(cises the bug)-.18 E -F1(bashbug)108.13 542.4 Q F2 1.316(inserts the \214rst thr)4.296 F 1.316 +F2(bashbug)108.13 602.4 Q F3 1.316(inserts the \214rst thr)4.296 F 1.316 (ee items automatically into the template it pr)-.18 F 1.316 -(ovides for \214ling a bug)-.18 F -.18(re)108 554.4 S(port.).18 E 7.698 -(Comments and bug r)108 571.2 R 7.697 +(ovides for \214ling a bug)-.18 F -.18(re)108 614.4 S(port.).18 E 7.698 +(Comments and bug r)108 631.2 R 7.697 (eports concerning this manual page should be dir)-.18 F 7.697(ected to) --.18 F F1(chet@po.CWRU.Edu)108 583.2 Q F2(.).06 E F3(BUGS)72 600 Q F2 -(It's too big and too slow)108 612 Q(.)-.92 E(Ther)108 628.8 Q 2.832(ea) +-.18 F F2(chet@po.CWRU.Edu)108 643.2 Q F3(.).06 E F1(BUGS)72 660 Q F3 +(It's too big and too slow)108 672 Q(.)-.92 E(Ther)108 688.8 Q 2.832(ea) -.18 G .692 -.18(re s)-2.832 H .332(ome subtle dif).18 F(fer)-.18 E .332 -(ences between)-.18 F F4(bash)2.832 E F2 .332 -(and traditional versions of)2.832 F F4(sh)2.832 E F2 2.832(,m)C .333 -(ostly because of)-2.832 F(the)108 640.8 Q/F5 9/Palatino-Bold@0 SF -(POSIX)2.5 E F2(speci\214cation.)2.25 E(Aliases ar)108 657.6 Q 2.5(ec) --.18 G(onfusing in some uses.)-2.5 E -(Shell builtin commands and functions ar)108 674.4 Q 2.5(en)-.18 G -(ot stoppable/r)-2.5 E(estartable.)-.18 E .463 -(Compound commands and command sequences of the form `a ; b ; c' ar)108 -691.2 R 2.962(en)-.18 G .462(ot handled gracefully)-2.962 F 1.256 -(when pr)108 703.2 R 1.257(ocess suspension is attempted.)-.18 F 1.257 -(When a pr)6.257 F 1.257(ocess is stopped, the shell immediately exe-) --.18 F .374(cutes the next command in the sequence.)108 715.2 R .373 -(It suf)5.373 F .373(\214ces to place the sequence of commands between) --.18 F(par)108 727.2 Q(entheses to for)-.18 E -(ce it into a subshell, which may be stopped as a unit.)-.18 E F0 -(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(63)197.335 E 0 Cg EP +(ences between)-.18 F F4(bash)2.832 E F3 .332 +(and traditional versions of)2.832 F F4(sh)2.832 E F3 2.832(,m)C .333 +(ostly because of)-2.832 F(the)108 700.8 Q/F5 9/Palatino-Bold@0 SF +(POSIX)2.5 E F3(speci\214cation.)2.25 E(Aliases ar)108 717.6 Q 2.5(ec) +-.18 G(onfusing in some uses.)-2.5 E F0(GNU Bash-3.0)72 768 Q +(2004 Sep 17)149.01 E(63)199 E 0 Cg EP %%Page: 64 64 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\)) --.35 E/F1 10/Palatino-Roman@0 SF .95(Commands inside of)108 84 R/F2 10 -/Palatino-Bold@0 SF($\()3.451 E F1(...)A F2(\))A F1 .951 -(command substitution ar)3.451 F 3.451(en)-.18 G .951 -(ot parsed until substitution is attempted.)-3.451 F 2.132 -(This will delay err)108 96 R 2.132(or r)-.18 F 2.131 +-.35 E/F1 10/Palatino-Roman@0 SF +(Shell builtin commands and functions ar)108 84 Q 2.5(en)-.18 G +(ot stoppable/r)-2.5 E(estartable.)-.18 E .463 +(Compound commands and command sequences of the form `a ; b ; c' ar)108 +100.8 R 2.962(en)-.18 G .462(ot handled gracefully)-2.962 F 1.256 +(when pr)108 112.8 R 1.257(ocess suspension is attempted.)-.18 F 1.257 +(When a pr)6.257 F 1.257(ocess is stopped, the shell immediately exe-) +-.18 F .374(cutes the next command in the sequence.)108 124.8 R .373 +(It suf)5.373 F .373(\214ces to place the sequence of commands between) +-.18 F(par)108 136.8 Q(entheses to for)-.18 E +(ce it into a subshell, which may be stopped as a unit.)-.18 E .95 +(Commands inside of)108 153.6 R/F2 10/Palatino-Bold@0 SF($\()3.451 E F1 +(...)A F2(\))A F1 .951(command substitution ar)3.451 F 3.451(en)-.18 G +.951(ot parsed until substitution is attempted.)-3.451 F 2.132 +(This will delay err)108 165.6 R 2.132(or r)-.18 F 2.131 (eporting until some time after the command is enter)-.18 F 4.631 -(ed. For)-.18 F(example,)4.631 E .43(unmatched par)108 108 R .431 +(ed. For)-.18 F(example,)4.631 E .43(unmatched par)108 177.6 R .431 (entheses, even inside shell comments, will r)-.18 F .431(esult in err) --.18 F .431(or messages while the con-)-.18 F(str)108 120 Q +-.18 F .431(or messages while the con-)-.18 F(str)108 189.6 Q (uct is being r)-.08 E(ead.)-.18 E -(Array variables may not \(yet\) be exported.)108 136.8 Q F0 -(GNU Bash-3.0)72 768 Q(2004 June 26)147.345 E(64)197.335 E 0 Cg EP +(Array variables may not \(yet\) be exported.)108 206.4 Q F0 +(GNU Bash-3.0)72 768 Q(2004 Sep 17)149.01 E(64)199 E 0 Cg EP %%Trailer end %%EOF diff --git a/doc/bashref.dvi b/doc/bashref.dvi index d0c144214c148299f2b1eec065e44385e3901cdd..ad8bb4c490ce87a21d030bf60d9ddc949b61b1f1 100644 GIT binary patch delta 2490 zc-mc+dt4OP6~{Su=FUE62O(7b$rQme*<`l?ZP4Gmh2k0NUQG;NdK*|qDo`^W6(et+kl z`~2Nge>kE4NW!L(y79?rsS{FD$7RW_Es2fuzlpNdPo8h9aNEi^b&g!JDbH`K^ezA^ zl%{6M|HtLDl$4CbFFC9qXy;Xm)cz(u9DbY@-(a6ZFf54^yHMWjogYAWoDOK zuBzCQ=eL^OHmm$U*_t2a3Pj2hm!Ns={#3K8RF-?&qlfy&HnaxP7dtCG+81 zdji;dsPniU-tn&6Ur3-@MMIkIC3xcxEfwL6*K=xx2z4Qvcd1QBE)nm&z6YY`G#T1? zufrf+*syINB4R^ea=z3QrQ<$H@%Dea-w3UbI*!1r2C$2;73ao4w+NF$eD)al&_KrU z_^&jW8wEE*!s=-dBS8*s%?Gm)>O(x!3}zGD!Dc616yfI~zOx3>C0K&~df-fOD#T;n zhIkSFgxT+dD8ZNzuR-`kf^j(E80At^}v_Yk)7_fR@Y?uzg&GFWSXeq8AzKQ@9h81%%~q(N^w5q^Rh%H3roV|(9y zqKBqnRQz}3h#t;jua0XsLJu|$<~|c(B^JeT=|-5Vu=aR7mB`6@SdHckj&kr)U?Z?L zi#u+B1^D9g+&w|JMfHn^oA*QIg_+#wj72rFZz;R^W|wR+mzCM9$&LKs^ZBJV+2X9M zw7Dvpoepb~dhKWZWrE#N;^9VDD?4X$PsJ~)@v&I%_#e4!vVZoBIn(CMm3?lf>|EkD z+Z{^dL~gKDW_Q>cnNb{@J4aTP%NR3@ThBvQU|tHF*KoWvm)oN=tqfoMICb%<*i*={ zO)n3N&9-w#P2j_SFXfWNN9V69@mN&HIgF%Ez@A2Kx(PlAN=0S-Fr3-KrRiY+Yj$#F zA{2xvaUXMqB6Q=@ZtkiP=7lMnPIIs8AsaP5uGFM@EQsH|$+a6`7S4ajCF&tL)FBQ# zfd9Q73b4w^7nvUIdr;9o$=fC9K=(6zj(SXwmA*{=J1wlozR7&92nWNIqCEa-iR5W; z-9r9=q=20picIhmcuJY<LBUtH@c9%n z6)@3Eyta*>`UD#=v5QYNk}f_-n-1|Gh>(SoKI7L&5EF#|@bNbd@GHD}gD*39Of(yR z@qo7&AZhn)8ZE*fkwpzMm@bDO+jwQwGkglZ6hj38?x=aPuwgh|Ng)lTQFOTgUkBll zAJA4UbCorN?lQn+9P}K`HNY(_oJCjaAwvyHS4PxPict&bB_r&{J4@(ZJsb~HddsO^ z4{NsHT1rJY77&mL=Z$P`4;yKE6r2u=wzSbjB54!wNC%AsPP$Wo=Q`<$>EyuwwX)**{*uC&P|HixZJwMxnvlzU zSN-2OH9Kpw{Ay)U^O&txHVSi;Ita63Rhio*JBtHNC;L>&W{Xeoj^ zM3gJ5%IRp*vGwu#m6QAEVC9>=G>vbIPWZEuw2x-7x^QtHeH~gc{}Vbwt1R!P$?%1; zvzxvUJzceIUvZTqkiMZ!Oix$pkJ1IK&sRrjA^V%yO(zZ85v>+m_AL053W7cCWo*YP z%x1#a z1G+~~{=O+7?cOe&(-3%3snrS=qRR|k^Wmd}I2@uAUN#Zk+gLF~@Q7sS(?MS_?U;d# zI)v9#gk&R0Z3*IMCkg`wGO-5}W(a%rWX7dnCWhlMI$t=q|5R2NGod60nNSl? zN?MeXItJbxj-S?P(r1u2*C2eZ`P*~k^WWisq`j6&B6s4&=~{0L$!)@oMcVDNi8&Xu Wf2%d8vbwd!ue|}hC{{I+M)+ delta 2197 zc-mFfdsGzH9S3lJcjnH%W_DJv$|F9Ak(TgqaS7m~h*CfSABjjqS`6#5z*b~Eutb}P znp07m0Fi9MP)v#*Uoj>SSo9|f6*Z8mN39-{Cg|cLLQs=RV$gH6(av&na_IguJD=b0 z{_f7+@7WzXF{SGGlx?B9glLO-ra57Hyt{KpcTcXX8+qv@0VyoI;zIxljzI?08 zp6~wuA(8d&2yO}~y6;}X1&^yQaF*8W9GTcR&stXGjjZGL7I-#tTPc7?ryGibF3-cb zS!QVQ#1)#Sk%I3$MRl+1VUiN_YY6cCw4>h$J3U`F_Y-Jfbfxu_9yWURcIFVs^-;Vh zzUx)Vh}Dfh`1w_j?B$Jf4>eCy@{*{=GkkW21P<0%aCx7O^bUCB{$UAvn9aUdYk&^V zxyO%0sPxe+q$1cQcpX;;LAL}?ql*0o5;ll|7Fg^L=ULaT6!?`4ldwGttRk#tm~Dkz zBV5EbC-h3NlHutJm?lFiKCA-H2rWLGi3!^wM1q5u^#MpS7#O~X&@Mv|W`70;MUWV# zUV=F~IEkCRaK!+>W%&LrDAYkP(tDsaLI=b7K<{` zGXIu zCNVM~vp;PmoJh9ZLgzc=j2^;#Is;ve9BR(bHOK^i> z_C=CnfJ^wEm%JpxQikT+q(%=-c` z1PjB#aPA#F6k*yCG8%{t@!Tnc`VHkLbN2+Dnq7No9dACNNBOdxabsqgFa6Gvd`C%P9q%8Z97*S% z$@pc8S6vhuv8>GQtMz3rSd_A8vD@o%x}7UrR!7OtGh9V>-wIo~I=7^uHPq!Uc9huN zCH3X2>M=Bfdy|I{->HsQ)XzQ%zh2B8(!pA6$l;ta*hf{89Necy_#Ek4E=q!bjZ`qb zlB*KQrpNeYEthJ9UCQ&tyaiv_!A;l0ZLIu|E0$mh!>Nb490@vcLpRqiLOR3xi`*-E zFr)0{ij2_9@W36e*#OD-hX-7^@0eAL#dhFN>R}01hsU;T`a@+|Py!c0cy$rdi_6-wwN=b9_Ht=Up zez}Sd-gm{xo77--eEG4mn zj#Ex`P$$3J-xPr}I_YF>Aj@oDRBEl7*_#FBB{tuGLd{;~YB$YR$Hn!~9QCrThbI0! zwS-MQTA*z0roS8eB3tMvcG*i;TU|A~C5r`b_s~y(-yfj9-TqJdC4mZdx>X=VBA%g_ zjO6qRtnQ_468Y-2QMJv3^f@E>CI&n2(?fbPe1ILkTKil>{A`L%C)kMgd8Su&g3Cy> zhj3Y-P$!Y`$!w6y6EHMP_|QO}xr}FHglLhNkN#473eAba7X~u>4rrAL)Aw^e*(n^8!H6mfV@Sn0 z9DGY~m`KeRzP1-|&ko^+ku=U#{@ScAZd&8h5Y&AlTr-lUD|qK0!eoEa`PB$3Du?2N z3qrn$oPUJP*M$c%x%U33+Rg8U112(5hqXi#IEKK6QMGRZG`#}x|C@3$SYsnWEy~$K z%|uKM(S&BgIHjmi#e!^9v0@@AII3iBR-tkxwrti|7LdwD95}DJn?%lC!hf5z193#| o#$#z(PY_A{7+qHFzD$z00w*+StubK04Og|dK-c#!xjORtAF8<+&j0`b diff --git a/doc/bashref.html b/doc/bashref.html index ae5e6f4f1..4a6e76933 100644 --- a/doc/bashref.html +++ b/doc/bashref.html @@ -1,6 +1,6 @@ - + %s\n", result); + free (result); + } + exit (0); +} + +static void memory_error_and_abort (); + +static void * +xmalloc (bytes) + size_t bytes; +{ + void *temp = (char *)malloc (bytes); + + if (!temp) + memory_error_and_abort (); + return (temp); +} + +static void * +xrealloc (pointer, bytes) + void *pointer; + int bytes; +{ + void *temp; + + if (!pointer) + temp = malloc (bytes); + else + temp = realloc (pointer, bytes); + + if (!temp) + memory_error_and_abort (); + + return (temp); +} + +static void +memory_error_and_abort () +{ + fprintf (stderr, "readline: out of virtual memory\n"); + abort (); +} + +/* + * Local variables: + * compile-command: "gcc -g -DTEST -o tilde tilde.c" + * end: + */ +#endif /* TEST */ diff --git a/lib/tilde/tilde.h b/lib/tilde/tilde.h index f8182c999..c58ce20e7 100644 --- a/lib/tilde/tilde.h +++ b/lib/tilde/tilde.h @@ -71,6 +71,9 @@ extern char *tilde_expand PARAMS((const char *)); tilde. If there is no expansion, call tilde_expansion_failure_hook. */ extern char *tilde_expand_word PARAMS((const char *)); +/* Find the portion of the string beginning with ~ that should be expanded. */ +extern char *tilde_find_word PARAMS((const char *, int, int *)); + #ifdef __cplusplus } #endif diff --git a/lib/tilde/tilde.h~ b/lib/tilde/tilde.h~ new file mode 100644 index 000000000..c76234b17 --- /dev/null +++ b/lib/tilde/tilde.h~ @@ -0,0 +1,81 @@ +/* tilde.h: Externally available variables and function in libtilde.a. */ + +/* Copyright (C) 1992 Free Software Foundation, Inc. + + This file contains the Readline Library (the Library), a set of + routines for providing Emacs style line input to programs that ask + for it. + + The Library 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. + + The Library 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. + + The GNU General Public License is often shipped with GNU software, and + is generally kept in a file called COPYING or LICENSE. If you do not + have a copy of the license, write to the Free Software Foundation, + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ + +#if !defined (_TILDE_H_) +# define _TILDE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* A function can be defined using prototypes and compile on both ANSI C + and traditional C compilers with something like this: + extern char *func PARAMS((char *, char *, int)); */ + +#if !defined (PARAMS) +# if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus) +# define PARAMS(protos) protos +# else +# define PARAMS(protos) () +# endif +#endif + +typedef char *tilde_hook_func_t PARAMS((char *)); + +/* If non-null, this contains the address of a function that the application + wants called before trying the standard tilde expansions. The function + is called with the text sans tilde, and returns a malloc()'ed string + which is the expansion, or a NULL pointer if the expansion fails. */ +extern tilde_hook_func_t *tilde_expansion_preexpansion_hook; + +/* If non-null, this contains the address of a function to call if the + standard meaning for expanding a tilde fails. The function is called + with the text (sans tilde, as in "foo"), and returns a malloc()'ed string + which is the expansion, or a NULL pointer if there is no expansion. */ +extern tilde_hook_func_t *tilde_expansion_failure_hook; + +/* When non-null, this is a NULL terminated array of strings which + are duplicates for a tilde prefix. Bash uses this to expand + `=~' and `:~'. */ +extern char **tilde_additional_prefixes; + +/* When non-null, this is a NULL terminated array of strings which match + the end of a username, instead of just "/". Bash sets this to + `:' and `=~'. */ +extern char **tilde_additional_suffixes; + +/* Return a new string which is the result of tilde expanding STRING. */ +extern char *tilde_expand PARAMS((const char *)); + +/* Do the work of tilde expansion on FILENAME. FILENAME starts with a + tilde. If there is no expansion, call tilde_expansion_failure_hook. */ +extern char *tilde_expand_word PARAMS((const char *)); + +/* Find the portion of the string beginning with ~ that should be expanded. */ +extern char *tilde_find_word PARAMS((const char *, int *)); + +#ifdef __cplusplus +} +#endif + +#endif /* _TILDE_H_ */ diff --git a/po/bash.pot b/po/bash.pot index d195ab73d..b12787bda 100644 --- a/po/bash.pot +++ b/po/bash.pot @@ -16,17 +16,17 @@ #: builtins.c:943 builtins.c:946 builtins.c:948 builtins.c:950 builtins.c:952 #: builtins.c:954 builtins.c:957 builtins.c:966 builtins.c:968 builtins.c:973 #: builtins.c:976 builtins.c:1020 builtins.c:1025 builtins.c:1029 -#: builtins.c:1033 builtins.c:1035 builtins.c:1048 builtins.c:1063 -#: builtins.c:1226 builtins.c:1231 builtins.c:1304 builtins.c:1308 -#: builtins.c:1312 builtins.c:1315 builtins.c:1318 builtins.c:1330 -#: builtins.c:1334 builtins.c:1338 builtins.c:1341 builtins.c:1353 -#: builtins.c:1361 builtins.c:1364 +#: builtins.c:1033 builtins.c:1035 builtins.c:1048 builtins.c:1066 +#: builtins.c:1231 builtins.c:1236 builtins.c:1309 builtins.c:1313 +#: builtins.c:1317 builtins.c:1320 builtins.c:1323 builtins.c:1335 +#: builtins.c:1339 builtins.c:1343 builtins.c:1346 builtins.c:1358 +#: builtins.c:1366 builtins.c:1369 #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: bug-bash@gnu.org\n" -"POT-Creation-Date: 2004-09-09 17:59-0400\n" +"POT-Creation-Date: 2004-09-26 17:34-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -34,11 +34,11 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: arrayfunc.c:45 +#: arrayfunc.c:46 msgid "bad array subscript" msgstr "" -#: arrayfunc.c:306 +#: arrayfunc.c:309 #, c-format msgid "%s: cannot assign to non-numeric index" msgstr "" @@ -48,21 +48,21 @@ msgstr "" msgid "%s: cannot create: %s" msgstr "" -#: bashline.c:2916 +#: bashline.c:2923 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "" -#: bashline.c:2965 +#: bashline.c:2972 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "" -#: bashline.c:2994 +#: bashline.c:3001 #, c-format msgid "no closing `%c' in %s" msgstr "" -#: bashline.c:3028 +#: bashline.c:3035 #, c-format msgid "%s: missing colon separator" msgstr "" @@ -270,7 +270,7 @@ msgstr "" msgid "cannot use `-f' to make functions" msgstr "" -#: builtins/declare.def:307 execute_cmd.c:3969 +#: builtins/declare.def:307 execute_cmd.c:3953 #, c-format msgid "%s: readonly function" msgstr "" @@ -304,7 +304,7 @@ msgstr "" msgid "%s: cannot delete: %s" msgstr "" -#: builtins/evalfile.c:129 execute_cmd.c:3841 shell.c:1396 +#: builtins/evalfile.c:129 execute_cmd.c:3825 shell.c:1396 #, c-format msgid "%s: is a directory" msgstr "" @@ -329,6 +329,7 @@ msgid "not login shell: use `exit'" msgstr "" #: builtins/exit.def:111 +#, c-format msgid "There are stopped jobs.\n" msgstr "" @@ -370,10 +371,12 @@ msgid "%s: hash table empty\n" msgstr "" #: builtins/help.def:108 +#, c-format msgid "Shell commands matching keywords `" msgstr "" #: builtins/help.def:110 +#, c-format msgid "Shell commands matching keyword `" msgstr "" @@ -389,6 +392,7 @@ msgid "%s: cannot open: %s" msgstr "" #: builtins/help.def:182 +#, c-format msgid "" "These shell commands are defined internally. Type `help' to see this list.\n" "Type `help name' to find out more about the function `name'.\n" @@ -451,43 +455,43 @@ msgstr "" msgid "" msgstr "" -#: builtins/pushd.def:652 builtins.c:1350 +#: builtins/pushd.def:652 builtins.c:1355 msgid "Display the list of currently remembered directories. Directories" msgstr "" -#: builtins/pushd.def:653 builtins.c:1351 +#: builtins/pushd.def:653 builtins.c:1356 msgid "find their way onto the list with the `pushd' command; you can get" msgstr "" -#: builtins/pushd.def:654 builtins.c:1352 +#: builtins/pushd.def:654 builtins.c:1357 msgid "back up through the list with the `popd' command." msgstr "" -#: builtins/pushd.def:656 builtins.c:1354 +#: builtins/pushd.def:656 builtins.c:1359 msgid "The -l flag specifies that `dirs' should not print shorthand versions" msgstr "" -#: builtins/pushd.def:657 builtins.c:1355 +#: builtins/pushd.def:657 builtins.c:1360 msgid "of directories which are relative to your home directory. This means" msgstr "" -#: builtins/pushd.def:658 builtins.c:1356 +#: builtins/pushd.def:658 builtins.c:1361 msgid "that `~/bin' might be displayed as `/homes/bfox/bin'. The -v flag" msgstr "" -#: builtins/pushd.def:659 builtins.c:1357 +#: builtins/pushd.def:659 builtins.c:1362 msgid "causes `dirs' to print the directory stack with one entry per line," msgstr "" -#: builtins/pushd.def:660 builtins.c:1358 +#: builtins/pushd.def:660 builtins.c:1363 msgid "prepending the directory name with its position in the stack. The -p" msgstr "" -#: builtins/pushd.def:661 builtins.c:1359 +#: builtins/pushd.def:661 builtins.c:1364 msgid "flag does the same thing, but the stack position is not prepended." msgstr "" -#: builtins/pushd.def:662 builtins.c:1360 +#: builtins/pushd.def:662 builtins.c:1365 msgid "The -c flag clears the directory stack by deleting all of the elements." msgstr "" @@ -504,15 +508,15 @@ msgid "" "-N displays the Nth entry counting from the right of the list shown by" msgstr "" -#: builtins/pushd.def:673 builtins.c:1301 +#: builtins/pushd.def:673 builtins.c:1306 msgid "Adds a directory to the top of the directory stack, or rotates" msgstr "" -#: builtins/pushd.def:674 builtins.c:1302 +#: builtins/pushd.def:674 builtins.c:1307 msgid "the stack, making the new top of the stack the current working" msgstr "" -#: builtins/pushd.def:675 builtins.c:1303 +#: builtins/pushd.def:675 builtins.c:1308 msgid "directory. With no arguments, exchanges the top two directories." msgstr "" @@ -552,20 +556,20 @@ msgstr "" msgid " new current working directory." msgstr "" -#: builtins/pushd.def:691 builtins/pushd.def:711 builtins.c:1319 -#: builtins.c:1342 +#: builtins/pushd.def:691 builtins/pushd.def:711 builtins.c:1324 +#: builtins.c:1347 msgid "You can see the directory stack with the `dirs' command." msgstr "" -#: builtins/pushd.def:696 builtins.c:1327 +#: builtins/pushd.def:696 builtins.c:1332 msgid "Removes entries from the directory stack. With no arguments," msgstr "" -#: builtins/pushd.def:697 builtins.c:1328 +#: builtins/pushd.def:697 builtins.c:1333 msgid "removes the top directory from the stack, and cd's to the new" msgstr "" -#: builtins/pushd.def:698 builtins.c:1329 +#: builtins/pushd.def:698 builtins.c:1334 msgid "top directory." msgstr "" @@ -709,22 +713,22 @@ msgstr "" msgid "%s is hashed (%s)\n" msgstr "" -#: builtins/ulimit.def:332 +#: builtins/ulimit.def:344 #, c-format msgid "%s: invalid limit argument" msgstr "" -#: builtins/ulimit.def:358 +#: builtins/ulimit.def:370 #, c-format msgid "`%c': bad command" msgstr "" -#: builtins/ulimit.def:387 +#: builtins/ulimit.def:399 #, c-format msgid "%s: cannot get limit: %s" msgstr "" -#: builtins/ulimit.def:425 +#: builtins/ulimit.def:437 #, c-format msgid "%s: cannot modify limit: %s" msgstr "" @@ -749,6 +753,7 @@ msgid "last command: %s\n" msgstr "" #: error.c:173 +#, c-format msgid "Aborting..." msgstr "" @@ -779,6 +784,7 @@ msgid "%s: unbound variable" msgstr "" #: eval.c:175 +#, c-format msgid "timed out waiting for input: auto-logout\n" msgstr "" @@ -792,27 +798,27 @@ msgstr "" msgid "TIMEFORMAT: `%c': invalid format character" msgstr "" -#: execute_cmd.c:3541 +#: execute_cmd.c:3525 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "" -#: execute_cmd.c:3629 +#: execute_cmd.c:3613 #, c-format msgid "%s: command not found" msgstr "" -#: execute_cmd.c:3859 +#: execute_cmd.c:3843 #, c-format msgid "%s: %s: bad interpreter" msgstr "" -#: execute_cmd.c:3896 +#: execute_cmd.c:3880 #, c-format msgid "%s: cannot execute binary file" msgstr "" -#: execute_cmd.c:4008 +#: execute_cmd.c:3992 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "" @@ -897,32 +903,32 @@ msgstr "" msgid "describe_pid: %ld: no such pid" msgstr "" -#: jobs.c:1633 nojobs.c:648 +#: jobs.c:1635 nojobs.c:648 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "" -#: jobs.c:1821 +#: jobs.c:1823 #, c-format msgid "wait_for: No record of process %ld" msgstr "" -#: jobs.c:2068 +#: jobs.c:2070 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "" -#: jobs.c:2290 +#: jobs.c:2292 #, c-format msgid "%s: job has terminated" msgstr "" -#: jobs.c:2299 +#: jobs.c:2301 #, c-format msgid "%s: job %d already in background" msgstr "" -#: jobs.c:3043 +#: jobs.c:3045 msgid "no job control in this shell" msgstr "" @@ -971,6 +977,7 @@ msgid "realloc: start and end chunk sizes differ" msgstr "" #: lib/malloc/table.c:175 +#, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" msgstr "" @@ -1032,15 +1039,15 @@ msgstr "" msgid "network operations not supported" msgstr "" -#: mailcheck.c:382 +#: mailcheck.c:386 msgid "You have mail in $_" msgstr "" -#: mailcheck.c:407 +#: mailcheck.c:411 msgid "You have new mail in $_" msgstr "" -#: mailcheck.c:423 +#: mailcheck.c:427 #, c-format msgid "The mail in %s has been read\n" msgstr "" @@ -1068,99 +1075,99 @@ msgstr "" msgid "make_redirection: redirection instruction `%d' out of range" msgstr "" -#: parse.y:2726 +#: parse.y:2733 #, c-format msgid "unexpected EOF while looking for matching `%c'" msgstr "" -#: parse.y:3011 +#: parse.y:3018 msgid "unexpected EOF while looking for `]]'" msgstr "" -#: parse.y:3016 +#: parse.y:3023 #, c-format msgid "syntax error in conditional expression: unexpected token `%s'" msgstr "" -#: parse.y:3020 +#: parse.y:3027 msgid "syntax error in conditional expression" msgstr "" -#: parse.y:3098 +#: parse.y:3105 #, c-format msgid "unexpected token `%s', expected `)'" msgstr "" -#: parse.y:3102 +#: parse.y:3109 msgid "expected `)'" msgstr "" -#: parse.y:3130 +#: parse.y:3137 #, c-format msgid "unexpected argument `%s' to conditional unary operator" msgstr "" -#: parse.y:3134 +#: parse.y:3141 msgid "unexpected argument to conditional unary operator" msgstr "" -#: parse.y:3171 +#: parse.y:3178 #, c-format msgid "unexpected token `%s', conditional binary operator expected" msgstr "" -#: parse.y:3175 +#: parse.y:3182 msgid "conditional binary operator expected" msgstr "" -#: parse.y:3191 +#: parse.y:3198 #, c-format msgid "unexpected argument `%s' to conditional binary operator" msgstr "" -#: parse.y:3195 +#: parse.y:3202 msgid "unexpected argument to conditional binary operator" msgstr "" -#: parse.y:3206 +#: parse.y:3213 #, c-format msgid "unexpected token `%c' in conditional command" msgstr "" -#: parse.y:3209 +#: parse.y:3216 #, c-format msgid "unexpected token `%s' in conditional command" msgstr "" -#: parse.y:3213 +#: parse.y:3220 #, c-format msgid "unexpected token %d in conditional command" msgstr "" -#: parse.y:4409 +#: parse.y:4426 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "" -#: parse.y:4427 +#: parse.y:4444 #, c-format msgid "syntax error near `%s'" msgstr "" -#: parse.y:4437 +#: parse.y:4454 msgid "syntax error: unexpected end of file" msgstr "" -#: parse.y:4437 +#: parse.y:4454 msgid "syntax error" msgstr "" -#: parse.y:4499 +#: parse.y:4516 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "" -#: parse.y:4658 +#: parse.y:4675 msgid "unexpected EOF while looking for matching `)'" msgstr "" @@ -1268,6 +1275,7 @@ msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "" #: shell.c:1756 +#, c-format msgid "Use the `bashbug' command to report bugs.\n" msgstr "" @@ -1276,77 +1284,77 @@ msgstr "" msgid "sigprocmask: %d: invalid operation" msgstr "" -#: subst.c:1046 +#: subst.c:1102 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "" -#: subst.c:2053 +#: subst.c:2187 #, c-format msgid "%s: cannot assign list to array member" msgstr "" -#: subst.c:3880 subst.c:3896 +#: subst.c:4026 subst.c:4042 msgid "cannot make pipe for process substitution" msgstr "" -#: subst.c:3927 +#: subst.c:4073 msgid "cannot make child for process substitution" msgstr "" -#: subst.c:3972 +#: subst.c:4118 #, c-format msgid "cannot open named pipe %s for reading" msgstr "" -#: subst.c:3974 +#: subst.c:4120 #, c-format msgid "cannot open named pipe %s for writing" msgstr "" -#: subst.c:3982 +#: subst.c:4128 #, c-format msgid "cannout reset nodelay mode for fd %d" msgstr "" -#: subst.c:3992 +#: subst.c:4138 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "" -#: subst.c:4167 +#: subst.c:4313 msgid "cannot make pipe for command substitution" msgstr "" -#: subst.c:4196 +#: subst.c:4342 msgid "cannot make child for command substitution" msgstr "" -#: subst.c:4213 +#: subst.c:4359 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "" -#: subst.c:4671 +#: subst.c:4802 #, c-format msgid "%s: parameter null or not set" msgstr "" -#: subst.c:4937 +#: subst.c:5068 #, c-format msgid "%s: substring expression < 0" msgstr "" -#: subst.c:5667 +#: subst.c:5791 #, c-format msgid "%s: bad substitution" msgstr "" -#: subst.c:5741 +#: subst.c:5865 #, c-format msgid "$%s: cannot assign in this way" msgstr "" -#: subst.c:7110 +#: subst.c:7325 #, c-format msgid "no match: %s" msgstr "" @@ -1444,6 +1452,7 @@ msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "" #: version.c:82 +#, c-format msgid "Copyright (C) 2004 Free Software Foundation, Inc.\n" msgstr "" @@ -2394,7 +2403,7 @@ msgid "" msgstr "" #: builtins.c:675 -msgid "Send the processes named by PID (or JOB) the signal SIGSPEC. If" +msgid "Send the processes named by PID (or JOBSPEC) the signal SIGSPEC. If" msgstr "" #: builtins.c:676 @@ -3420,747 +3429,767 @@ msgid " -f\tthe maximum size of files created by the shell" msgstr "" #: builtins.c:1055 -msgid " -l\tthe maximum size a process may lock into memory" +msgid " -i the maximum number of pending signals" msgstr "" #: builtins.c:1056 -msgid " -m\tthe maximum resident set size" +msgid " -l\tthe maximum size a process may lock into memory" msgstr "" #: builtins.c:1057 -msgid " -n\tthe maximum number of open file descriptors" +msgid " -m\tthe maximum resident set size" msgstr "" #: builtins.c:1058 -msgid " -p\tthe pipe buffer size" +msgid " -n\tthe maximum number of open file descriptors" msgstr "" #: builtins.c:1059 -msgid " -s\tthe maximum stack size" +msgid " -p\tthe pipe buffer size" msgstr "" #: builtins.c:1060 -msgid " -t\tthe maximum amount of cpu time in seconds" +msgid " -q the maximum number of bytes in POSIX message queues" msgstr "" #: builtins.c:1061 -msgid " -u\tthe maximum number of user processes" +msgid " -s\tthe maximum stack size" msgstr "" #: builtins.c:1062 -msgid " -v\tthe size of virtual memory" +msgid " -t\tthe maximum amount of cpu time in seconds" +msgstr "" + +#: builtins.c:1063 +msgid " -u\tthe maximum number of user processes" msgstr "" #: builtins.c:1064 -msgid "If LIMIT is given, it is the new value of the specified resource;" +msgid " -v\tthe size of virtual memory" msgstr "" #: builtins.c:1065 +msgid " -x the maximum number of file locks" +msgstr "" + +#: builtins.c:1067 +msgid "If LIMIT is given, it is the new value of the specified resource;" +msgstr "" + +#: builtins.c:1068 msgid "the special LIMIT values `soft', `hard', and `unlimited' stand for" msgstr "" -#: builtins.c:1066 +#: builtins.c:1069 msgid "" "the current soft limit, the current hard limit, and no limit, respectively." msgstr "" -#: builtins.c:1067 +#: builtins.c:1070 msgid "Otherwise, the current value of the specified resource is printed." msgstr "" -#: builtins.c:1068 +#: builtins.c:1071 msgid "If no option is given, then -f is assumed. Values are in 1024-byte" msgstr "" -#: builtins.c:1069 +#: builtins.c:1072 msgid "increments, except for -t, which is in seconds, -p, which is in" msgstr "" -#: builtins.c:1070 +#: builtins.c:1073 msgid "increments of 512 bytes, and -u, which is an unscaled number of" msgstr "" -#: builtins.c:1071 +#: builtins.c:1074 msgid "processes." msgstr "" -#: builtins.c:1078 +#: builtins.c:1081 msgid "The user file-creation mask is set to MODE. If MODE is omitted, or if" msgstr "" -#: builtins.c:1079 +#: builtins.c:1082 msgid "`-S' is supplied, the current value of the mask is printed. The `-S'" msgstr "" -#: builtins.c:1080 +#: builtins.c:1083 msgid "option makes the output symbolic; otherwise an octal number is output." msgstr "" -#: builtins.c:1081 +#: builtins.c:1084 msgid "If `-p' is supplied, and MODE is omitted, the output is in a form" msgstr "" -#: builtins.c:1082 +#: builtins.c:1085 msgid "that may be used as input. If MODE begins with a digit, it is" msgstr "" -#: builtins.c:1083 +#: builtins.c:1086 msgid "interpreted as an octal number, otherwise it is a symbolic mode string" msgstr "" -#: builtins.c:1084 +#: builtins.c:1087 msgid "like that accepted by chmod(1)." msgstr "" -#: builtins.c:1091 builtins.c:1103 +#: builtins.c:1094 builtins.c:1106 msgid "Wait for the specified process and report its termination status. If" msgstr "" -#: builtins.c:1092 builtins.c:1104 +#: builtins.c:1095 builtins.c:1107 msgid "N is not given, all currently active child processes are waited for," msgstr "" -#: builtins.c:1093 +#: builtins.c:1096 msgid "and the return code is zero. N may be a process ID or a job" msgstr "" -#: builtins.c:1094 +#: builtins.c:1097 msgid "specification; if a job spec is given, all processes in the job's" msgstr "" -#: builtins.c:1095 +#: builtins.c:1098 msgid "pipeline are waited for." msgstr "" -#: builtins.c:1105 +#: builtins.c:1108 msgid "and the return code is zero. N is a process ID; if it is not given," msgstr "" -#: builtins.c:1106 +#: builtins.c:1109 msgid "all child processes of the shell are waited for." msgstr "" -#: builtins.c:1113 +#: builtins.c:1116 msgid "The `for' loop executes a sequence of commands for each member in a" msgstr "" -#: builtins.c:1114 +#: builtins.c:1117 msgid "list of items. If `in WORDS ...;' is not present, then `in \"$@\"' is" msgstr "" -#: builtins.c:1115 +#: builtins.c:1118 msgid "assumed. For each element in WORDS, NAME is set to that element, and" msgstr "" -#: builtins.c:1116 +#: builtins.c:1119 msgid "the COMMANDS are executed." msgstr "" -#: builtins.c:1122 +#: builtins.c:1125 msgid "Equivalent to" msgstr "" -#: builtins.c:1123 +#: builtins.c:1126 msgid "\t(( EXP1 ))" msgstr "" -#: builtins.c:1124 +#: builtins.c:1127 msgid "\twhile (( EXP2 )); do" msgstr "" -#: builtins.c:1125 +#: builtins.c:1128 msgid "\t\tCOMMANDS" msgstr "" -#: builtins.c:1126 +#: builtins.c:1129 msgid "\t\t(( EXP3 ))" msgstr "" -#: builtins.c:1127 +#: builtins.c:1130 msgid "\tdone" msgstr "" -#: builtins.c:1128 +#: builtins.c:1131 msgid "EXP1, EXP2, and EXP3 are arithmetic expressions. If any expression is" msgstr "" -#: builtins.c:1129 +#: builtins.c:1132 msgid "omitted, it behaves as if it evaluates to 1." msgstr "" -#: builtins.c:1135 +#: builtins.c:1138 msgid "The WORDS are expanded, generating a list of words. The" msgstr "" -#: builtins.c:1136 +#: builtins.c:1139 msgid "set of expanded words is printed on the standard error, each" msgstr "" -#: builtins.c:1137 +#: builtins.c:1140 msgid "preceded by a number. If `in WORDS' is not present, `in \"$@\"'" msgstr "" -#: builtins.c:1138 +#: builtins.c:1141 msgid "is assumed. The PS3 prompt is then displayed and a line read" msgstr "" -#: builtins.c:1139 +#: builtins.c:1142 msgid "from the standard input. If the line consists of the number" msgstr "" -#: builtins.c:1140 +#: builtins.c:1143 msgid "corresponding to one of the displayed words, then NAME is set" msgstr "" -#: builtins.c:1141 +#: builtins.c:1144 msgid "to that word. If the line is empty, WORDS and the prompt are" msgstr "" -#: builtins.c:1142 +#: builtins.c:1145 msgid "redisplayed. If EOF is read, the command completes. Any other" msgstr "" -#: builtins.c:1143 +#: builtins.c:1146 msgid "value read causes NAME to be set to null. The line read is saved" msgstr "" -#: builtins.c:1144 +#: builtins.c:1147 msgid "in the variable REPLY. COMMANDS are executed after each selection" msgstr "" -#: builtins.c:1145 +#: builtins.c:1148 msgid "until a break command is executed." msgstr "" -#: builtins.c:1151 +#: builtins.c:1154 msgid "Execute PIPELINE and print a summary of the real time, user CPU time," msgstr "" -#: builtins.c:1152 +#: builtins.c:1155 msgid "and system CPU time spent executing PIPELINE when it terminates." msgstr "" -#: builtins.c:1153 +#: builtins.c:1156 msgid "The return status is the return status of PIPELINE. The `-p' option" msgstr "" -#: builtins.c:1154 +#: builtins.c:1157 msgid "prints the timing summary in a slightly different format. This uses" msgstr "" -#: builtins.c:1155 +#: builtins.c:1158 msgid "the value of the TIMEFORMAT variable as the output format." msgstr "" -#: builtins.c:1161 +#: builtins.c:1164 msgid "Selectively execute COMMANDS based upon WORD matching PATTERN. The" msgstr "" -#: builtins.c:1162 +#: builtins.c:1165 msgid "`|' is used to separate multiple patterns." msgstr "" -#: builtins.c:1168 +#: builtins.c:1171 msgid "" "The if COMMANDS are executed. If the exit status is zero, then the then" msgstr "" -#: builtins.c:1169 +#: builtins.c:1172 msgid "" "COMMANDS are executed. Otherwise, each of the elif COMMANDS are executed" msgstr "" -#: builtins.c:1170 +#: builtins.c:1173 msgid "" "in turn, and if the exit status is zero, the corresponding then COMMANDS" msgstr "" -#: builtins.c:1171 +#: builtins.c:1174 msgid "" "are executed and the if command completes. Otherwise, the else COMMANDS" msgstr "" -#: builtins.c:1172 +#: builtins.c:1175 msgid "" "are executed, if present. The exit status is the exit status of the last" msgstr "" -#: builtins.c:1173 +#: builtins.c:1176 msgid "command executed, or zero if no condition tested true." msgstr "" -#: builtins.c:1179 builtins.c:1186 +#: builtins.c:1182 builtins.c:1189 msgid "Expand and execute COMMANDS as long as the final command in the" msgstr "" -#: builtins.c:1180 +#: builtins.c:1183 msgid "`while' COMMANDS has an exit status of zero." msgstr "" -#: builtins.c:1187 +#: builtins.c:1190 msgid "`until' COMMANDS has an exit status which is not zero." msgstr "" -#: builtins.c:1193 +#: builtins.c:1196 msgid "Create a simple command invoked by NAME which runs COMMANDS." msgstr "" -#: builtins.c:1194 +#: builtins.c:1197 msgid "Arguments on the command line along with NAME are passed to the" msgstr "" -#: builtins.c:1195 +#: builtins.c:1198 msgid "function as $0 .. $n." msgstr "" -#: builtins.c:1201 +#: builtins.c:1204 msgid "Run a set of commands in a group. This is one way to redirect an" msgstr "" -#: builtins.c:1202 +#: builtins.c:1205 msgid "entire set of commands." msgstr "" -#: builtins.c:1208 -msgid "This is similar to the `fg' command. Resume a stopped or background" +#: builtins.c:1211 +msgid "Equivalent to the JOB_SPEC argument to the `fg' command. Resume a" +msgstr "" + +#: builtins.c:1212 +msgid "stopped or background job. JOB_SPEC can specify either a job name" msgstr "" -#: builtins.c:1209 -msgid "job specified by %JOBSPEC. Following the job specification with a `&'" +#: builtins.c:1213 +msgid "or a job number. Following JOB_SPEC with a `&' places the job in" msgstr "" -#: builtins.c:1210 -msgid "places the job in the background." +#: builtins.c:1214 +msgid "the background, as if the job specification had been supplied as an" msgstr "" -#: builtins.c:1216 +#: builtins.c:1215 +msgid "argument to `bg'." +msgstr "" + +#: builtins.c:1221 msgid "The EXPRESSION is evaluated according to the rules for arithmetic" msgstr "" -#: builtins.c:1217 +#: builtins.c:1222 msgid "evaluation. Equivalent to \"let EXPRESSION\"." msgstr "" -#: builtins.c:1223 +#: builtins.c:1228 msgid "" "Returns a status of 0 or 1 depending on the evaluation of the conditional" msgstr "" -#: builtins.c:1224 +#: builtins.c:1229 msgid "" "expression EXPRESSION. Expressions are composed of the same primaries used" msgstr "" -#: builtins.c:1225 +#: builtins.c:1230 msgid "" "by the `test' builtin, and may be combined using the following operators" msgstr "" -#: builtins.c:1227 +#: builtins.c:1232 msgid "\t( EXPRESSION )\tReturns the value of EXPRESSION" msgstr "" -#: builtins.c:1228 +#: builtins.c:1233 msgid "\t! EXPRESSION\tTrue if EXPRESSION is false; else false" msgstr "" -#: builtins.c:1229 +#: builtins.c:1234 msgid "\tEXPR1 && EXPR2\tTrue if both EXPR1 and EXPR2 are true; else false" msgstr "" -#: builtins.c:1230 +#: builtins.c:1235 msgid "\tEXPR1 || EXPR2\tTrue if either EXPR1 or EXPR2 is true; else false" msgstr "" -#: builtins.c:1232 +#: builtins.c:1237 msgid "" "When the `==' and `!=' operators are used, the string to the right of the" msgstr "" -#: builtins.c:1233 +#: builtins.c:1238 msgid "operator is used as a pattern and pattern matching is performed. The" msgstr "" -#: builtins.c:1234 +#: builtins.c:1239 msgid "&& and || operators do not evaluate EXPR2 if EXPR1 is sufficient to" msgstr "" -#: builtins.c:1235 +#: builtins.c:1240 msgid "determine the expression's value." msgstr "" -#: builtins.c:1241 +#: builtins.c:1246 msgid "BASH_VERSION Version information for this Bash." msgstr "" -#: builtins.c:1242 +#: builtins.c:1247 msgid "CDPATH A colon-separated list of directories to search" msgstr "" -#: builtins.c:1243 +#: builtins.c:1248 msgid "\t\tfor directries given as arguments to `cd'." msgstr "" -#: builtins.c:1244 +#: builtins.c:1249 msgid "GLOBIGNORE\tA colon-separated list of patterns describing filenames to" msgstr "" -#: builtins.c:1245 +#: builtins.c:1250 msgid "\t\tbe ignored by pathname expansion." msgstr "" -#: builtins.c:1247 +#: builtins.c:1252 msgid "" "HISTFILE The name of the file where your command history is stored." msgstr "" -#: builtins.c:1248 +#: builtins.c:1253 msgid "HISTFILESIZE The maximum number of lines this file can contain." msgstr "" -#: builtins.c:1249 +#: builtins.c:1254 msgid "HISTSIZE The maximum number of history lines that a running" msgstr "" -#: builtins.c:1250 +#: builtins.c:1255 msgid "\t\tshell can access." msgstr "" -#: builtins.c:1252 +#: builtins.c:1257 msgid "HOME The complete pathname to your login directory." msgstr "" -#: builtins.c:1253 +#: builtins.c:1258 msgid "HOSTNAME\tThe name of the current host." msgstr "" -#: builtins.c:1254 +#: builtins.c:1259 msgid "HOSTTYPE The type of CPU this version of Bash is running under." msgstr "" -#: builtins.c:1255 +#: builtins.c:1260 msgid "IGNOREEOF Controls the action of the shell on receipt of an EOF" msgstr "" -#: builtins.c:1256 +#: builtins.c:1261 msgid "\t\tcharacter as the sole input. If set, then the value" msgstr "" -#: builtins.c:1257 +#: builtins.c:1262 msgid "\t\tof it is the number of EOF characters that can be seen" msgstr "" -#: builtins.c:1258 +#: builtins.c:1263 msgid "\t\tin a row on an empty line before the shell will exit" msgstr "" -#: builtins.c:1259 +#: builtins.c:1264 msgid "\t\t(default 10). When unset, EOF signifies the end of input." msgstr "" -#: builtins.c:1260 +#: builtins.c:1265 msgid "MACHTYPE\tA string describing the current system Bash is running on." msgstr "" -#: builtins.c:1261 +#: builtins.c:1266 msgid "MAILCHECK\tHow often, in seconds, Bash checks for new mail." msgstr "" -#: builtins.c:1262 +#: builtins.c:1267 msgid "MAILPATH\tA colon-separated list of filenames which Bash checks" msgstr "" -#: builtins.c:1263 +#: builtins.c:1268 msgid "\t\tfor new mail." msgstr "" -#: builtins.c:1264 +#: builtins.c:1269 msgid "OSTYPE\t\tThe version of Unix this version of Bash is running on." msgstr "" -#: builtins.c:1265 +#: builtins.c:1270 msgid "PATH A colon-separated list of directories to search when" msgstr "" -#: builtins.c:1266 +#: builtins.c:1271 msgid "\t\tlooking for commands." msgstr "" -#: builtins.c:1267 +#: builtins.c:1272 msgid "PROMPT_COMMAND A command to be executed before the printing of each" msgstr "" -#: builtins.c:1268 +#: builtins.c:1273 msgid "\t\tprimary prompt." msgstr "" -#: builtins.c:1269 +#: builtins.c:1274 msgid "PS1 The primary prompt string." msgstr "" -#: builtins.c:1270 +#: builtins.c:1275 msgid "PS2 The secondary prompt string." msgstr "" -#: builtins.c:1271 +#: builtins.c:1276 msgid "PWD\t\tThe full pathname of the current directory." msgstr "" -#: builtins.c:1272 +#: builtins.c:1277 msgid "SHELLOPTS\tA colon-separated list of enabled shell options." msgstr "" -#: builtins.c:1273 +#: builtins.c:1278 msgid "TERM The name of the current terminal type." msgstr "" -#: builtins.c:1274 +#: builtins.c:1279 msgid "TIMEFORMAT\tThe output format for timing statistics displayed by the" msgstr "" -#: builtins.c:1275 +#: builtins.c:1280 msgid "\t\t`time' reserved word." msgstr "" -#: builtins.c:1276 +#: builtins.c:1281 msgid "auto_resume Non-null means a command word appearing on a line by" msgstr "" -#: builtins.c:1277 +#: builtins.c:1282 msgid "\t\titself is first looked for in the list of currently" msgstr "" -#: builtins.c:1278 +#: builtins.c:1283 msgid "\t\tstopped jobs. If found there, that job is foregrounded." msgstr "" -#: builtins.c:1279 +#: builtins.c:1284 msgid "\t\tA value of `exact' means that the command word must" msgstr "" -#: builtins.c:1280 +#: builtins.c:1285 msgid "\t\texactly match a command in the list of stopped jobs. A" msgstr "" -#: builtins.c:1281 +#: builtins.c:1286 msgid "\t\tvalue of `substring' means that the command word must" msgstr "" -#: builtins.c:1282 +#: builtins.c:1287 msgid "\t\tmatch a substring of the job. Any other value means that" msgstr "" -#: builtins.c:1283 +#: builtins.c:1288 msgid "\t\tthe command must be a prefix of a stopped job." msgstr "" -#: builtins.c:1286 +#: builtins.c:1291 msgid "histchars Characters controlling history expansion and quick" msgstr "" -#: builtins.c:1287 +#: builtins.c:1292 msgid "\t\tsubstitution. The first character is the history" msgstr "" -#: builtins.c:1288 +#: builtins.c:1293 msgid "\t\tsubstitution character, usually `!'. The second is" msgstr "" -#: builtins.c:1289 +#: builtins.c:1294 msgid "\t\tthe `quick substitution' character, usually `^'. The" msgstr "" -#: builtins.c:1290 +#: builtins.c:1295 msgid "\t\tthird is the `history comment' character, usually `#'." msgstr "" -#: builtins.c:1292 +#: builtins.c:1297 msgid "HISTIGNORE\tA colon-separated list of patterns used to decide which" msgstr "" -#: builtins.c:1293 +#: builtins.c:1298 msgid "\t\tcommands should be saved on the history list." msgstr "" -#: builtins.c:1305 +#: builtins.c:1310 msgid "+N\tRotates the stack so that the Nth directory (counting" msgstr "" -#: builtins.c:1306 +#: builtins.c:1311 msgid "\tfrom the left of the list shown by `dirs', starting with" msgstr "" -#: builtins.c:1307 builtins.c:1311 +#: builtins.c:1312 builtins.c:1316 msgid "\tzero) is at the top." msgstr "" -#: builtins.c:1309 +#: builtins.c:1314 msgid "-N\tRotates the stack so that the Nth directory (counting" msgstr "" -#: builtins.c:1310 +#: builtins.c:1315 msgid "\tfrom the right of the list shown by `dirs', starting with" msgstr "" -#: builtins.c:1313 +#: builtins.c:1318 msgid "-n\tsuppress the normal change of directory when adding directories" msgstr "" -#: builtins.c:1314 +#: builtins.c:1319 msgid "\tto the stack, so only the stack is manipulated." msgstr "" -#: builtins.c:1316 +#: builtins.c:1321 msgid "dir\tadds DIR to the directory stack at the top, making it the" msgstr "" -#: builtins.c:1317 +#: builtins.c:1322 msgid "\tnew current working directory." msgstr "" -#: builtins.c:1331 +#: builtins.c:1336 msgid "+N\tremoves the Nth entry counting from the left of the list" msgstr "" -#: builtins.c:1332 +#: builtins.c:1337 msgid "\tshown by `dirs', starting with zero. For example: `popd +0'" msgstr "" -#: builtins.c:1333 +#: builtins.c:1338 msgid "\tremoves the first directory, `popd +1' the second." msgstr "" -#: builtins.c:1335 +#: builtins.c:1340 msgid "-N\tremoves the Nth entry counting from the right of the list" msgstr "" -#: builtins.c:1336 +#: builtins.c:1341 msgid "\tshown by `dirs', starting with zero. For example: `popd -0'" msgstr "" -#: builtins.c:1337 +#: builtins.c:1342 msgid "\tremoves the last directory, `popd -1' the next to last." msgstr "" -#: builtins.c:1339 +#: builtins.c:1344 msgid "-n\tsuppress the normal change of directory when removing directories" msgstr "" -#: builtins.c:1340 +#: builtins.c:1345 msgid "\tfrom the stack, so only the stack is manipulated." msgstr "" -#: builtins.c:1362 +#: builtins.c:1367 msgid "+N\tdisplays the Nth entry counting from the left of the list shown by" msgstr "" -#: builtins.c:1363 builtins.c:1366 +#: builtins.c:1368 builtins.c:1371 msgid "\tdirs when invoked without options, starting with zero." msgstr "" -#: builtins.c:1365 +#: builtins.c:1370 msgid "-N\tdisplays the Nth entry counting from the right of the list shown by" msgstr "" -#: builtins.c:1373 +#: builtins.c:1378 msgid "Toggle the values of variables controlling optional behavior." msgstr "" -#: builtins.c:1374 +#: builtins.c:1379 msgid "The -s flag means to enable (set) each OPTNAME; the -u flag" msgstr "" -#: builtins.c:1375 +#: builtins.c:1380 msgid "unsets each OPTNAME. The -q flag suppresses output; the exit" msgstr "" -#: builtins.c:1376 +#: builtins.c:1381 msgid "status indicates whether each OPTNAME is set or unset. The -o" msgstr "" -#: builtins.c:1377 +#: builtins.c:1382 msgid "option restricts the OPTNAMEs to those defined for use with" msgstr "" -#: builtins.c:1378 +#: builtins.c:1383 msgid "`set -o'. With no options, or with the -p option, a list of all" msgstr "" -#: builtins.c:1379 +#: builtins.c:1384 msgid "settable options is displayed, with an indication of whether or" msgstr "" -#: builtins.c:1380 +#: builtins.c:1385 msgid "not each is set." msgstr "" -#: builtins.c:1386 +#: builtins.c:1391 msgid "printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT" msgstr "" -#: builtins.c:1387 +#: builtins.c:1392 msgid "is a character string which contains three types of objects: plain" msgstr "" -#: builtins.c:1388 +#: builtins.c:1393 msgid "" "characters, which are simply copied to standard output, character escape" msgstr "" -#: builtins.c:1389 +#: builtins.c:1394 msgid "sequences which are converted and copied to the standard output, and" msgstr "" -#: builtins.c:1390 +#: builtins.c:1395 msgid "" "format specifications, each of which causes printing of the next successive" msgstr "" -#: builtins.c:1391 +#: builtins.c:1396 msgid "argument. In addition to the standard printf(1) formats, %b means to" msgstr "" -#: builtins.c:1392 +#: builtins.c:1397 msgid "expand backslash escape sequences in the corresponding argument, and %q" msgstr "" -#: builtins.c:1393 +#: builtins.c:1398 msgid "means to quote the argument in a way that can be reused as shell input." msgstr "" -#: builtins.c:1400 +#: builtins.c:1405 msgid "For each NAME, specify how arguments are to be completed." msgstr "" -#: builtins.c:1401 +#: builtins.c:1406 msgid "If the -p option is supplied, or if no options are supplied, existing" msgstr "" -#: builtins.c:1402 +#: builtins.c:1407 msgid "completion specifications are printed in a way that allows them to be" msgstr "" -#: builtins.c:1403 +#: builtins.c:1408 msgid "reused as input. The -r option removes a completion specification for" msgstr "" -#: builtins.c:1404 +#: builtins.c:1409 msgid "each NAME, or, if no NAMEs are supplied, all completion specifications." msgstr "" -#: builtins.c:1412 +#: builtins.c:1417 msgid "Display the possible completions depending on the options. Intended" msgstr "" -#: builtins.c:1413 +#: builtins.c:1418 msgid "" "to be used from within a shell function generating possible completions." msgstr "" -#: builtins.c:1414 +#: builtins.c:1419 msgid "If the optional WORD argument is supplied, matches against WORD are" msgstr "" -#: builtins.c:1415 +#: builtins.c:1420 msgid "generated." msgstr "" diff --git a/po/en@boldquot.gmo b/po/en@boldquot.gmo index 6a9c77ba25ca19e810fecf4cbdf2859e979a677f..6382b17df61be3a6c2ea17233bc72eed46f75bab 100644 GIT binary patch delta 20967 zc-m#02b@h;_xJBUM~QB9i59(=#Hgc1i4dYj?={-!jCL8l*D>noj84WFb@b7Kh^SFR zv=9VI5d7CZ-{pPhc^;pz?m1`gz1nY;eeS+Fvo7((u*Ckb1Zl4Oyg%+<`6r9dmo0(M zm*B0>SN;+Azqu*@6cl<(Xa=9JUUH!sh2|0}pX-$u8YHx)&_JPMg(elcTgSx-m9h0K zpHehB6NY$t3riolWam$2>l!Zn^e*32Fz>HR$ir<=_K%nNAh2|FeKm zp0^Y$`tl2HkHuO}*88V0c`Lz@FOSfMxUyA<&;sKBR%;p9%7Uks&(}IDzHHqUFtuKQ zuUh{IMq2+3ZS#rHFN9Xo>rkbum7Y-g2efS(7`H8jfNeVq%_0788>s`1D}4-Y7oapy zX)|2YZn$1YE4{4rEwufoLM0U2SI1KAr|JFkN?!@B=<{{3islmkcW5aestO%R_;omp z&pW&kDvNbY#e|L}Sh!v{zV6hGd7UB|*XbStbk2q%oxia0 zFNve`5KPiJM(Hb1+r=i9%tCwPt1gpZ++`c%y4;3QSMjUwOQ9XWOxN{#|3|?1oyATa zp_XA~p)-U^Zusu3jenWY&7!`rP|HyK*{v%+?-t2~ZfAt%^ZB}`Mu6^Rz)1Hl#DDks zV5R#}7W#iI?74!4dfq|OUYQ8LUac@? zuW&T&b(*m2^_*}FPK$uSHOK?O18_m`XyQKDhOGcM_&lx*e&&a9?{YBg-JL|zdkOK| zd#^tK3(5QBLx4W52**Bi$o+lxGr!MUFw?gL7V6s&U-uo0Vtx0bNZ)tN@8>VWjeZ@K zMqs*rmq@++KO#T$&#p93X>AzyZ%6p{kDy5PzYoX;SWC#50j0slfYAs(;3W44Itc6^ zSeL{xFce=7T#u#$FC)mHRNNm_36l-#NmvcquJkP?9bAnC2e*a6;5p12e3R>tl#CB) z4yZ$xdHKWd3)zk4A@4{iL&_k)kfA~)REBIN_Ye6IUk~{W%M6wD>`Njv3)OIFUcFyN z={HI{0psx0C^Ebf>ke;CH5_ii=@-)tpN3?^*O7RJAA{lWt9t#OYBeG)<3{9$ z!H6$#(TJvcJpoNeL}2<6TlM}81Rn8{b^K{?fj^gxe=(`Q0v7PM(xPA`v(3R07WD5@ zdP>LLL@@t92sARem&<)43xfWUwHZIMr`{il<|CJZm61De<;b6H{M&&q@X4seOdOSw z38Mk@yKu#*E8Gt?SRhoRCp3^$9a@`lq0RlEHgpsw z3XMj>(4X*i=pQf|?UKnx2ap#=Hx?=dX7n_2{^+0S3&x}-+{V-<1&^7{_%UZe|JbC2 z?b!N^AM2k+SdBeSrW%)qj5n@6(J*eVUSEce&&ERIJ0Q^bbub+N2kT5IMKn$DlLsd3 z#F7)Pk$@(=VBW+)*7r{gA;V4FLvJ_nF@j9gGC8RXHDS^q1eg>!q?)ObqNv3M9p1MP?|AyhTa%eowPt}_i$MfkQ zky@wM#zoUd3V%csHFAq#0V7rE%U<{D7}Tt=H<8XFA~k` z1EYD`Sj>A3ogc)6`6FOB{|LTYkcfpBR7Il&;~Br;1QuJEoD8?HKI0a41MLepp}@ii zj9Zl7#=i_$)Dzz=+R8$U9y4)qG2(S`KfMkGbc^HgVMGG*LPRx+OhjwOMXV#!Mf`z) z5$~Z(zF_{6v4C~SA@%Xn6iORVMwf=u5iLDPbS!;>1(xMtp=Irqu4LY_dsuLJVeT*Q z3kH@)!_f9KcHD}J$@BhO8a{mR8S0u+@=N%hkVQLI3KvGzM!bu+W>sEU6{l0ZkpmE(RCanL0 z+`WD%;9EZ*)2+YB^@co3djPTxGT%t8-|z#9Y|6s;O${;qCe?h?1q9xl838x9v3W!M zzu8tLDWRJ;!+6U_SYS(DOthsw6SvG{;Vl=r-kODlx3l32n`(gfvL9z zvHRVoWp~?D1m3oiHhkMd1dX;O-AWkU0G~$B2Sm|F*<5b_2$ODaOf+ntf@QYvMDy); z7$1`ljbgfD@|ck@jENV=?J2 z7Z>fStkHV3&ezcTpJZwqYnr?EW6q@77*(_bCM2lh}`s_SDfEbCh1e1$%QK zz~1Wg^Lr;Te(xS!6YG*_Vlz^NV)Mf=wiKq0tpvl^F1RFi8SBMvB0t3Xb?36LBEH|( zhq}EloVeY$8ug1JlVX2R7j< z|AEK&{$L?msDsUr{GfKX2bZzX!DC9F(<2_rrnDx4AL^@g9zEZoSS)tv2J~ z;{R}n2VTGL@C49&c$LzlnEvnse0fAS4o4bbx+C+^@W^#65vN- z8(8XS9@ahj6`CKluXd`7|Br6a0e_*?o@Js{H^*RVa_5y6j- zX58^rnE3c@63vO62zH_)0-xv$h)>uA;Fpwo;w<5FGBaUzvV_vsq}-E}0nf>EG^HnX zOLg)kApD^U3jENRu>2u}X!v0d`Qen7>r=Vto=1>FJMn@o>5pCO_?m z(djreKa&Q*&Q!rNXL=FeXTo?}b|wx+XMUhq{g|3C{joM6{c!?q_>aeM<&W2O|9>_Y zz1-P$ygEHQpRL!~l`L@f6cYcG6b3)lA?$vdsrQ#F{SDWh%g^(3yXuVzv zlU}cnPp@~uCD#XI^6Ljc`Sl;s`1)ho^6Rg$%nfbrZWL$!jRAz~4ckqBBL2S-iD_;e zW`UbY5#(k@G``u4=QqQMhMT_-1-J4MEw>u+{MJN#dg~0D|Ee#eer-Xn|5ac6$MJ{`PGc-+qf_?vw=+cd98Jg9+~(MzcE#*57g>*l+DgK)+2#u-~*d zyqgZq?>44L-5q4(-#*ZKefI#8-%AV_?|lPKf~1bD+1d4 z?Qp^U1-ziRzmZyT{~E>UL1GkrP~OJBB$5Y>(cl4~@IBZ=v3T$VjUMJ93LZ8foF0aO z>WAm_{%>gbdwvA_{W}Eyy+0WFeLM4hKY|M$xw!gKEkDKLQ4_-E(L^+UbPnG>&V*$i z*MZUF**t%IfyDI3Cp`b7DFXZvfg*q0;Q5p62=b&Q7I+fDI!_erPyNZ5@U#x5d^#21 zJ)Mt9pI!n~Pv0=%StS@f8>RFh)~Z#4gRCj$O!1@em|Zz~|#+lf4Qdy?>Zmjv{_%R*{>R|pN? zeF@`tlkwrZAE*iMo|ACiXQrilUz4i(ejpvv`%OgG``iNS4|#^>=_#(q2ku zdA>49w|lA6Bz^3aUz02=nj~w&^JHDT3~7=@z$h8paFgs23MJ3)q245Khb5Bt^T2G9 z^Qy)qKj@`m<4fGNiyNXkgBoSKw7&^YCB z1WtL=OJpWhY8a==g3D4B$7QKndwIm9n&E-mZ&GdaKA2Sd0ZFQJXp-uYhi;QPKlf9A z1LM?Py@tc2R&b@BtMroB9h-oUy>{CK6hpv(3VL0ac>yi;+J5UM{htY#0Ehy@kT~E3 z0tH;x1)jk;jRP3dr18Sar1=b#r|HJLG{m<_GX|`rIpKwyNgIHv(^g}C+QEP@t=%d4 ztH}o|d1IeRmsM#$T#@cLVVCYTG<|9>ADHxc5h#72mwHY5>YzS-H?L(g>9-+3`kP*} zX)@&Fd4~R8vuZNLVzCVOZ2ZfEj0G@x#(rKRF&Q`G%Z%p@MWgM zU?bCCxGHmDFp{~U(m_O1=7oBF9s04OG_Q?+`=OTJ=mq1CXCdLo2fbdc zmC~L{XDW@xHJ|XEu*njjG*D?XrNh0HY_cq4|8KH9bF_eAj#)6w zv7H5TSPV4tnNO=KT?}YH{o8A$OwPi%DrXHC=j@FIb1orK<-Fy!b|zPLu$8L|_x-u% zfzDhPyf2AO?xbFEF}a(1W!B`L&xG99sSSBjf!;hp_&m=r#^+h#^$RA?9R$dm9E{{G zPyFZY30CqhgkRpXo~!*PUqUp^7svwnLKv8D8I1E?MAG~pah<;g4D%0Sq5L}#H2)*Q zuRsYbSzr*+QD75cSKu7sSb!>N3g+egpDC!mF4%#%FSy(*x29k;rZ0FF#)UqHVWHY2 zl0sTL3N6;>7ZAK~Vgx8$fp9F`pWI(~Df0_o12aV|IQ?RxBAV=kQKCJ*EHN2POY8*AC7y8qGt01%&}Kx{XPcD1#G;=EvEJuRS^x7X zHvUDU&o6PKWEv)vYz?YQt|Eby+=u3Y4%dM}2oUJ^notuMP3{l;8D9rJz%r$hcrP4H zsT@?pQU&#XkkW>J8i7*X@O`PN__owiQf#SM;=I&p%514$b>eGi=>RNKIzQ`_u8$z4 z`%~pgPb5l8uU2{r*OYz%E#prL8q4HBlQMj3ZOZhb>XjLb>B>YPSeac2ROS*4%RJ(` zY$}RX*<6e(TM`Ck8-SIvUG;h%ik97kMg3(D=z}*%TrPlx$`!>0Ve5U6~9QhE6rpuc<VrjSUVbkcmsekwf6Br^ zsc}hAF1`Mo@j*3U7}N@ZgZT2=1Wl*T2dzVZAii`qK^JgEkS$tSCH^a9#R3(|E3Hqi zuF!>n6$X;=DlEoA6|Ny*h1dAHVg?vhq&+tk%aRu=4ksa1+)k8K{FfH2QW>JHlC8FW z$!wK&GojKe&|mp8;Jbf{7WLJ%E?AkEg=c0S{8c3YOP>UZ6g`3+EaSF>YpM=^&%9n>OHVf^%w-G z{x_+%23s*xBN)atHj;>H{Doz{tZd_7CVn}N317ys@RzT!Kux}UHZ=zzNX=-T*Zha; zuS&!4t08Fo)jq0TtwcPp#SX~Snv9ET9l{m0<i<`~8pAxOPJpsyzqO)V>VkuhW8w zuNyMqYmRD~uQxOA>wV0#yLUUUPIUyR<7a%G1Aw(IU&WfbA1iH*P8y<&Iqf9K=sI}6ijBoTS3>ydHy2b-pw{a8-HU69N z-zs>$Bc7Qg{=YrIz;CaBcJGX*Xwak?1DnhPj7_fLyQW20sOfjiYr39rZTdv7-vPR2 zU*N)KBWY@z?We{xyUV!dHp)^<{5Kzngw4k*J;4GkQh?SLwGpI6n9?hh(U#fih+5Vn zI$93G0xct1r{x1^tHR7{6^sR2ZPWWUfA|Fitt-H=^#lgCjw8XeNk&a*qy2lE8kEmA zGq6CL!&s_qA{K629SgSQ?5AmK*QxI_?NXz0yY>j!ZZ#>mo!9?M5owzCGP7Vrms%zt4 zGGC_|__)(?1n8U@pLTAEW}UkO#?D*Gl$~Fb)4O~QXuH&B)7oX8UO#|#Elw5fDy}i% zLT9jkxBQIn*4>ZkyV)0x&4s>3;_i)+u=^SkNB0Nbcf_Xq-&DUI^{_yXAy}w~6|9xe zXSlHEHwfNy4h(x*%(U~FURkj~FFy+P@}ES~;B-t3Zb8`$UP@I9-iD^ZKLEPmhqTqb z(*wHRUsBb24+iDE=P|B#EH3E%fCi;cM!M@hm9cc6u2{z3X9tZ$pR;Jt=LI0^+W<-X z+SEKv=uc$0e(l&)_FITW`tjDx^sjvaS%;5WfGvG9u z3`_@ufz|2R2J+>T890%QHSjzO4a%joqtaDaZqQv4&)`B>Y;adhJb0YaGekv5CO{lw zqoI<-f5>X@b+`$+3+h9jfPo9`$$bi`Ez^Jk$=x9^_3_kVsJ;J;168JUa3GLqvmX5=WqG;$wc z8~GS8jY>gL8WjlWMzvHro+ughz0#|IGc=LX!nAy$4Q%|2Mxp)CER+MnCiEilKRN|1 z*Jyo-G`cLAYjhV(KYAi)9<3XV(eJR_nCkd^%p|}%<{Y3Ln*$e&Z34fsowQDm4W~^W zdyR$1r9ks>pYeQLZ%jFEJJB)j3K$um5(|vydpi(2zOqg;FL8s>6#lzJ0n0#tDjHX^k z^JxXCiqo25nQ7w)?`a!(TQ==Fe5T#;ik06?FG<`^=TL~5zJZo&x(&0IJ~P9?WHZ{( z%gtEKtJ4|h$!s%jGJj?g1f5xf_?|hDu$y^G?_Y<``V^PW>ZtX9);bu@(l&h7Ss2bv z3YccsWa4anw=?@k1f7#vX*2H6nU6*0{EDl>3J}g=RS-0+E}#w@1V8UMpI;UZTLih57a&{EhO)U}4FWCrhZhtJ%aXtrc4FMZCB*l_ zdqmTsj{x(cA~ZIOw4++o#m2u(ShN9?EqVc6%mG5PI5(MZaRq$7Sl?x5TCLVO-!JEp-x%V6?|t$;jYKNg6%Mq3{7&<|=O-XhVG!Yr_)4+|~{CDSe8w3=D+ z0}CuogCI-!&4*dqj^|4k6Aepm69vnPQ6-mYBeN_Tmo9sQrI!0EA;9wSH!HP+MY(*Tq+?A=gzp?<9S=k9ptn96H3l?1Y6vb90;r^<+2)4?Gb$f~bRlAXF zbvAsux+AG}^(v~=>T`f<^;O2LDS+f_f&t?i-Se&a6M-X3gYL)>1dE)`o-uL(AoR`+ zN|Z$&*Zu!mehz2Wrl(k}txk$v8;quFSK#Bdd(pr_k%M%6b>!9HJMF_UuOK1}R>+h5CHWVZ*Ht@qCvtc^E-f)3pvEeq)H>M{sZEQm( z+_;BYu<;oJY^sVyHjN`OZ90kNHh+Wwo9m*;=IQ+Y$80`>>9!=t0$b`L@fQ7tW6M!M zwKWN*+}aqdY;A{0w{9S%Zq;?Z&km#S+bLa6vHAWsjH7aT-w~Ur_BQ?nL{Z&9Wz=d+ z7xfU$x8=w5+XB&iTT3jpZ8eOy9l%xF?r8#&Y{@O zOju}VOTFHJqC21ZS#VcTz_M#7CfqfZg?61mu-%^^@ouY8XQ9Cew)+B6uqQpH-ct_~ z@0p23_MBz?Jukq<-YU%7tKXvS^&f)4-gD5{ENC9v2?=BMRc!171ly;s*f)p_w(kHL zZr{(O)_u3paNm0b+FunH?$>Wj_pe9b{nzyU-vMoh4>Ul+19J(l1DBa_FgZQlLC$uV zgWoCT+>kl=3yJ7ZF5>=B8w5Qx00j=kV2ML7QRJ|?;&4Z=AMl&Q96C3LcagCU|BFCJ z(i2ukIDTV}tOxZ+o*__N5DUk3p;*ODB5}p7Q+f#njwT{ZkCs7zqx?|89No$9f6Or# zUmVLw_#MlK50BM{!LgZWd~6$xkLjx#@BE*%RL5Ijf#dpJ((&EI{Rsy~Cv1wBbnfo) z{l_0SgU{#q3+R<>r;LEk5x^PQ)jBp*I&lEOm2I}uO707K-Flqwu;&2H7M&~Q)Ri5w zyOT>JW!W^<&lVq7`0U6Q&Xv;c2sX?U?)jZxb>Qm%l+F>q8PU`gvpM2xSC~1HP#lQ_ zvqm*Y^Ph7}XL-JmUs4+>Jf^1Jw^dd40w$gX909)5QsUpN)WwGD6Tc3Syzhtwj1&?_ zqQepGjQ!>!M4wCgG!j-uw0FccM!FpHO4dorfiz#!c#^%~=!M6pU_2p8Dl_S7d`_Nt zzOf0$0$Q-HjMncV%vTUR~ zGWB%qwGaNc)lXVw(?})>C|ujm3vyjGvnyrORm(WihM8EQL*#E@JOM4j?T$xq;z)QI zDNwGfb0njh)^-Y|@FiGTD{*H`Qc$Qo zJQ?ZJ9c!XBoab?aRgm>cB~=??8nDDm0Y{CnXmUH^EtxMkv)WSRp-fu#oW-((pS0x^2~;yEp~5h{7ZRt*2T+w zUE+b|j#7zXM^NiXLUAM+xwcfd&}UXK(Zmr8IA3uv&Gc4*r28?lzAG)au{aS6n&)yo zSmze7@h`dB*e0Qaa@`+KfS+`s>m0K-)(z5fxspn~!)8`s5yU%)_5lNu>0HTpj+oiW z$!TXJLOFvtJ?GBhIKHuO$w!L)&0vm1dW$tt#*#qXd3sNhjI&EW*O1Sz^t0>{jeyOF zzg+>FBL&BiLgUm|K_Yc68?KV79f=M{KQr-XAN7 zO`~=fE7G|VD$Z&S6FTHW3EZEX{djOxYXMqLTjubHG z8K-4UUimB;)Dc&jlRDR4OE?>eAa}anvsRMOcKx;>2yl$_?T)rbuHA}Dg>nR?u9(e{ zLS#PaQiF?Psm=H@C0jy(thl;vzY7Voywm)po&#j!z@_DaX;1}g#L7B|@zpUP{ zZz?3DT#0WZmCCV;OV8#i$b1rZ&WA>Fir&*mu)hy5QZ*g>D*vv`v0>Lw$4YcK)?$z3 zehL*Lmv?H?=j0auJ7Q8dWjs^c7YH_A+j84Y?@7vaY*lnQ7w*RBLiW|X)y`%1G%$`}$CXetQt6DAc4Lc9xPF#K*0ssU?i2jde!G=*wn$|J7>>la zV@szsp9PxiV2t?DScxTv8;N6Av~lfDCORH-%T)FX#%4gtmX7Uo-^F__Y2LMa1-sX% z_#ytKAh`+4-AZ@rF3}0vRDF1f+A$xC`j$3~j11p-pnHmWuYUJ(B~cHuGnuE%FHne=k5lvra+sML1Hn$nhD z+cpVM-Q6mXrcht|c*V!Q`LG?Zgr|{lj&xE+a)UkjY|5)}76(Ih4ZncP*uA~%`y2tF zYZHjXzmZnU*uG6`f@2%d!5>T^|8@GW&PUd8Y`6+m9M#^n-+bGRha@6L`+m1Phta*y zYpwqm#9PJoY+vd_tGNZ98;^>}JGnI5)+^g(NC> z6TgacY%3i~7K(TU%I!u`4lbECvL*Mw62x+iFKNbZkc~dE5~T z8OaC69;ZL00)BAUZT^=#-aXq}jP{Q9`iuqO;&_7kC0{!gkYv~PE%`WZE) zYd4cN1f`X7q)Bx@>G{XvfH{x{93}*7SFNuq?g>cFQO*f{%>nM|9_!U zspLLuCfj=1xc-fwX?V{UDg#?wY{IdxT4hmJDx%S>=?ci4d^+B?;C3?_Z_nu30@ftn z{=?V>Y}YfDUn!Y*8xO~Buk60yv|dZ7Ix37~!|YPLg-h@gJKr>Z9pMwr9WlG}n~qm^ zyEfH-_2FehUhgYWKHDvq%?koTM|uLcu?na!4%}}19K&bd?dfY2`_mm`E2rH(S)kcs zG>BhCy7q4tom)l6+x%cRH-4KK&L{($&uv+he%+CRWF!MR;$L%5pG!$~M)R8xPf+_c zO{{lt!ROerYvW&cHjZd##C5K8%&ycBR}!4DuWsyK!G@u2X#cSBFS}ny`Z}Y&@_pDW zh_+5hJQvuu>8p5Hu{&g`8BPGdbo!q^Hd>^!a_xph-04craE|}asQ>SOM;0?Py>|~j zN4gsOBNIo>W$X@E5|vS~x;ARo>N82tu2{zCmdi->bnQzAv7BoKwi(d^Q{3fB<6@R8 zL)plhhsxhbJ$Ixva_nogF#d-Ej>Ulb-c77R+E*#Is%ckbqonM-O z*{#PVnLV=kr{O&_n}xH>cFhnqwZ;1qvzKnn7_+pFd7X6jwRvAeb(%jaWq7f!reajr z$VSPc+->un@N$Dq@~8vb|4cLc`SD{>?@vUy;SsY;rKlcfhNlc~zuer2`ufJoL{Wiv zt2r^NHk#y4)DI6s6GlyY+CO1b^}m`W3C|E`(nY;|pC(yM_GBiv8(t`t$)D$&Mn$Uj z?bNRScfq}iRBPA2Q@I?U6)#@0Nb$1rUyc%`%LU4ZlHuQ_GzViEq%x;H#frODr^qrN zgsz!vcBlDIVzM?jr&Gj;)S<~|yW3{QOdMdQI58sju5=>uxbV2Crta+bCsxF~nP$?u zF(Q1)R52oW>5pay-c23zdYx(NNq!;m>}gMD#njnuN+pbm+ig-LjSh$rYOFElF_K6^BxH~nUm<3K1QGK*Q$)l}%=4^N zQDafF(iScMwcgK8oA&p=|NnjN@80LRd7jhn*?X_O*V=2^>m29pgqi8itV!p%k>jJ8 zmi(P{wX9DC=M}Q7TxsOKj^+Ft(8jV#3l0>_t>c1u1QP@^3!V_HEqFz+nqaQBmX%Sk zd0Xf@2o@C#6s#^7BUnN3SX<|OhxJBoYD!1ic9xY@uzouTTeoAuaqU=Ww_q*7OM+hr zX7`Xwu$kZ|g53naRDnI1w^p!<;4Q%#Dp-5Vswnt%d*+X5ul)|oN@@?mv-V6Z*#U{W zcR-*>!EA!lJD`Cj9oWHk!Ayb=J0QSo!E%BbI$BmG!5SUWsJ~zi!LbJ81@j876Rait ztwVBCLeSQUfl{4d>?T-Hu#KRbV35I0f;k0$7R(};zB2;m?o7L6XXaHi?RK3pm8W1; zHAQCxUMlENiIU6$$2-ILd%?njk2<57OkFHXT*7M5g^5kOV6yIAPRf5d~U-rb7 zb$a0&LA@~5@?QAJNrTS?-34=c((Y(*sKJE>4;Z}f3ExbP-bh$W&@MQ3KlkJwqTy$@j+?}N?H z3VtSd*9ZEveOS1WV0pplKG5&(gXv!NLDjCl*t(uC^M?CEx69Yb&td)S%TDt6kw{wk zp^?c3Py6Au+59alpEC5vR6YG+Ji#BjZT>KNE7(}@i@x~G$iDP1?~60u5&T;D^^;tq z@$Vxy4W(m6KPEg9EUOFyL~6Bt05%^Upc5=>nP5r5djSZLr9VDWyFc+C*dJe+*B^%G z`(x|0foQgRAoGU^R@3-j5=dsc5{RT3f@n7mf?-4u3vCZV&?iBJU*!R)GGG9LFC9SG z9UVY8J{W+21qPA_nhnGRod%MK;shN9)ENe1%fkaCZVBjkymdtR@*eFQ^*LH-z=74Pkx%AwO}DVM23<3mk-0%JBFc|tAZH>Uku|^d}sQz3W;L2%@B)!I%-4X1l>NBXGuhBiKkz zhjU$rRmH)n*UW+Hyc|X{2LjD^z;KgkUvzL-Juq}{95Bc;5)+jhNxS<<1C=95G|dF_YZOGX;8cT43|(R*f}M&)pj(lo@(+=C zzkL++?xW~$KMIWw5-gzcKV=k*R~y1(qcF)e(|&9wd>948+@le={AdJgGMf1I8jS!0 zN3-74(U{^J)Bo*g6FmkqMv0a+SKFf?tPq9Qc8Een6QeN6$|!7oAPPoTqR3=FMv)gv zkCC*j0*oQ&uO35PaBmFZW*jsUl(v-46h ztmE*HK}8#4VEiBk=O`7+gu1afV^k~?XT&n`QY`cG&p-f=8PLy~fzw`_fo7i>tTK~| zDtsn_?gt%Knpt!-nZ-^g&7xX8J`1P3Jd2&apM@Ze;$YN1j{doE%)1?jfS=7qpx(2| zoXbr6>TKqH8ZTzn@pu(X?7u0Vgj_C?U8Sxg3PD(FxNyDUc1`HNZL=3>0I&=LgkGq`>U z$Lh-^R7eGv5-rV^qJg1HS!b8Q4@;Tnz6=eHTSot>W%xq2<)VLO*mXIC@ykg#H|sC!Wp%Ocs_30f2`rqX|xsrLe^r!?Q1c` z>$Pme&9RP@IC>om?^=fd)_QE)U_A@8U5``FUJw1P_2l&Y8%ze=VB*=d4;sw$4bIk9 zu$4_R=r?R+=SD;Saw9gcu?faun_#$Y6B54PL?WrbS;{8Okegw=ax)q@v>6RO-^{#< z2`oG)0ReU<(C@Ovg!vXsG--=-p2NDdg|Nw$$b`0u>@Yr&WA%I@r{0f=nB;vTzL9M! z&u|sCQvJ5y3jL6+>^OQW-oJ7y^vPSX`OU2yZZ1jcYhwSxNvOV75{bu=#33;`3CWix zQLjHtVyD@+A!wUz*m(9foa*p49zxS?N5vl7iIPd%(bTr>XyDFv=u7O7jcNS*?!W|& z9WdOzgRpYlNs6tyliDtDCjvz5G*3J`S?I07TD!nuyD-7-U1-*2HzupMn|Alz_|hCf zhx2iIHyS9n2L=NL(`%UQLFGI4Ajru*2$*&+8fdYXcC5kg_F{^{`w*bvKI;An`;0H_ z!$dC0=7mMF=->IqA{mC&l2LWtWEl2I#w3f9O#(_bkLAgPTb=#*z<~Xn@3Zz3#yj@o z1IPDc$~*gwrVL%J113Wra3I;j1E}Q31K6spku!={CfqcZQ~ zFc^Ov2J4Tbi5JJAt8fCkuoGw^{sjHWC(uZ`lhBtx$#X!!NoOW>SaVOJ;`=Af!{R9j zOPxaHeNN%+%TFQb{Zs7V^(nl%`e{>0wap}~P?pkHuCeM{{B z;~Dch?Fvt+I_XE8y(bLM&e9A)^BbI{E+c;y^|7dX!gjPB<# zNz8fpd?#35gwF#6#Fr(DsC#Bq;{m~8GvO1AGWV(S+d z(O~sU)PkXxcqO~;5|406mzaO^k~#kiehY(M-x8P0zGVlA27mh&Th_YFc;sam##|;< zueuDwTbB`_@D=8HU%}~CUNL8c!HVC}Kj1sjzp7;Wci76hO1$U2iloJ_;`J@BnrFJJ zEF5wbhFeYh)m2h&jqlk=)c5$v(eF)Vbq&T1uOV>MHRkQU=77+;P8hmfr#SSzPF=9| zIs$!n9cTRUIy)?W17GNSgYhjl$dt)9(A0$+la z886}{g~H~W=sF2#;VxhoWESzwQ2bOmR)7>TmesY^kS@t$Q(DOD< z+4nZ=DUP* z!Mg}t?=G6@dYAc&?>Yr>SR3xL^;IG_#RQQ=N=0`xmsL3-^6Fwu{wmrkke=+^(pQC~1&)LzW=LmT6If7q)j_>4qVN&`FRNve!y>NV&iXU;Hl#`Z1K(v6nR59_Ig9*GV~3{X^d&_ctaSTdxMFd zzTxyN@RmIBRED4P!p0%8k@6L ztR$$%aZf=lz2XEbYy6*<8;t^6TAQ<2tRkqk?O|||pgPeuK`lsL32Hvbn+`$Cr$f*I z>CnW6bZq2YIs`13-sY?$Jkvw(E2xQVwV*=@_NTW|*Jl7*WI%N>84&1P1{VHZP*1hO z8QD=igZ(qIfw_VjwxYz*-x---ke~! zoG@IJ6M?_Yi9l}!^*GL$3k?*=#Re)1YQl5$&V>Mhxv=G^T-b7>peCBzx$yoE26N=b zd5Y&|M|E@K^+Qbm;@mLaA*cn*@!V|afx*&wY|d&sKroBOe`FpcoJxnaC=U}inD)s$ zsQPLioa=rb1pYKH0#(e*{04bp?2#8I_0CJUMdii&cjaZ?{=7K(w|UifB>q0lXLFu@ zUinb@tb8nRJReT^lb~k0()n#xd$pOtL-{dDfdYhM3xmB2kS8JvAka8LP0euyh=N^$ zTJoj+R0PoYuPirOy$=2qg2RGZ{bnnO%4!y*e`rBeeyAV`##RVhmK4+|>R1T6NI|WD zP87nFxeMbPO$uYG5ry%Q<$?~qIaZkPdSV7D+CdM45eDZO+-HaJT{{Bi{LJPoCOdq_ zc(}p22KO4gV=!G2OjD+a#J_fU6=7hU!LmT5(jGw*)HfT>`rGC17~B z1Ps%cWWg4Koi&UNJ}ZgSHZ5gymR=)DVXE1s;Je>Z3KhO6MdqsVxy@M%4*VSF+WtBH zKYfmKmMU#?{_AzO(i}Q#O5>c5N<&|<3}=RC8Jst|3^qSq2Kv{6T2E9jivW%uWpR=z zWr_d2WpS1#Wnoyf9JcOQj-8Gx#{wtHLHBbx7=K^HZUw?` zbOom-9oDf5gojm;uq$4XaBNf&2_q_!2Ub?Zc8L{<`&Sh?hSOC-^+hYeIG_>?=T{<+ zoU262eP+f>RYvg6l~n+Vzp0gp$HSF53tm=cfeKY{8m}s7XiOEnHmM3bdscR-Pke`K!(okuO&(X|lZoS+t|>1vbvOVq~HwQ5WJt7^JRhrZzq zuFbJHtTrl(Hn_Ytb-}LM*#3vw*!E>@Qf#(5#JRl=$8FU*%xhuLs}7nOQipYx)-`62belu9OE;jngV7IzBV{lz|vbZh_@2ktHceyT_dtMj8GS@?(()D0i*R(zB zaae`bgKn&&9t@V%!&!Ei_D}WLsZ}49eo~+Quj?bQSA7;5SsxQjua8RC)<**;>XT^h z2x?iM#f|k!8LZ_7ouj22lJ#*zq9JbN^4V^9|8_Isd(;2ajh$z8XU8SnVeIY>U2k_x z5@yL^ZiF8Sg}6q9I!o+U*R^Zeq^=>rIfTSW_7KHD#fV zO|ku(rsRPt%}`~>W+b4%X4Hn?G=ss1W@I?`=G1l}%@M@WoWpBRb2OBp1p+h`bZDxL zZov+dTfq233kaKhO+p&~H5xkqHT`*8lA=4cgu$eiXySNF#?!SzpvJ8jpJ>|0TERGT zYc$xVwZy-kezRLcaJ4llwqP4<)xHfT@oIwr3)`^sdu>>#L|Zh}uPuz1x5YQ^wT1p& zTb$9Y9rN0>V_r-<=3Q>*;P}n%!Gv}mcx}7~CRu0jxd$q&+8#k22KO6G(}A5f=|HhM zt^-avqXRqL*#SXZI>IMMNBTQCIx=x#Mngg8+)U|$=>vz_r@1;`M|K34|EHBNH}+VI3qszAV{G;oTh$#(7?PtXzGTb z^Zj2zUsUMj%Y+5K?DTjJR#y#NHL z*55n<^+$8#`s0+R`a_>Pkd)pk(8l}!{((HzZVAMj(*%Jnf^fE2!8m!IUl#;}h6AA= zHxLtC5$vK12P5#nU<5o6Odd%SVsrlE^(P^miUA>}+z)Y}qEph*U85irTlNbz6;3ES z_%#&9b;4|xr}|15nz$Xt&dLvhK70`K_YC4xbq(j#%M;FyD}>{OUx!muMmWOB*=xc% z^}Y|M8h#g!_uC_w@KppR85lt&voL}({AdKKe;$FR>JP>zIuB+;!v^DgR|g~T$3tvZ zw3g{Z$bgQALwNWsIusQR7;19$P;8ZX7^-SCjQ(N6aKgRA*qJpP6XYF^raBB~L-U5i z;M8zRyL2NEAo~asTK5sobsW}OZmh=!%Q;YCpm{Zu;6QcH9jN-_kzmJ>M9ZR)c=b;s zF=hEkoAWh$U?fox9*Iv(h(y5eBguT9jWX~5LPs&MW0ZLi8I1tNN3*lOqp|I((b)9a zXcCZX6wZ}13Wi0ZP<5FocHT3Jvmic-^;SfYHy%Y1ZPmw!4`}@Rk1>zSV~FFuW3c6! zF`V}g#-N!GhOYitcIrJA!Iq7so_{nJU#UNi@qXh-L~F;9aE^~-Lm9^7ON|8`>U3e_ zai*E$Ikk3=XQ8_WvrZsvzBK4P0q2Z1xMc#h;nfLv^*e**CUS`NoJc;HIg!$A*+c|L zo+$CJne5p_RG)nk-dueWI~zL*)t#Dz&2vn~S-VcgDOXL#1V2p1xt>gham^{1wBHn} z>P=Hv|JD?IC2cgCXcp~&aC|hXJsph=Uq<6JC8na0h^b6iIF;vs>r-Kvc^WG2G>w!T zJ`K9~X{h}2G!jwn=?L0sI;QM19j9LDm~M*9=}49(hK1Y25MJ|R2*X5!Ph+4j8HEF1bGmazS72GQa@0~2hRfu=&g2b7 z##xx8-Ygi6orNaO&*C_>#i6P4am0W7I9|Jrjf2tTI1agMafEfA**3oa@t94`HbbzR zX2RL1FkL*gV54|m$qtVv^No*ZflcuU`ZONRRhnZSt>(}_*5I)@m^kxX#@o(?pVwSd z{|}xE!_9MXw&!!rDK-zMikBV{Vfh8- z@LB-BaoTo%|F;0IPQQ?yv|nicg<~NqySfm@xfUT{`$a4?XA$$RFCq*}FUEwe7jp(I zT#P{b7n69-EM|WGCHO*5L5C8oUP7wex&&1nUBY4X@lu=Rr;;zl>Ef1h?EbJ60V^)! z&BwrHWW4#ypu4<`d{B5fVOM`S-tM!U3TgCm1X;LT;$J7+U5*ONt^gaZz`MJxAXSE~ zzz0^Xz$p_}z~J=?oG$lD!mrLsY}`{YLJzZ*nBd_`y#BY9Xe8Gv%KRd$%=^D;tB}Zh z6$`9h#ezFlkr}V8LNgz&W`Sm_5v1d4Dx>(-j9*$!bQD-aRQRqzV>8xpy53s@UEQ^q zI?AyYl^tD+AlcSot9t8tMxeHlJz`JKU#0f>zs)?H4%+N=QinBaGnsAqW^8g}GdcUkW)7Rr5=hC-6WFOE0h`As zu!DUG_=vTI!=}m>HsrsBD4Df|aQkixPM#-`DET~5=S%!WB(l?OiAeY+5y?N=N@o0O zE8*g~6_c#piVwWp%3<@tj8{q`felR}V_r$(49T+1Jg96#GfTFS!0vA|^?$ML2+(&s zJ6gLPf=AmCq|^>H(RT-u&)7l#ogFw^@tvr2;7%9~--!?H+eseCw2Ks6ei!pb?1JAu zL5K67&3AKJx$j1RNJ0JA>*U=y)v?`pYnnZ%vgsc4l)J|~iGMvlpYJ76WZlOCRrg_vR{N;yyX?c;6ZawL`+YcHon+dhlbN?a z*<{3IUcZ;#&uJL7pQ3a2el+&ueoRsMfPx{BinstGv)qgh8-;LZ^ymN;tu zVeu%8!VK;?iU!ghL(s2}A<(2_2zdDzCdqf4sPZ~aCLDB}6g=iQ8+9x`ZeFPz$Cf2d z;MHHBKw`%Ua{G=GOn7wy0lzp&*bO}i{f3j&iZ@RZ&Y4bu4Ns9DhMzM3cy)?=U^{K& z`=30g*+J*iXd>=3JK1p>lcYUEA<^LsJL`6aOt#<*0wtXx%-)?rBVV7z`(w`{(2cXK zo8cUXTG?|Xv=&Zu=y!YUVAVO|_UbuGr>y4@q{?|z={S!w9XpRnuAe6?pPa{*c`m@H z;{|p;WIaz#!UDpD|-irTvA>ttA+snNcuCom=P~uTpWkV(v${@Nwu#!6$MJ zldHW<+9cRc&{J@|U>hSq8~yEgDq#i~+@wdYtofUa#hLM|(q8x%Plr`o8Ur=GrrPli zAs%2Ryt4R~XT6#9OzDZX#Q7I$oMC&sdlO!y;@5rEed3jsWRx}!WS?47wN)>iINVi&s_AY z7t87`_pjCAg!Yb0?75b?9oO^)x^yp>t`1tE8Tkgd@_CWv{NTm62p5`XHE3t`2hlhhTOy?^D4QuA;^HX7PH`@x2Czv@;3w{&Mw|z8+@N%>|d~ zX)k?e^xwMl5kl^p2z`ASD{Qs-gjsN(-f=FP~i1r7tPPqGoKg{?metMabA1&2L&l=#gXQ zKNKwB`llDmscqvcypb|6Sjz}O$(7b#7e1(7X&C$@c+cF2yYT68M^&Tl(&CHXwfc-} z7C)@jpNwab!8+2nN>JbIp0UtNEz6i zpD{ZB_6beLRKBSP^TJfV@XV~SM`-rxgP594u6HiZ{Ywrq3wxSH!c?7dKTNLDX0m2p zf4NU1w66rGYx>Y4OBa>CVAY^mXP@+?k*kxm>zVmyq&>;3f5r68Q2yggW4XSkko)gt z(kv|rH zcOr{SF#~$a78K$?%);5^KApLLt}j)!#FW1DF8sPlXh#fsE5Hp(l=CS z!v$B__(1X_!z4=jPimxS5|S&Iv=<6i)2uI5q}5W@s7Hz5Y$KgM@*Ot!kEQ>nS?r+n z?a)_*e05+=)Z;^+)?E1PG$o|lr)Wgzdl?~*$^BlPZ#Fbt`q!yy>&wkn)qtSZEq*S1 z&71PK%!Mzw^$}sJ{>zM3Z>nCohM2{pQXEbCCJ;@}HvJINd~m5pjP%de@74`nR~ughZ%wrU zcTL$Y`T?dqu*>~CP2GA>%Tt6EqD8On*v4n1dyRVDrdmKt{xH)&#>S5;ifaBgeP{J> z)cJZc>%nETksw&wn6YK518b}F7n62IwSS63{-G6?G_KkBqW6P72FU#cGu}nU^2_zJ z^!dwG(J;AS7Oo`i4X)1D+U#0uR_S}E!V8|V_*A)=+*dSAd#SU;S$yE?{43hF#kH05G$oWtz6TD zE>`os;CmI^tk=txn#pNO>HA7IY0e*h12z|KLD$Oi9R_4q$_tniD zd5p1YYKpb^lKZl>i%YwZjK7xq+H(I;U)l?Pqx|b?!6A+Lf>~UhKj3se9&|R0yG!3? z8IMx)$O4b#$|_fPBXA2B{S;X|Uu#n%!~|*U+nz`pzin_ev?WtT)j*B^Z88v)vK#3* z@Q*rgri?F^>x7J*GK(zJT20s7LF7A!;Fg6ZN%`daI4!pr-sKn_bovY+&fy3vN>z>$xxY-2}b09+Yc~ zp_wad9Mou&vENgY^*Mb6OmQ^*R7eKjOS`S$E%jJzM&szbG})!#-$Sco~+kjvtY`>rS>1Hgj#3{_ELM93B7d(sT}cR8^2LZ`TN|J zAIvyQa2cDU3CG4SLiz}UZ{_k6nyW6(A96VVlB6B0#fd%p`Vav#O?C_=&+28QbB?Pfheszan+MEIp|8M5LQYvPX_05h<4AAtekCQTXFje?m(lT25%E6%K#QJPdzRQnGndm(Kfv!It?-c%YpB8wk4 z^xta6llIP3^ZOXoS610?R3Fc5{4#fwS>zj; z7is41(x-KyjnorR-~PMs)6+77dG)x~CvCIVX1RasFpKCLHvKoNW@hk_VAp>$M2KUZ@K-DfubSA||FZ-AsfhpXYA zF4ZpI%KZhoe%3d8hQUz{MY-mhwoRSX%&BV@%%ndXvGFU=ms%Id6==q$8ocPjF99v* z&y9@#_0_o5S19_*#KrmHrj+cg7Y7Y&v_ww>CY4;DY z2L^@O`viprdfWXW@(K$M_6baA?crM^Ps7%39!>0j{<+z`f&zj9?Q!e7+T@UlS(`WE z^rYIE+&t~=nl^6f)}m*-){PqIqK!H=^{|(!_&Ey(_3!T~>$|mWtYbbAK3-v=KHhd& z$S1;IxCaNtwP|a6mGCAmCQJR)%lP{S1_cXc@4?Q6Li~IJ0_?h!=`bq`VW>zyD5#%L zNcp&|o;LS{W6M1^bGL#3~|m&SecOJlP`p*X`hr0^(r@@z; zgFOfQC75SONRXGmr*2m{#jZPiwpw6V|K2{qA+koxpir6M=NW4Ew1>!MJp=4so`E8o zJ;Ye)&uzz58f)8}Q26LO7l)^p-{17@8SG>C_752l;5pbSzDO1r^rx*uoZ}&30|o^6 ztI~t*{(USTUBhrh9GTbXp9`z8L};Jjzr+(2Wc5)`sZB?Dzq$!|Pwe^FVGkML+R{)&o@~8uDm7Ph&?zcEM=X+_J&OxH}z=u zrvXJt&gp+z>2LJ5!Eq(xZFdq9uP#el&uI`L^z|R)6Id3D3<&mDT`21S|Bz67P@n(M zND1w3HFIg;`7iqEiqPJi*#$*51Z zf=o{HC(M4{D?=T1Bc}aJyf$p)-oA0!e~D1fKA~cKpFuvsgX02s+VUr4ew!mx_9FfK zg;6=P=VHZ*B;`qCE907>bt{i@4T60_4N@|h@9GvmCavu_rqfNRpfMRsa7PE9v9LwkH1# zDJw}**8Y$G?R1qS>1u4||CUr0n}5@cq!NL)$*J>IQrrOBrJN1_<}OCZ?w+p@>Gj" msgstr "" -#: builtins/pushd.def:652 builtins.c:1351 +#: builtins/pushd.def:652 builtins.c:1350 msgid "Display the list of currently remembered directories. Directories" msgstr "Display the list of currently remembered directories. Directories" -#: builtins/pushd.def:653 builtins.c:1352 +#: builtins/pushd.def:653 builtins.c:1351 msgid "find their way onto the list with the `pushd' command; you can get" msgstr "" "find their way onto the list with the ‘pushd’ command; you can get" -#: builtins/pushd.def:654 builtins.c:1353 +#: builtins/pushd.def:654 builtins.c:1352 msgid "back up through the list with the `popd' command." msgstr "back up through the list with the ‘popd’ command." -#: builtins/pushd.def:656 builtins.c:1355 +#: builtins/pushd.def:656 builtins.c:1354 msgid "The -l flag specifies that `dirs' should not print shorthand versions" msgstr "" "The -l flag specifies that ‘dirs’ should not print shorthand versions" -#: builtins/pushd.def:657 builtins.c:1356 +#: builtins/pushd.def:657 builtins.c:1355 msgid "of directories which are relative to your home directory. This means" msgstr "of directories which are relative to your home directory. This means" -#: builtins/pushd.def:658 builtins.c:1357 +#: builtins/pushd.def:658 builtins.c:1356 msgid "that `~/bin' might be displayed as `/homes/bfox/bin'. The -v flag" msgstr "" "that ‘~/bin’ might be displayed as ‘/homes/bfox/bin’. The -v " "flag" -#: builtins/pushd.def:659 builtins.c:1358 +#: builtins/pushd.def:659 builtins.c:1357 msgid "causes `dirs' to print the directory stack with one entry per line," msgstr "" "causes ‘dirs’ to print the directory stack with one entry per line," -#: builtins/pushd.def:660 builtins.c:1359 +#: builtins/pushd.def:660 builtins.c:1358 msgid "prepending the directory name with its position in the stack. The -p" msgstr "prepending the directory name with its position in the stack. The -p" -#: builtins/pushd.def:661 builtins.c:1360 +#: builtins/pushd.def:661 builtins.c:1359 msgid "flag does the same thing, but the stack position is not prepended." msgstr "flag does the same thing, but the stack position is not prepended." -#: builtins/pushd.def:662 builtins.c:1361 +#: builtins/pushd.def:662 builtins.c:1360 msgid "The -c flag clears the directory stack by deleting all of the elements." msgstr "" "The -c flag clears the directory stack by deleting all of the elements." @@ -553,15 +548,15 @@ msgid "" msgstr "" "-N displays the Nth entry counting from the right of the list shown by" -#: builtins/pushd.def:673 builtins.c:1302 +#: builtins/pushd.def:673 builtins.c:1301 msgid "Adds a directory to the top of the directory stack, or rotates" msgstr "Adds a directory to the top of the directory stack, or rotates" -#: builtins/pushd.def:674 builtins.c:1303 +#: builtins/pushd.def:674 builtins.c:1302 msgid "the stack, making the new top of the stack the current working" msgstr "the stack, making the new top of the stack the current working" -#: builtins/pushd.def:675 builtins.c:1304 +#: builtins/pushd.def:675 builtins.c:1303 msgid "directory. With no arguments, exchanges the top two directories." msgstr "directory. With no arguments, exchanges the top two directories." @@ -601,20 +596,20 @@ msgstr "dir adds DIR to the directory stack at the top, making it the" msgid " new current working directory." msgstr " new current working directory." -#: builtins/pushd.def:691 builtins/pushd.def:711 builtins.c:1320 -#: builtins.c:1343 +#: builtins/pushd.def:691 builtins/pushd.def:711 builtins.c:1319 +#: builtins.c:1342 msgid "You can see the directory stack with the `dirs' command." msgstr "You can see the directory stack with the ‘dirs’ command." -#: builtins/pushd.def:696 builtins.c:1328 +#: builtins/pushd.def:696 builtins.c:1327 msgid "Removes entries from the directory stack. With no arguments," msgstr "Removes entries from the directory stack. With no arguments," -#: builtins/pushd.def:697 builtins.c:1329 +#: builtins/pushd.def:697 builtins.c:1328 msgid "removes the top directory from the stack, and cd's to the new" msgstr "removes the top directory from the stack, and cd's to the new" -#: builtins/pushd.def:698 builtins.c:1330 +#: builtins/pushd.def:698 builtins.c:1329 msgid "top directory." msgstr "top directory." @@ -730,32 +725,32 @@ msgstr "cannot suspend" msgid "cannot suspend a login shell" msgstr "cannot suspend a login shell" -#: builtins/type.def:231 +#: builtins/type.def:232 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s is aliased to ‘%s’\n" -#: builtins/type.def:252 +#: builtins/type.def:253 #, c-format msgid "%s is a shell keyword\n" msgstr "%s is a shell keyword\n" -#: builtins/type.def:272 +#: builtins/type.def:273 #, c-format msgid "%s is a function\n" msgstr "%s is a function\n" -#: builtins/type.def:297 +#: builtins/type.def:298 #, c-format msgid "%s is a shell builtin\n" msgstr "%s is a shell builtin\n" -#: builtins/type.def:318 +#: builtins/type.def:319 #, c-format msgid "%s is %s\n" msgstr "%s is %s\n" -#: builtins/type.def:338 +#: builtins/type.def:339 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s is hashed (%s)\n" @@ -789,7 +784,7 @@ msgstr "octal number" msgid "`%c': invalid symbolic mode operator" msgstr "‘%c’: invalid symbolic mode operator" -#: builtins/umask.def:279 +#: builtins/umask.def:281 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "‘%c’: invalid symbolic mode character" @@ -833,98 +828,98 @@ msgstr "%s: unbound variable" msgid "timed out waiting for input: auto-logout\n" msgstr "timed out waiting for input: auto-logout\n" -#: execute_cmd.c:466 +#: execute_cmd.c:467 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "cannot redirect standard input from /dev/null: %s" -#: execute_cmd.c:1036 +#: execute_cmd.c:1037 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: ‘%c’: invalid format character" -#: execute_cmd.c:3521 +#: execute_cmd.c:3541 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: restricted: cannot specify ‘/’ in command names" -#: execute_cmd.c:3609 +#: execute_cmd.c:3629 #, c-format msgid "%s: command not found" msgstr "%s: command not found" -#: execute_cmd.c:3839 +#: execute_cmd.c:3859 #, c-format msgid "%s: %s: bad interpreter" msgstr "%s: %s: bad interpreter" -#: execute_cmd.c:3876 +#: execute_cmd.c:3896 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: cannot execute binary file" -#: execute_cmd.c:3988 +#: execute_cmd.c:4008 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "cannot duplicate fd %d to fd %d" -#: expr.c:239 +#: expr.c:240 msgid "expression recursion level exceeded" msgstr "expression recursion level exceeded" -#: expr.c:263 +#: expr.c:264 msgid "recursion stack underflow" msgstr "recursion stack underflow" -#: expr.c:374 +#: expr.c:375 msgid "syntax error in expression" msgstr "syntax error in expression" -#: expr.c:414 +#: expr.c:415 msgid "attempted assignment to non-variable" msgstr "attempted assignment to non-variable" -#: expr.c:435 expr.c:440 expr.c:750 +#: expr.c:436 expr.c:441 expr.c:751 msgid "division by 0" msgstr "division by 0" -#: expr.c:466 +#: expr.c:467 msgid "bug: bad expassign token" msgstr "bug: bad expassign token" -#: expr.c:508 +#: expr.c:509 msgid "`:' expected for conditional expression" msgstr "‘:’ expected for conditional expression" -#: expr.c:775 +#: expr.c:776 msgid "exponent less than 0" msgstr "exponent less than 0" -#: expr.c:819 +#: expr.c:821 msgid "identifier expected after pre-increment or pre-decrement" msgstr "identifier expected after pre-increment or pre-decrement" -#: expr.c:847 +#: expr.c:849 msgid "missing `)'" msgstr "missing ‘)’" -#: expr.c:871 +#: expr.c:892 msgid "syntax error: operand expected" msgstr "syntax error: operand expected" -#: expr.c:1146 +#: expr.c:1178 msgid "invalid number" msgstr "invalid number" -#: expr.c:1150 +#: expr.c:1182 msgid "invalid arithmetic base" msgstr "invalid arithmetic base" -#: expr.c:1170 +#: expr.c:1202 msgid "value too great for base" msgstr "value too great for base" -#: general.c:60 +#: general.c:62 msgid "getcwd: cannot access parent directories" msgstr "getcwd: cannot access parent directories" @@ -938,42 +933,42 @@ msgstr "cannot allocate new file descriptor for bash input from fd %d" msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: buffer already exists for new fd %d" -#: jobs.c:693 +#: jobs.c:694 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "deleting stopped job %d with process group %ld" -#: jobs.c:1001 +#: jobs.c:1002 #, c-format msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: no such pid" -#: jobs.c:1632 nojobs.c:648 +#: jobs.c:1633 nojobs.c:648 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: pid %ld is not a child of this shell" -#: jobs.c:1815 +#: jobs.c:1821 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: No record of process %ld" -#: jobs.c:2062 +#: jobs.c:2068 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: job %d is stopped" -#: jobs.c:2284 +#: jobs.c:2290 #, c-format msgid "%s: job has terminated" msgstr "%s: job has terminated" -#: jobs.c:2293 +#: jobs.c:2299 #, c-format msgid "%s: job %d already in background" msgstr "%s: job %d already in background" -#: jobs.c:3037 +#: jobs.c:3043 msgid "no job control in this shell" msgstr "no job control in this shell" @@ -1111,12 +1106,12 @@ msgstr "syntax error: ‘;’ unexpected" msgid "syntax error: `((%s))'" msgstr "syntax error: ‘((%s))’" -#: make_cmd.c:560 +#: make_cmd.c:561 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: bad instruction type %d" -#: make_cmd.c:730 +#: make_cmd.c:731 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: redirection instruction ‘%d’ out of range" @@ -1190,34 +1185,34 @@ msgstr "unexpected token ‘%s’ in conditional command" msgid "unexpected token %d in conditional command" msgstr "unexpected token %d in conditional command" -#: parse.y:4400 +#: parse.y:4409 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "syntax error near unexpected token ‘%s’" -#: parse.y:4418 +#: parse.y:4427 #, c-format msgid "syntax error near `%s'" msgstr "syntax error near ‘%s’" -#: parse.y:4428 +#: parse.y:4437 msgid "syntax error: unexpected end of file" msgstr "syntax error: unexpected end of file" -#: parse.y:4428 +#: parse.y:4437 msgid "syntax error" msgstr "syntax error" -#: parse.y:4490 +#: parse.y:4499 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Use “%s” to leave the shell.\n" -#: parse.y:4649 +#: parse.y:4658 msgid "unexpected EOF while looking for matching `)'" msgstr "unexpected EOF while looking for matching ‘)’" -#: pcomplete.c:988 +#: pcomplete.c:998 #, c-format msgid "completion: function `%s' not found" msgstr "completion: function ‘%s’ not found" @@ -1227,12 +1222,12 @@ msgstr "completion: function ‘%s’ not found" msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:260 +#: print_cmd.c:261 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: bad connector ‘%d’" -#: print_cmd.c:1172 +#: print_cmd.c:1211 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: ‘%c’: invalid format character" @@ -1282,11 +1277,11 @@ msgstr "/tmp must be a valid directory name" msgid "%c%c: invalid option" msgstr "%c%c: invalid option" -#: shell.c:1590 +#: shell.c:1591 msgid "I have no name!" msgstr "I have no name!" -#: shell.c:1725 +#: shell.c:1726 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1295,116 +1290,116 @@ msgstr "" "Usage:\t%s [GNU long option] [option] ...\n" "\t%s [GNU long option] [option] script-file ...\n" -#: shell.c:1727 +#: shell.c:1728 msgid "GNU long options:\n" msgstr "GNU long options:\n" -#: shell.c:1731 +#: shell.c:1732 msgid "Shell options:\n" msgstr "Shell options:\n" -#: shell.c:1732 +#: shell.c:1733 msgid "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n" -#: shell.c:1747 +#: shell.c:1748 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s or -o option\n" -#: shell.c:1753 +#: shell.c:1754 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "" "Type ‘%s -c “help set”’ for more information about shell " "options.\n" -#: shell.c:1754 +#: shell.c:1755 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "" "Type ‘%s -c help’ for more information about shell builtin commands.\n" -#: shell.c:1755 +#: shell.c:1756 msgid "Use the `bashbug' command to report bugs.\n" msgstr "Use the ‘bashbug’ command to report bugs.\n" -#: sig.c:485 +#: sig.c:490 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: invalid operation" -#: subst.c:1011 +#: subst.c:1046 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "bad substitution: no closing ‘%s’ in %s" -#: subst.c:2020 +#: subst.c:2053 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: cannot assign list to array member" -#: subst.c:3516 subst.c:3532 +#: subst.c:3880 subst.c:3896 msgid "cannot make pipe for process substitution" msgstr "cannot make pipe for process substitution" -#: subst.c:3563 +#: subst.c:3927 msgid "cannot make child for process substitution" msgstr "cannot make child for process substitution" -#: subst.c:3608 +#: subst.c:3972 #, c-format msgid "cannot open named pipe %s for reading" msgstr "cannot open named pipe %s for reading" -#: subst.c:3610 +#: subst.c:3974 #, c-format msgid "cannot open named pipe %s for writing" msgstr "cannot open named pipe %s for writing" -#: subst.c:3618 +#: subst.c:3982 #, c-format msgid "cannout reset nodelay mode for fd %d" msgstr "cannout reset nodelay mode for fd %d" -#: subst.c:3628 +#: subst.c:3992 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "cannot duplicate named pipe %s as fd %d" -#: subst.c:3803 +#: subst.c:4167 msgid "cannot make pipe for command substitution" msgstr "cannot make pipe for command substitution" -#: subst.c:3832 +#: subst.c:4196 msgid "cannot make child for command substitution" msgstr "cannot make child for command substitution" -#: subst.c:3849 +#: subst.c:4213 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: cannot duplicate pipe as fd 1" -#: subst.c:4284 +#: subst.c:4671 #, c-format msgid "%s: parameter null or not set" msgstr "%s: parameter null or not set" -#: subst.c:4529 +#: subst.c:4937 #, c-format msgid "%s: substring expression < 0" msgstr "%s: substring expression < 0" -#: subst.c:5209 +#: subst.c:5667 #, c-format msgid "%s: bad substitution" msgstr "%s: bad substitution" -#: subst.c:5283 +#: subst.c:5741 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: cannot assign in this way" -#: subst.c:6652 +#: subst.c:7110 #, c-format msgid "no match: %s" msgstr "no match: %s" @@ -1462,43 +1457,43 @@ msgstr "" msgid "trap_handler: bad signal %d" msgstr "trap_handler: bad signal %d" -#: variables.c:310 +#: variables.c:314 #, c-format msgid "error importing function definition for `%s'" msgstr "error importing function definition for ‘%s’" -#: variables.c:670 +#: variables.c:674 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "shell level (%d) too high, resetting to 1" -#: variables.c:1610 +#: variables.c:1617 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: no function context at current scope" -#: variables.c:2709 +#: variables.c:2724 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: no function context at current scope" -#: variables.c:2923 variables.c:2932 +#: variables.c:2938 variables.c:2947 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "invalid character %d in exportstr for %s" -#: variables.c:2938 +#: variables.c:2953 #, c-format msgid "no `=' in exportstr for %s" msgstr "no ‘=’ in exportstr for %s" -#: variables.c:3363 +#: variables.c:3378 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context: head of shell_variables not a function context" -#: variables.c:3376 +#: variables.c:3391 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: no global_variables context" -#: variables.c:3442 +#: variables.c:3457 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "pop_scope: head of shell_variables not a temporary environment scope" @@ -3400,499 +3395,503 @@ msgid "The command ARG is to be read and executed when the shell receives" msgstr "The command ARG is to be read and executed when the shell receives" #: builtins.c:1000 -msgid "signal(s) SIGNAL_SPEC. If ARG is absent all specified signals are" +#, fuzzy +msgid "signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC" msgstr "signal(s) SIGNAL_SPEC. If ARG is absent all specified signals are" #: builtins.c:1001 -msgid "reset to their original values. If ARG is the null string each" -msgstr "reset to their original values. If ARG is the null string each" +msgid "is supplied) or `-', each specified signal is reset to its original" +msgstr "" #: builtins.c:1002 -msgid "SIGNAL_SPEC is ignored by the shell and by the commands it invokes." -msgstr "SIGNAL_SPEC is ignored by the shell and by the commands it invokes." +msgid "value. If ARG is the null string each SIGNAL_SPEC is ignored by the" +msgstr "" #: builtins.c:1003 -msgid "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from" -msgstr "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from" +msgid "shell and by the commands it invokes. If a SIGNAL_SPEC is EXIT (0)" +msgstr "" #: builtins.c:1004 -msgid "the shell. If a SIGNAL_SPEC is DEBUG, ARG is executed after every" -msgstr "the shell. If a SIGNAL_SPEC is DEBUG, ARG is executed after every" +msgid "the command ARG is executed on exit from the shell. If a SIGNAL_SPEC" +msgstr "" #: builtins.c:1005 -msgid "command. If ARG is `-p' then the trap commands associated with" -msgstr "command. If ARG is ‘-p’ then the trap commands associated with" +msgid "" +"is DEBUG, ARG is executed after every simple command. If the`-p' option" +msgstr "" #: builtins.c:1006 -msgid "each SIGNAL_SPEC are displayed. If no arguments are supplied or if" -msgstr "each SIGNAL_SPEC are displayed. If no arguments are supplied or if" +#, fuzzy +msgid "is supplied then the trap commands associated with each SIGNAL_SPEC are" +msgstr "command. If ARG is ‘-p’ then the trap commands associated with" #: builtins.c:1007 -msgid "only `-p' is given, trap prints the list of commands associated with" -msgstr "" -"only ‘-p’ is given, trap prints the list of commands associated with" +#, fuzzy +msgid "displayed. If no arguments are supplied or if only `-p' is given, trap" +msgstr "each SIGNAL_SPEC are displayed. If no arguments are supplied or if" #: builtins.c:1008 +#, fuzzy msgid "" -"each signal number. Each SIGNAL_SPEC is either a signal name in " +"prints the list of commands associated with each signal. Each SIGNAL_SPEC" msgstr "" -"each signal number. Each SIGNAL_SPEC is either a signal name in " +"only ‘-p’ is given, trap prints the list of commands associated with" #: builtins.c:1009 -msgid "or a signal number. `trap -l' prints a list of signal names and their" +msgid "is either a signal name in or a signal number. Signal names" msgstr "" -"or a signal number. ‘trap -l’ prints a list of signal names and their" #: builtins.c:1010 -msgid "corresponding numbers. Note that a signal can be sent to the shell" -msgstr "corresponding numbers. Note that a signal can be sent to the shell" +msgid "are case insensitive and the SIG prefix is optional. `trap -l' prints" +msgstr "" #: builtins.c:1011 -msgid "with \"kill -signal $$\"." -msgstr "with “kill -signal $$”." +msgid "a list of signal names and their corresponding numbers. Note that a" +msgstr "" -#: builtins.c:1017 +#: builtins.c:1012 +msgid "signal can be sent to the shell with \"kill -signal $$\"." +msgstr "" + +#: builtins.c:1018 msgid "For each NAME, indicate how it would be interpreted if used as a" msgstr "For each NAME, indicate how it would be interpreted if used as a" -#: builtins.c:1018 +#: builtins.c:1019 msgid "command name." msgstr "command name." -#: builtins.c:1020 +#: builtins.c:1021 msgid "If the -t option is used, `type' outputs a single word which is one of" msgstr "" "If the -t option is used, ‘type’ outputs a single word which is one of" -#: builtins.c:1021 +#: builtins.c:1022 msgid "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an" msgstr "" "‘alias’, ‘keyword’, ‘function’, ‘builtin’, ‘file" "[0m’ or ‘’, if NAME is an" -#: builtins.c:1022 +#: builtins.c:1023 msgid "alias, shell reserved word, shell function, shell builtin, disk file," msgstr "alias, shell reserved word, shell function, shell builtin, disk file," -#: builtins.c:1023 +#: builtins.c:1024 msgid "or unfound, respectively." msgstr "or unfound, respectively." -#: builtins.c:1025 +#: builtins.c:1026 msgid "If the -p flag is used, `type' either returns the name of the disk" msgstr "" "If the -p flag is used, ‘type’ either returns the name of the disk" -#: builtins.c:1026 +#: builtins.c:1027 msgid "file that would be executed, or nothing if `type -t NAME' would not" msgstr "" "file that would be executed, or nothing if ‘type -t NAME’ would not" -#: builtins.c:1027 +#: builtins.c:1028 msgid "return `file'." msgstr "return ‘file’." -#: builtins.c:1029 +#: builtins.c:1030 msgid "If the -a flag is used, `type' displays all of the places that contain" msgstr "" "If the -a flag is used, ‘type’ displays all of the places that contain" -#: builtins.c:1030 +#: builtins.c:1031 msgid "an executable named `file'. This includes aliases, builtins, and" msgstr "" "an executable named ‘file’. This includes aliases, builtins, and" -#: builtins.c:1031 +#: builtins.c:1032 msgid "functions, if and only if the -p flag is not also used." msgstr "functions, if and only if the -p flag is not also used." -#: builtins.c:1033 +#: builtins.c:1034 msgid "The -f flag suppresses shell function lookup." msgstr "The -f flag suppresses shell function lookup." -#: builtins.c:1035 +#: builtins.c:1036 msgid "The -P flag forces a PATH search for each NAME, even if it is an alias," msgstr "" "The -P flag forces a PATH search for each NAME, even if it is an alias," -#: builtins.c:1036 +#: builtins.c:1037 msgid "builtin, or function, and returns the name of the disk file that would" msgstr "builtin, or function, and returns the name of the disk file that would" -#: builtins.c:1037 +#: builtins.c:1038 msgid "be executed." msgstr "be executed." -#: builtins.c:1044 +#: builtins.c:1045 msgid "Ulimit provides control over the resources available to processes" msgstr "Ulimit provides control over the resources available to processes" -#: builtins.c:1045 +#: builtins.c:1046 msgid "started by the shell, on systems that allow such control. If an" msgstr "started by the shell, on systems that allow such control. If an" -#: builtins.c:1046 +#: builtins.c:1047 msgid "option is given, it is interpreted as follows:" msgstr "option is given, it is interpreted as follows:" -#: builtins.c:1048 +#: builtins.c:1049 msgid " -S\tuse the `soft' resource limit" msgstr " -S\tuse the ‘soft’ resource limit" -#: builtins.c:1049 +#: builtins.c:1050 msgid " -H\tuse the `hard' resource limit" msgstr " -H\tuse the ‘hard’ resource limit" -#: builtins.c:1050 +#: builtins.c:1051 msgid " -a\tall current limits are reported" msgstr " -a\tall current limits are reported" -#: builtins.c:1051 +#: builtins.c:1052 msgid " -c\tthe maximum size of core files created" msgstr " -c\tthe maximum size of core files created" -#: builtins.c:1052 +#: builtins.c:1053 msgid " -d\tthe maximum size of a process's data segment" msgstr " -d\tthe maximum size of a process's data segment" -#: builtins.c:1053 +#: builtins.c:1054 msgid " -f\tthe maximum size of files created by the shell" msgstr " -f\tthe maximum size of files created by the shell" -#: builtins.c:1054 +#: builtins.c:1055 msgid " -l\tthe maximum size a process may lock into memory" msgstr " -l\tthe maximum size a process may lock into memory" -#: builtins.c:1055 +#: builtins.c:1056 msgid " -m\tthe maximum resident set size" msgstr " -m\tthe maximum resident set size" -#: builtins.c:1056 +#: builtins.c:1057 msgid " -n\tthe maximum number of open file descriptors" msgstr " -n\tthe maximum number of open file descriptors" -#: builtins.c:1057 +#: builtins.c:1058 msgid " -p\tthe pipe buffer size" msgstr " -p\tthe pipe buffer size" -#: builtins.c:1058 +#: builtins.c:1059 msgid " -s\tthe maximum stack size" msgstr " -s\tthe maximum stack size" -#: builtins.c:1059 +#: builtins.c:1060 msgid " -t\tthe maximum amount of cpu time in seconds" msgstr " -t\tthe maximum amount of cpu time in seconds" -#: builtins.c:1060 +#: builtins.c:1061 msgid " -u\tthe maximum number of user processes" msgstr " -u\tthe maximum number of user processes" -#: builtins.c:1061 +#: builtins.c:1062 msgid " -v\tthe size of virtual memory" msgstr " -v\tthe size of virtual memory" -#: builtins.c:1063 +#: builtins.c:1064 msgid "If LIMIT is given, it is the new value of the specified resource;" msgstr "If LIMIT is given, it is the new value of the specified resource;" -#: builtins.c:1064 +#: builtins.c:1065 msgid "the special LIMIT values `soft', `hard', and `unlimited' stand for" msgstr "" "the special LIMIT values ‘soft’, ‘hard’, and ‘unlimited’ " "stand for" -#: builtins.c:1065 +#: builtins.c:1066 msgid "" "the current soft limit, the current hard limit, and no limit, respectively." msgstr "" "the current soft limit, the current hard limit, and no limit, respectively." -#: builtins.c:1066 +#: builtins.c:1067 msgid "Otherwise, the current value of the specified resource is printed." msgstr "Otherwise, the current value of the specified resource is printed." -#: builtins.c:1067 +#: builtins.c:1068 msgid "If no option is given, then -f is assumed. Values are in 1024-byte" msgstr "If no option is given, then -f is assumed. Values are in 1024-byte" -#: builtins.c:1068 +#: builtins.c:1069 msgid "increments, except for -t, which is in seconds, -p, which is in" msgstr "increments, except for -t, which is in seconds, -p, which is in" -#: builtins.c:1069 +#: builtins.c:1070 msgid "increments of 512 bytes, and -u, which is an unscaled number of" msgstr "increments of 512 bytes, and -u, which is an unscaled number of" -#: builtins.c:1070 +#: builtins.c:1071 msgid "processes." msgstr "processes." -#: builtins.c:1077 +#: builtins.c:1078 msgid "The user file-creation mask is set to MODE. If MODE is omitted, or if" msgstr "The user file-creation mask is set to MODE. If MODE is omitted, or if" -#: builtins.c:1078 +#: builtins.c:1079 msgid "`-S' is supplied, the current value of the mask is printed. The `-S'" msgstr "" "‘-S’ is supplied, the current value of the mask is printed. The ‘-S" "[0m’" -#: builtins.c:1079 +#: builtins.c:1080 msgid "option makes the output symbolic; otherwise an octal number is output." msgstr "option makes the output symbolic; otherwise an octal number is output." -#: builtins.c:1080 +#: builtins.c:1081 msgid "If `-p' is supplied, and MODE is omitted, the output is in a form" msgstr "" "If ‘-p’ is supplied, and MODE is omitted, the output is in a form" -#: builtins.c:1081 +#: builtins.c:1082 msgid "that may be used as input. If MODE begins with a digit, it is" msgstr "that may be used as input. If MODE begins with a digit, it is" -#: builtins.c:1082 +#: builtins.c:1083 msgid "interpreted as an octal number, otherwise it is a symbolic mode string" msgstr "interpreted as an octal number, otherwise it is a symbolic mode string" -#: builtins.c:1083 +#: builtins.c:1084 msgid "like that accepted by chmod(1)." msgstr "like that accepted by chmod(1)." -#: builtins.c:1090 builtins.c:1102 +#: builtins.c:1091 builtins.c:1103 msgid "Wait for the specified process and report its termination status. If" msgstr "Wait for the specified process and report its termination status. If" -#: builtins.c:1091 builtins.c:1103 +#: builtins.c:1092 builtins.c:1104 msgid "N is not given, all currently active child processes are waited for," msgstr "N is not given, all currently active child processes are waited for," -#: builtins.c:1092 +#: builtins.c:1093 msgid "and the return code is zero. N may be a process ID or a job" msgstr "and the return code is zero. N may be a process ID or a job" -#: builtins.c:1093 +#: builtins.c:1094 msgid "specification; if a job spec is given, all processes in the job's" msgstr "specification; if a job spec is given, all processes in the job's" -#: builtins.c:1094 +#: builtins.c:1095 msgid "pipeline are waited for." msgstr "pipeline are waited for." -#: builtins.c:1104 +#: builtins.c:1105 msgid "and the return code is zero. N is a process ID; if it is not given," msgstr "and the return code is zero. N is a process ID; if it is not given," -#: builtins.c:1105 +#: builtins.c:1106 msgid "all child processes of the shell are waited for." msgstr "all child processes of the shell are waited for." -#: builtins.c:1112 +#: builtins.c:1113 msgid "The `for' loop executes a sequence of commands for each member in a" msgstr "" "The ‘for’ loop executes a sequence of commands for each member in a" -#: builtins.c:1113 +#: builtins.c:1114 msgid "list of items. If `in WORDS ...;' is not present, then `in \"$@\"' is" msgstr "" "list of items. If ‘in WORDS ...;’ is not present, then ‘in “$@" "[0m”’ is" -#: builtins.c:1114 +#: builtins.c:1115 msgid "assumed. For each element in WORDS, NAME is set to that element, and" msgstr "assumed. For each element in WORDS, NAME is set to that element, and" -#: builtins.c:1115 +#: builtins.c:1116 msgid "the COMMANDS are executed." msgstr "the COMMANDS are executed." -#: builtins.c:1121 +#: builtins.c:1122 msgid "Equivalent to" msgstr "Equivalent to" -#: builtins.c:1122 +#: builtins.c:1123 msgid "\t(( EXP1 ))" msgstr "\t(( EXP1 ))" -#: builtins.c:1123 +#: builtins.c:1124 msgid "\twhile (( EXP2 )); do" msgstr "\twhile (( EXP2 )); do" -#: builtins.c:1124 +#: builtins.c:1125 msgid "\t\tCOMMANDS" msgstr "\t\tCOMMANDS" -#: builtins.c:1125 +#: builtins.c:1126 msgid "\t\t(( EXP3 ))" msgstr "\t\t(( EXP3 ))" -#: builtins.c:1126 +#: builtins.c:1127 msgid "\tdone" msgstr "\tdone" -#: builtins.c:1127 +#: builtins.c:1128 msgid "EXP1, EXP2, and EXP3 are arithmetic expressions. If any expression is" msgstr "EXP1, EXP2, and EXP3 are arithmetic expressions. If any expression is" -#: builtins.c:1128 +#: builtins.c:1129 msgid "omitted, it behaves as if it evaluates to 1." msgstr "omitted, it behaves as if it evaluates to 1." -#: builtins.c:1134 +#: builtins.c:1135 msgid "The WORDS are expanded, generating a list of words. The" msgstr "The WORDS are expanded, generating a list of words. The" -#: builtins.c:1135 +#: builtins.c:1136 msgid "set of expanded words is printed on the standard error, each" msgstr "set of expanded words is printed on the standard error, each" -#: builtins.c:1136 +#: builtins.c:1137 msgid "preceded by a number. If `in WORDS' is not present, `in \"$@\"'" msgstr "" "preceded by a number. If ‘in WORDS’ is not present, ‘in “$@" "[0m”’" -#: builtins.c:1137 +#: builtins.c:1138 msgid "is assumed. The PS3 prompt is then displayed and a line read" msgstr "is assumed. The PS3 prompt is then displayed and a line read" -#: builtins.c:1138 +#: builtins.c:1139 msgid "from the standard input. If the line consists of the number" msgstr "from the standard input. If the line consists of the number" -#: builtins.c:1139 +#: builtins.c:1140 msgid "corresponding to one of the displayed words, then NAME is set" msgstr "corresponding to one of the displayed words, then NAME is set" -#: builtins.c:1140 +#: builtins.c:1141 msgid "to that word. If the line is empty, WORDS and the prompt are" msgstr "to that word. If the line is empty, WORDS and the prompt are" -#: builtins.c:1141 +#: builtins.c:1142 msgid "redisplayed. If EOF is read, the command completes. Any other" msgstr "redisplayed. If EOF is read, the command completes. Any other" -#: builtins.c:1142 +#: builtins.c:1143 msgid "value read causes NAME to be set to null. The line read is saved" msgstr "value read causes NAME to be set to null. The line read is saved" -#: builtins.c:1143 +#: builtins.c:1144 msgid "in the variable REPLY. COMMANDS are executed after each selection" msgstr "in the variable REPLY. COMMANDS are executed after each selection" -#: builtins.c:1144 +#: builtins.c:1145 msgid "until a break command is executed." msgstr "until a break command is executed." -#: builtins.c:1150 +#: builtins.c:1151 msgid "Execute PIPELINE and print a summary of the real time, user CPU time," msgstr "Execute PIPELINE and print a summary of the real time, user CPU time," -#: builtins.c:1151 +#: builtins.c:1152 msgid "and system CPU time spent executing PIPELINE when it terminates." msgstr "and system CPU time spent executing PIPELINE when it terminates." -#: builtins.c:1152 +#: builtins.c:1153 msgid "The return status is the return status of PIPELINE. The `-p' option" msgstr "" "The return status is the return status of PIPELINE. The ‘-p’ option" -#: builtins.c:1153 +#: builtins.c:1154 msgid "prints the timing summary in a slightly different format. This uses" msgstr "prints the timing summary in a slightly different format. This uses" -#: builtins.c:1154 +#: builtins.c:1155 msgid "the value of the TIMEFORMAT variable as the output format." msgstr "the value of the TIMEFORMAT variable as the output format." -#: builtins.c:1160 +#: builtins.c:1161 msgid "Selectively execute COMMANDS based upon WORD matching PATTERN. The" msgstr "Selectively execute COMMANDS based upon WORD matching PATTERN. The" -#: builtins.c:1161 +#: builtins.c:1162 msgid "`|' is used to separate multiple patterns." msgstr "‘|’ is used to separate multiple patterns." -#: builtins.c:1167 +#: builtins.c:1168 msgid "" "The if COMMANDS are executed. If the exit status is zero, then the then" msgstr "" "The if COMMANDS are executed. If the exit status is zero, then the then" -#: builtins.c:1168 +#: builtins.c:1169 msgid "" "COMMANDS are executed. Otherwise, each of the elif COMMANDS are executed" msgstr "" "COMMANDS are executed. Otherwise, each of the elif COMMANDS are executed" -#: builtins.c:1169 +#: builtins.c:1170 msgid "" "in turn, and if the exit status is zero, the corresponding then COMMANDS" msgstr "" "in turn, and if the exit status is zero, the corresponding then COMMANDS" -#: builtins.c:1170 +#: builtins.c:1171 msgid "" "are executed and the if command completes. Otherwise, the else COMMANDS" msgstr "" "are executed and the if command completes. Otherwise, the else COMMANDS" -#: builtins.c:1171 +#: builtins.c:1172 msgid "" "are executed, if present. The exit status is the exit status of the last" msgstr "" "are executed, if present. The exit status is the exit status of the last" -#: builtins.c:1172 +#: builtins.c:1173 msgid "command executed, or zero if no condition tested true." msgstr "command executed, or zero if no condition tested true." -#: builtins.c:1178 builtins.c:1185 +#: builtins.c:1179 builtins.c:1186 msgid "Expand and execute COMMANDS as long as the final command in the" msgstr "Expand and execute COMMANDS as long as the final command in the" -#: builtins.c:1179 +#: builtins.c:1180 msgid "`while' COMMANDS has an exit status of zero." msgstr "‘while’ COMMANDS has an exit status of zero." -#: builtins.c:1186 +#: builtins.c:1187 msgid "`until' COMMANDS has an exit status which is not zero." msgstr "‘until’ COMMANDS has an exit status which is not zero." -#: builtins.c:1192 +#: builtins.c:1193 msgid "Create a simple command invoked by NAME which runs COMMANDS." msgstr "Create a simple command invoked by NAME which runs COMMANDS." -#: builtins.c:1193 +#: builtins.c:1194 msgid "Arguments on the command line along with NAME are passed to the" msgstr "Arguments on the command line along with NAME are passed to the" -#: builtins.c:1194 +#: builtins.c:1195 msgid "function as $0 .. $n." msgstr "function as $0 .. $n." -#: builtins.c:1200 +#: builtins.c:1201 msgid "Run a set of commands in a group. This is one way to redirect an" msgstr "Run a set of commands in a group. This is one way to redirect an" -#: builtins.c:1201 +#: builtins.c:1202 msgid "entire set of commands." msgstr "entire set of commands." -#: builtins.c:1207 +#: builtins.c:1208 msgid "This is similar to the `fg' command. Resume a stopped or background" msgstr "" "This is similar to the ‘fg’ command. Resume a stopped or background" -#: builtins.c:1208 -msgid "job. If you specifiy DIGITS, then that job is used. If you specify" -msgstr "job. If you specifiy DIGITS, then that job is used. If you specify" - #: builtins.c:1209 -msgid "WORD, then the job whose name begins with WORD is used. Following the" -msgstr "WORD, then the job whose name begins with WORD is used. Following the" +msgid "job specified by %JOBSPEC. Following the job specification with a `&'" +msgstr "" #: builtins.c:1210 -msgid "job specification with a `&' places the job in the background." +#, fuzzy +msgid "places the job in the background." msgstr "job specification with a ‘&’ places the job in the background." #: builtins.c:1216 @@ -3962,388 +3961,436 @@ msgid "BASH_VERSION Version information for this Bash." msgstr "BASH_VERSION Version information for this Bash." #: builtins.c:1242 -msgid "CDPATH A colon separated list of directories to search" +#, fuzzy +msgid "CDPATH A colon-separated list of directories to search" msgstr "CDPATH A colon separated list of directories to search" #: builtins.c:1243 -msgid "\t\twhen the argument to `cd' is not found in the current" -msgstr "\t\twhen the argument to ‘cd’ is not found in the current" +msgid "\t\tfor directries given as arguments to `cd'." +msgstr "" #: builtins.c:1244 -msgid "\t\tdirectory." -msgstr "\t\tdirectory." - -#: builtins.c:1245 msgid "GLOBIGNORE\tA colon-separated list of patterns describing filenames to" msgstr "GLOBIGNORE\tA colon-separated list of patterns describing filenames to" -#: builtins.c:1246 +#: builtins.c:1245 msgid "\t\tbe ignored by pathname expansion." msgstr "\t\tbe ignored by pathname expansion." -#: builtins.c:1248 +#: builtins.c:1247 msgid "" "HISTFILE The name of the file where your command history is stored." msgstr "" "HISTFILE The name of the file where your command history is stored." -#: builtins.c:1249 +#: builtins.c:1248 msgid "HISTFILESIZE The maximum number of lines this file can contain." msgstr "HISTFILESIZE The maximum number of lines this file can contain." -#: builtins.c:1250 +#: builtins.c:1249 msgid "HISTSIZE The maximum number of history lines that a running" msgstr "HISTSIZE The maximum number of history lines that a running" -#: builtins.c:1251 +#: builtins.c:1250 msgid "\t\tshell can access." msgstr "\t\tshell can access." -#: builtins.c:1253 +#: builtins.c:1252 msgid "HOME The complete pathname to your login directory." msgstr "HOME The complete pathname to your login directory." -#: builtins.c:1254 +#: builtins.c:1253 msgid "HOSTNAME\tThe name of the current host." msgstr "HOSTNAME\tThe name of the current host." -#: builtins.c:1255 +#: builtins.c:1254 msgid "HOSTTYPE The type of CPU this version of Bash is running under." msgstr "HOSTTYPE The type of CPU this version of Bash is running under." -#: builtins.c:1256 +#: builtins.c:1255 msgid "IGNOREEOF Controls the action of the shell on receipt of an EOF" msgstr "IGNOREEOF Controls the action of the shell on receipt of an EOF" -#: builtins.c:1257 +#: builtins.c:1256 msgid "\t\tcharacter as the sole input. If set, then the value" msgstr "\t\tcharacter as the sole input. If set, then the value" -#: builtins.c:1258 +#: builtins.c:1257 msgid "\t\tof it is the number of EOF characters that can be seen" msgstr "\t\tof it is the number of EOF characters that can be seen" -#: builtins.c:1259 +#: builtins.c:1258 msgid "\t\tin a row on an empty line before the shell will exit" msgstr "\t\tin a row on an empty line before the shell will exit" -#: builtins.c:1260 +#: builtins.c:1259 msgid "\t\t(default 10). When unset, EOF signifies the end of input." msgstr "\t\t(default 10). When unset, EOF signifies the end of input." -#: builtins.c:1261 +#: builtins.c:1260 msgid "MACHTYPE\tA string describing the current system Bash is running on." msgstr "MACHTYPE\tA string describing the current system Bash is running on." -#: builtins.c:1262 +#: builtins.c:1261 msgid "MAILCHECK\tHow often, in seconds, Bash checks for new mail." msgstr "MAILCHECK\tHow often, in seconds, Bash checks for new mail." -#: builtins.c:1263 +#: builtins.c:1262 msgid "MAILPATH\tA colon-separated list of filenames which Bash checks" msgstr "MAILPATH\tA colon-separated list of filenames which Bash checks" -#: builtins.c:1264 +#: builtins.c:1263 msgid "\t\tfor new mail." msgstr "\t\tfor new mail." -#: builtins.c:1265 +#: builtins.c:1264 msgid "OSTYPE\t\tThe version of Unix this version of Bash is running on." msgstr "OSTYPE\t\tThe version of Unix this version of Bash is running on." -#: builtins.c:1266 +#: builtins.c:1265 msgid "PATH A colon-separated list of directories to search when" msgstr "PATH A colon-separated list of directories to search when" -#: builtins.c:1267 +#: builtins.c:1266 msgid "\t\tlooking for commands." msgstr "\t\tlooking for commands." -#: builtins.c:1268 +#: builtins.c:1267 msgid "PROMPT_COMMAND A command to be executed before the printing of each" msgstr "PROMPT_COMMAND A command to be executed before the printing of each" -#: builtins.c:1269 +#: builtins.c:1268 msgid "\t\tprimary prompt." msgstr "\t\tprimary prompt." -#: builtins.c:1270 +#: builtins.c:1269 msgid "PS1 The primary prompt string." msgstr "PS1 The primary prompt string." -#: builtins.c:1271 +#: builtins.c:1270 msgid "PS2 The secondary prompt string." msgstr "PS2 The secondary prompt string." -#: builtins.c:1272 +#: builtins.c:1271 msgid "PWD\t\tThe full pathname of the current directory." msgstr "PWD\t\tThe full pathname of the current directory." -#: builtins.c:1273 +#: builtins.c:1272 msgid "SHELLOPTS\tA colon-separated list of enabled shell options." msgstr "SHELLOPTS\tA colon-separated list of enabled shell options." -#: builtins.c:1274 +#: builtins.c:1273 msgid "TERM The name of the current terminal type." msgstr "TERM The name of the current terminal type." -#: builtins.c:1275 +#: builtins.c:1274 msgid "TIMEFORMAT\tThe output format for timing statistics displayed by the" msgstr "TIMEFORMAT\tThe output format for timing statistics displayed by the" -#: builtins.c:1276 +#: builtins.c:1275 msgid "\t\t`time' reserved word." msgstr "\t\t‘time’ reserved word." -#: builtins.c:1277 +#: builtins.c:1276 msgid "auto_resume Non-null means a command word appearing on a line by" msgstr "auto_resume Non-null means a command word appearing on a line by" -#: builtins.c:1278 +#: builtins.c:1277 msgid "\t\titself is first looked for in the list of currently" msgstr "\t\titself is first looked for in the list of currently" -#: builtins.c:1279 +#: builtins.c:1278 msgid "\t\tstopped jobs. If found there, that job is foregrounded." msgstr "\t\tstopped jobs. If found there, that job is foregrounded." -#: builtins.c:1280 +#: builtins.c:1279 msgid "\t\tA value of `exact' means that the command word must" msgstr "\t\tA value of ‘exact’ means that the command word must" -#: builtins.c:1281 +#: builtins.c:1280 msgid "\t\texactly match a command in the list of stopped jobs. A" msgstr "\t\texactly match a command in the list of stopped jobs. A" -#: builtins.c:1282 +#: builtins.c:1281 msgid "\t\tvalue of `substring' means that the command word must" msgstr "\t\tvalue of ‘substring’ means that the command word must" -#: builtins.c:1283 +#: builtins.c:1282 msgid "\t\tmatch a substring of the job. Any other value means that" msgstr "\t\tmatch a substring of the job. Any other value means that" -#: builtins.c:1284 +#: builtins.c:1283 msgid "\t\tthe command must be a prefix of a stopped job." msgstr "\t\tthe command must be a prefix of a stopped job." -#: builtins.c:1287 +#: builtins.c:1286 msgid "histchars Characters controlling history expansion and quick" msgstr "histchars Characters controlling history expansion and quick" -#: builtins.c:1288 +#: builtins.c:1287 msgid "\t\tsubstitution. The first character is the history" msgstr "\t\tsubstitution. The first character is the history" -#: builtins.c:1289 +#: builtins.c:1288 msgid "\t\tsubstitution character, usually `!'. The second is" msgstr "\t\tsubstitution character, usually ‘!’. The second is" -#: builtins.c:1290 +#: builtins.c:1289 msgid "\t\tthe `quick substitution' character, usually `^'. The" msgstr "\t\tthe ‘quick substitution’ character, usually ‘^’. The" -#: builtins.c:1291 +#: builtins.c:1290 msgid "\t\tthird is the `history comment' character, usually `#'." msgstr "\t\tthird is the ‘history comment’ character, usually ‘#’." -#: builtins.c:1293 +#: builtins.c:1292 msgid "HISTIGNORE\tA colon-separated list of patterns used to decide which" msgstr "HISTIGNORE\tA colon-separated list of patterns used to decide which" -#: builtins.c:1294 +#: builtins.c:1293 msgid "\t\tcommands should be saved on the history list." msgstr "\t\tcommands should be saved on the history list." -#: builtins.c:1306 +#: builtins.c:1305 msgid "+N\tRotates the stack so that the Nth directory (counting" msgstr "+N\tRotates the stack so that the Nth directory (counting" -#: builtins.c:1307 +#: builtins.c:1306 msgid "\tfrom the left of the list shown by `dirs', starting with" msgstr "\tfrom the left of the list shown by ‘dirs’, starting with" -#: builtins.c:1308 builtins.c:1312 +#: builtins.c:1307 builtins.c:1311 msgid "\tzero) is at the top." msgstr "\tzero) is at the top." -#: builtins.c:1310 +#: builtins.c:1309 msgid "-N\tRotates the stack so that the Nth directory (counting" msgstr "-N\tRotates the stack so that the Nth directory (counting" -#: builtins.c:1311 +#: builtins.c:1310 msgid "\tfrom the right of the list shown by `dirs', starting with" msgstr "\tfrom the right of the list shown by ‘dirs’, starting with" -#: builtins.c:1314 +#: builtins.c:1313 msgid "-n\tsuppress the normal change of directory when adding directories" msgstr "-n\tsuppress the normal change of directory when adding directories" -#: builtins.c:1315 +#: builtins.c:1314 msgid "\tto the stack, so only the stack is manipulated." msgstr "\tto the stack, so only the stack is manipulated." -#: builtins.c:1317 +#: builtins.c:1316 msgid "dir\tadds DIR to the directory stack at the top, making it the" msgstr "dir\tadds DIR to the directory stack at the top, making it the" -#: builtins.c:1318 +#: builtins.c:1317 msgid "\tnew current working directory." msgstr "\tnew current working directory." -#: builtins.c:1332 +#: builtins.c:1331 msgid "+N\tremoves the Nth entry counting from the left of the list" msgstr "+N\tremoves the Nth entry counting from the left of the list" -#: builtins.c:1333 +#: builtins.c:1332 msgid "\tshown by `dirs', starting with zero. For example: `popd +0'" msgstr "" "\tshown by ‘dirs’, starting with zero. For example: ‘popd +0’" -#: builtins.c:1334 +#: builtins.c:1333 msgid "\tremoves the first directory, `popd +1' the second." msgstr "\tremoves the first directory, ‘popd +1’ the second." -#: builtins.c:1336 +#: builtins.c:1335 msgid "-N\tremoves the Nth entry counting from the right of the list" msgstr "-N\tremoves the Nth entry counting from the right of the list" -#: builtins.c:1337 +#: builtins.c:1336 msgid "\tshown by `dirs', starting with zero. For example: `popd -0'" msgstr "" "\tshown by ‘dirs’, starting with zero. For example: ‘popd -0’" -#: builtins.c:1338 +#: builtins.c:1337 msgid "\tremoves the last directory, `popd -1' the next to last." msgstr "\tremoves the last directory, ‘popd -1’ the next to last." -#: builtins.c:1340 +#: builtins.c:1339 msgid "-n\tsuppress the normal change of directory when removing directories" msgstr "-n\tsuppress the normal change of directory when removing directories" -#: builtins.c:1341 +#: builtins.c:1340 msgid "\tfrom the stack, so only the stack is manipulated." msgstr "\tfrom the stack, so only the stack is manipulated." -#: builtins.c:1363 +#: builtins.c:1362 msgid "+N\tdisplays the Nth entry counting from the left of the list shown by" msgstr "+N\tdisplays the Nth entry counting from the left of the list shown by" -#: builtins.c:1364 builtins.c:1367 +#: builtins.c:1363 builtins.c:1366 msgid "\tdirs when invoked without options, starting with zero." msgstr "\tdirs when invoked without options, starting with zero." -#: builtins.c:1366 +#: builtins.c:1365 msgid "-N\tdisplays the Nth entry counting from the right of the list shown by" msgstr "" "-N\tdisplays the Nth entry counting from the right of the list shown by" -#: builtins.c:1374 +#: builtins.c:1373 msgid "Toggle the values of variables controlling optional behavior." msgstr "Toggle the values of variables controlling optional behavior." -#: builtins.c:1375 +#: builtins.c:1374 msgid "The -s flag means to enable (set) each OPTNAME; the -u flag" msgstr "The -s flag means to enable (set) each OPTNAME; the -u flag" -#: builtins.c:1376 +#: builtins.c:1375 msgid "unsets each OPTNAME. The -q flag suppresses output; the exit" msgstr "unsets each OPTNAME. The -q flag suppresses output; the exit" -#: builtins.c:1377 +#: builtins.c:1376 msgid "status indicates whether each OPTNAME is set or unset. The -o" msgstr "status indicates whether each OPTNAME is set or unset. The -o" -#: builtins.c:1378 +#: builtins.c:1377 msgid "option restricts the OPTNAMEs to those defined for use with" msgstr "option restricts the OPTNAMEs to those defined for use with" -#: builtins.c:1379 +#: builtins.c:1378 msgid "`set -o'. With no options, or with the -p option, a list of all" msgstr "‘set -o’. With no options, or with the -p option, a list of all" -#: builtins.c:1380 +#: builtins.c:1379 msgid "settable options is displayed, with an indication of whether or" msgstr "settable options is displayed, with an indication of whether or" -#: builtins.c:1381 +#: builtins.c:1380 msgid "not each is set." msgstr "not each is set." -#: builtins.c:1387 +#: builtins.c:1386 msgid "printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT" msgstr "" "printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT" -#: builtins.c:1388 +#: builtins.c:1387 msgid "is a character string which contains three types of objects: plain" msgstr "is a character string which contains three types of objects: plain" -#: builtins.c:1389 +#: builtins.c:1388 msgid "" "characters, which are simply copied to standard output, character escape" msgstr "" "characters, which are simply copied to standard output, character escape" -#: builtins.c:1390 +#: builtins.c:1389 msgid "sequences which are converted and copied to the standard output, and" msgstr "sequences which are converted and copied to the standard output, and" -#: builtins.c:1391 +#: builtins.c:1390 msgid "" "format specifications, each of which causes printing of the next successive" msgstr "" "format specifications, each of which causes printing of the next successive" -#: builtins.c:1392 +#: builtins.c:1391 msgid "argument. In addition to the standard printf(1) formats, %b means to" msgstr "argument. In addition to the standard printf(1) formats, %b means to" -#: builtins.c:1393 +#: builtins.c:1392 msgid "expand backslash escape sequences in the corresponding argument, and %q" msgstr "" "expand backslash escape sequences in the corresponding argument, and %q" -#: builtins.c:1394 +#: builtins.c:1393 msgid "means to quote the argument in a way that can be reused as shell input." msgstr "" "means to quote the argument in a way that can be reused as shell input." -#: builtins.c:1401 +#: builtins.c:1400 msgid "For each NAME, specify how arguments are to be completed." msgstr "For each NAME, specify how arguments are to be completed." -#: builtins.c:1402 +#: builtins.c:1401 msgid "If the -p option is supplied, or if no options are supplied, existing" msgstr "If the -p option is supplied, or if no options are supplied, existing" -#: builtins.c:1403 +#: builtins.c:1402 msgid "completion specifications are printed in a way that allows them to be" msgstr "completion specifications are printed in a way that allows them to be" -#: builtins.c:1404 +#: builtins.c:1403 msgid "reused as input. The -r option removes a completion specification for" msgstr "reused as input. The -r option removes a completion specification for" -#: builtins.c:1405 +#: builtins.c:1404 msgid "each NAME, or, if no NAMEs are supplied, all completion specifications." msgstr "" "each NAME, or, if no NAMEs are supplied, all completion specifications." -#: builtins.c:1413 +#: builtins.c:1412 msgid "Display the possible completions depending on the options. Intended" msgstr "Display the possible completions depending on the options. Intended" -#: builtins.c:1414 +#: builtins.c:1413 msgid "" "to be used from within a shell function generating possible completions." msgstr "" "to be used from within a shell function generating possible completions." -#: builtins.c:1415 +#: builtins.c:1414 msgid "If the optional WORD argument is supplied, matches against WORD are" msgstr "If the optional WORD argument is supplied, matches against WORD are" -#: builtins.c:1416 +#: builtins.c:1415 msgid "generated." msgstr "generated." + +#~ msgid "`%s': invalid alias name" +#~ msgstr "‘%s’: invalid alias name" + +#~ msgid "reset to their original values. If ARG is the null string each" +#~ msgstr "reset to their original values. If ARG is the null string each" + +#~ msgid "SIGNAL_SPEC is ignored by the shell and by the commands it invokes." +#~ msgstr "SIGNAL_SPEC is ignored by the shell and by the commands it invokes." + +#~ msgid "" +#~ "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from" +#~ msgstr "" +#~ "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from" + +#~ msgid "the shell. If a SIGNAL_SPEC is DEBUG, ARG is executed after every" +#~ msgstr "the shell. If a SIGNAL_SPEC is DEBUG, ARG is executed after every" + +#~ msgid "" +#~ "each signal number. Each SIGNAL_SPEC is either a signal name in " +#~ msgstr "" +#~ "each signal number. Each SIGNAL_SPEC is either a signal name in " + +#~ msgid "" +#~ "or a signal number. `trap -l' prints a list of signal names and their" +#~ msgstr "" +#~ "or a signal number. ‘trap -l’ prints a list of signal names and " +#~ "their" + +#~ msgid "corresponding numbers. Note that a signal can be sent to the shell" +#~ msgstr "corresponding numbers. Note that a signal can be sent to the shell" + +#~ msgid "with \"kill -signal $$\"." +#~ msgstr "with “kill -signal $$”." + +#~ msgid "job. If you specifiy DIGITS, then that job is used. If you specify" +#~ msgstr "" +#~ "job. If you specifiy DIGITS, then that job is used. If you specify" + +#~ msgid "" +#~ "WORD, then the job whose name begins with WORD is used. Following the" +#~ msgstr "" +#~ "WORD, then the job whose name begins with WORD is used. Following the" + +#~ msgid "\t\twhen the argument to `cd' is not found in the current" +#~ msgstr "\t\twhen the argument to ‘cd’ is not found in the current" + +#~ msgid "\t\tdirectory." +#~ msgstr "\t\tdirectory." diff --git a/po/en@boldquot.po~ b/po/en@boldquot.po~ new file mode 100644 index 000000000..652c51b0c --- /dev/null +++ b/po/en@boldquot.po~ @@ -0,0 +1,4349 @@ +# English translations for GNU bash package. +# Copyright (C) 2004 Free Software Foundation, Inc. +# This file is distributed under the same license as the GNU bash package. +# Automatically generated, 2004. +# +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# +# This catalog furthermore displays the text between the quotation marks in +# bold face, assuming the VT100/XTerm escape sequences. +# +#: builtins/caller.def:128 builtins/caller.def:132 builtins/pushd.def:655 +#: builtins/pushd.def:663 builtins/pushd.def:666 builtins/pushd.def:676 +#: builtins/pushd.def:680 builtins/pushd.def:684 builtins/pushd.def:687 +#: builtins/pushd.def:690 builtins/pushd.def:699 builtins/pushd.def:703 +#: builtins/pushd.def:707 builtins/pushd.def:710 builtins.c:321 builtins.c:325 +#: builtins.c:390 builtins.c:392 builtins.c:401 builtins.c:404 builtins.c:408 +#: builtins.c:445 builtins.c:487 builtins.c:491 builtins.c:498 builtins.c:509 +#: builtins.c:513 builtins.c:552 builtins.c:555 builtins.c:559 builtins.c:562 +#: builtins.c:630 builtins.c:637 builtins.c:692 builtins.c:713 builtins.c:718 +#: builtins.c:722 builtins.c:745 builtins.c:835 builtins.c:919 builtins.c:921 +#: builtins.c:943 builtins.c:946 builtins.c:948 builtins.c:950 builtins.c:952 +#: builtins.c:954 builtins.c:957 builtins.c:966 builtins.c:968 builtins.c:973 +#: builtins.c:976 builtins.c:1019 builtins.c:1024 builtins.c:1028 +#: builtins.c:1032 builtins.c:1034 builtins.c:1047 builtins.c:1062 +#: builtins.c:1226 builtins.c:1231 builtins.c:1305 builtins.c:1309 +#: builtins.c:1313 builtins.c:1316 builtins.c:1319 builtins.c:1331 +#: builtins.c:1335 builtins.c:1339 builtins.c:1342 builtins.c:1354 +#: builtins.c:1362 builtins.c:1365 +msgid "" +msgstr "" +"Project-Id-Version: GNU bash 3.0-rc1\n" +"POT-Creation-Date: 2003-12-22 15:34-0500\n" +"PO-Revision-Date: 2003-12-22 15:34-0500\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Report-Msgid-Bugs-To: bug-bash@gnu.org\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: arrayfunc.c:45 +msgid "bad array subscript" +msgstr "bad array subscript" + +#: arrayfunc.c:306 +#, c-format +msgid "%s: cannot assign to non-numeric index" +msgstr "%s: cannot assign to non-numeric index" + +#: bashhist.c:321 +#, c-format +msgid "%s: cannot create: %s" +msgstr "%s: cannot create: %s" + +#: bashline.c:2791 +msgid "bash_execute_unix_command: cannot find keymap for command" +msgstr "bash_execute_unix_command: cannot find keymap for command" + +#: bashline.c:2840 +#, c-format +msgid "%s: first non-whitespace character is not `\"'" +msgstr "%s: first non-whitespace character is not ‘\"’" + +#: bashline.c:2869 +#, c-format +msgid "no closing `%c' in %s" +msgstr "no closing ‘%c’ in %s" + +#: bashline.c:2903 +#, c-format +msgid "%s: missing colon separator" +msgstr "%s: missing colon separator" + +#: builtins/alias.def:123 +#, c-format +msgid "`%s': invalid alias name" +msgstr "‘%s’: invalid alias name" + +#: builtins/bind.def:194 +#, c-format +msgid "`%s': invalid keymap name" +msgstr "‘%s’: invalid keymap name" + +#: builtins/bind.def:233 +#, c-format +msgid "%s: cannot read: %s" +msgstr "%s: cannot read: %s" + +#: builtins/bind.def:248 +#, c-format +msgid "`%s': cannot unbind" +msgstr "‘%s’: cannot unbind" + +#: builtins/bind.def:283 +#, c-format +msgid "`%s': unknown function name" +msgstr "‘%s’: unknown function name" + +#: builtins/bind.def:291 +#, c-format +msgid "%s is not bound to any keys.\n" +msgstr "%s is not bound to any keys.\n" + +#: builtins/bind.def:295 +#, c-format +msgid "%s can be invoked via " +msgstr "%s can be invoked via " + +#: builtins/break.def:128 +msgid "only meaningful in a `for', `while', or `until' loop" +msgstr "only meaningful in a ‘for’, ‘while’, or ‘until’ loop" + +#: builtins/caller.def:127 builtins.c:320 +msgid "Returns the context of the current subroutine call." +msgstr "Returns the context of the current subroutine call." + +#: builtins/caller.def:129 builtins.c:322 +msgid "Without EXPR, returns returns \"$line $filename\". With EXPR," +msgstr "Without EXPR, returns returns “$line $filename”. With EXPR," + +#: builtins/caller.def:130 builtins.c:323 +msgid "returns \"$line $subroutine $filename\"; this extra information" +msgstr "returns “$line $subroutine $filename”; this extra information" + +#: builtins/caller.def:131 builtins.c:324 +msgid "can be used used to provide a stack trace." +msgstr "can be used used to provide a stack trace." + +#: builtins/caller.def:133 builtins.c:326 +msgid "The value of EXPR indicates how many call frames to go back before the" +msgstr "The value of EXPR indicates how many call frames to go back before the" + +#: builtins/caller.def:134 builtins.c:327 +msgid "current one; the top frame is frame 0." +msgstr "current one; the top frame is frame 0." + +#: builtins/cd.def:188 +msgid "HOME not set" +msgstr "HOME not set" + +#: builtins/cd.def:200 +msgid "OLDPWD not set" +msgstr "OLDPWD not set" + +#: builtins/cd.def:357 +#, c-format +msgid "write error: %s" +msgstr "write error: %s" + +#: builtins/common.c:133 test.c:921 +msgid "too many arguments" +msgstr "too many arguments" + +#: builtins/common.c:157 shell.c:465 shell.c:737 +#, c-format +msgid "%s: option requires an argument" +msgstr "%s: option requires an argument" + +#: builtins/common.c:164 +#, c-format +msgid "%s: numeric argument required" +msgstr "%s: numeric argument required" + +#: builtins/common.c:171 +#, c-format +msgid "%s: not found" +msgstr "%s: not found" + +#: builtins/common.c:180 shell.c:750 +#, c-format +msgid "%s: invalid option" +msgstr "%s: invalid option" + +#: builtins/common.c:187 +#, c-format +msgid "%s: invalid option name" +msgstr "%s: invalid option name" + +#: builtins/common.c:194 general.c:229 general.c:234 +#, c-format +msgid "`%s': not a valid identifier" +msgstr "‘%s’: not a valid identifier" + +#: builtins/common.c:201 +#, c-format +msgid "%s: invalid number" +msgstr "%s: invalid number" + +#: builtins/common.c:208 +#, c-format +msgid "%s: invalid signal specification" +msgstr "%s: invalid signal specification" + +#: builtins/common.c:215 +#, c-format +msgid "`%s': not a pid or valid job spec" +msgstr "‘%s’: not a pid or valid job spec" + +#: builtins/common.c:222 error.c:453 +#, c-format +msgid "%s: readonly variable" +msgstr "%s: readonly variable" + +#: builtins/common.c:230 +#, c-format +msgid "%s: %s out of range" +msgstr "%s: %s out of range" + +#: builtins/common.c:230 builtins/common.c:232 +msgid "argument" +msgstr "argument" + +#: builtins/common.c:232 +#, c-format +msgid "%s out of range" +msgstr "%s out of range" + +#: builtins/common.c:240 +#, c-format +msgid "%s: no such job" +msgstr "%s: no such job" + +#: builtins/common.c:248 +#, c-format +msgid "%s: no job control" +msgstr "%s: no job control" + +#: builtins/common.c:250 +msgid "no job control" +msgstr "no job control" + +#: builtins/common.c:260 +#, c-format +msgid "%s: restricted" +msgstr "%s: restricted" + +#: builtins/common.c:262 +msgid "restricted" +msgstr "restricted" + +#: builtins/common.c:270 +#, c-format +msgid "%s: not a shell builtin" +msgstr "%s: not a shell builtin" + +#: builtins/common.c:486 +#, c-format +msgid "%s: error retrieving current directory: %s: %s\n" +msgstr "%s: error retrieving current directory: %s: %s\n" + +#: builtins/common.c:553 builtins/common.c:555 +#, c-format +msgid "%s: ambiguous job spec" +msgstr "%s: ambiguous job spec" + +#: builtins/complete.def:251 +#, c-format +msgid "%s: invalid action name" +msgstr "%s: invalid action name" + +#: builtins/complete.def:381 builtins/complete.def:524 +#, c-format +msgid "%s: no completion specification" +msgstr "%s: no completion specification" + +#: builtins/complete.def:571 +msgid "warning: -F option may not work as you expect" +msgstr "warning: -F option may not work as you expect" + +#: builtins/complete.def:573 +msgid "warning: -C option may not work as you expect" +msgstr "warning: -C option may not work as you expect" + +#: builtins/declare.def:105 +msgid "can only be used in a function" +msgstr "can only be used in a function" + +#: builtins/declare.def:295 +msgid "cannot use `-f' to make functions" +msgstr "cannot use ‘-f’ to make functions" + +#: builtins/declare.def:307 execute_cmd.c:3949 +#, c-format +msgid "%s: readonly function" +msgstr "%s: readonly function" + +#: builtins/declare.def:389 +#, c-format +msgid "%s: cannot destroy array variables in this way" +msgstr "%s: cannot destroy array variables in this way" + +#: builtins/enable.def:128 builtins/enable.def:136 +msgid "dynamic loading not available" +msgstr "dynamic loading not available" + +#: builtins/enable.def:303 +#, c-format +msgid "cannot open shared object %s: %s" +msgstr "cannot open shared object %s: %s" + +#: builtins/enable.def:326 +#, c-format +msgid "cannot find %s in shared object %s: %s" +msgstr "cannot find %s in shared object %s: %s" + +#: builtins/enable.def:450 +#, c-format +msgid "%s: not dynamically loaded" +msgstr "%s: not dynamically loaded" + +#: builtins/enable.def:465 +#, c-format +msgid "%s: cannot delete: %s" +msgstr "%s: cannot delete: %s" + +#: builtins/evalfile.c:128 execute_cmd.c:3821 shell.c:1395 +#, c-format +msgid "%s: is a directory" +msgstr "%s: is a directory" + +#: builtins/evalfile.c:133 +#, c-format +msgid "%s: not a regular file" +msgstr "%s: not a regular file" + +#: builtins/evalfile.c:141 +#, c-format +msgid "%s: file is too large" +msgstr "%s: file is too large" + +#: builtins/exec.def:205 +#, c-format +msgid "%s: cannot execute: %s" +msgstr "%s: cannot execute: %s" + +#: builtins/exit.def:83 +msgid "not login shell: use `exit'" +msgstr "not login shell: use ‘exit’" + +#: builtins/exit.def:111 +msgid "There are stopped jobs.\n" +msgstr "There are stopped jobs.\n" + +#: builtins/fc.def:252 +msgid "no command found" +msgstr "no command found" + +#: builtins/fc.def:317 +msgid "history specification" +msgstr "history specification" + +#: builtins/fc.def:338 +#, c-format +msgid "%s: cannot open temp file: %s" +msgstr "%s: cannot open temp file: %s" + +#: builtins/fg_bg.def:133 +#, c-format +msgid "job %d started without job control" +msgstr "job %d started without job control" + +#: builtins/getopt.c:109 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: illegal option -- %c\n" + +#: builtins/getopt.c:110 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: option requires an argument -- %c\n" + +#: builtins/hash.def:83 +msgid "hashing disabled" +msgstr "hashing disabled" + +#: builtins/hash.def:128 +#, c-format +msgid "%s: hash table empty\n" +msgstr "%s: hash table empty\n" + +#: builtins/help.def:108 +msgid "Shell commands matching keywords `" +msgstr "Shell commands matching keywords `" + +#: builtins/help.def:110 +msgid "Shell commands matching keyword `" +msgstr "Shell commands matching keyword `" + +#: builtins/help.def:138 +#, c-format +msgid "" +"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgstr "" +"no help topics match ‘%s’. Try ‘help help’ or ‘man -k %s’ " +"or ‘info %s’." + +#: builtins/help.def:164 +#, c-format +msgid "%s: cannot open: %s" +msgstr "%s: cannot open: %s" + +#: builtins/help.def:182 +msgid "" +"These shell commands are defined internally. Type `help' to see this list.\n" +"Type `help name' to find out more about the function `name'.\n" +"Use `info bash' to find out more about the shell in general.\n" +"Use `man -k' or `info' to find out more about commands not in this list.\n" +"\n" +"A star (*) next to a name means that the command is disabled.\n" +"\n" +msgstr "" +"These shell commands are defined internally. Type ‘help’ to see this " +"list.\n" +"Type ‘help name’ to find out more about the function ‘name’.\n" +"Use ‘info bash’ to find out more about the shell in general.\n" +"Use ‘man -k’ or ‘info’ to find out more about commands not in " +"this list.\n" +"\n" +"A star (*) next to a name means that the command is disabled.\n" +"\n" + +#: builtins/history.def:148 +msgid "cannot use more than one of -anrw" +msgstr "cannot use more than one of -anrw" + +#: builtins/history.def:180 +msgid "history position" +msgstr "history position" + +#: builtins/history.def:390 +#, c-format +msgid "%s: history expansion failed" +msgstr "%s: history expansion failed" + +#: builtins/jobs.def:99 +msgid "no other options allowed with `-x'" +msgstr "no other options allowed with ‘-x’" + +#: builtins/kill.def:187 +#, c-format +msgid "%s: arguments must be process or job IDs" +msgstr "%s: arguments must be process or job IDs" + +#: builtins/kill.def:248 +msgid "Unknown error" +msgstr "Unknown error" + +#: builtins/let.def:94 builtins/let.def:119 expr.c:496 expr.c:511 +msgid "expression expected" +msgstr "expression expected" + +#: builtins/printf.def:249 +#, c-format +msgid "`%s': missing format character" +msgstr "‘%s’: missing format character" + +#: builtins/printf.def:408 +#, c-format +msgid "`%c': invalid format character" +msgstr "‘%c’: invalid format character" + +#: builtins/printf.def:601 +msgid "missing hex digit for \\x" +msgstr "missing hex digit for \\x" + +#: builtins/pushd.def:168 +msgid "no other directory" +msgstr "no other directory" + +#: builtins/pushd.def:435 +msgid "" +msgstr "" + +#: builtins/pushd.def:652 builtins.c:1351 +msgid "Display the list of currently remembered directories. Directories" +msgstr "Display the list of currently remembered directories. Directories" + +#: builtins/pushd.def:653 builtins.c:1352 +msgid "find their way onto the list with the `pushd' command; you can get" +msgstr "" +"find their way onto the list with the ‘pushd’ command; you can get" + +#: builtins/pushd.def:654 builtins.c:1353 +msgid "back up through the list with the `popd' command." +msgstr "back up through the list with the ‘popd’ command." + +#: builtins/pushd.def:656 builtins.c:1355 +msgid "The -l flag specifies that `dirs' should not print shorthand versions" +msgstr "" +"The -l flag specifies that ‘dirs’ should not print shorthand versions" + +#: builtins/pushd.def:657 builtins.c:1356 +msgid "of directories which are relative to your home directory. This means" +msgstr "of directories which are relative to your home directory. This means" + +#: builtins/pushd.def:658 builtins.c:1357 +msgid "that `~/bin' might be displayed as `/homes/bfox/bin'. The -v flag" +msgstr "" +"that ‘~/bin’ might be displayed as ‘/homes/bfox/bin’. The -v " +"flag" + +#: builtins/pushd.def:659 builtins.c:1358 +msgid "causes `dirs' to print the directory stack with one entry per line," +msgstr "" +"causes ‘dirs’ to print the directory stack with one entry per line," + +#: builtins/pushd.def:660 builtins.c:1359 +msgid "prepending the directory name with its position in the stack. The -p" +msgstr "prepending the directory name with its position in the stack. The -p" + +#: builtins/pushd.def:661 builtins.c:1360 +msgid "flag does the same thing, but the stack position is not prepended." +msgstr "flag does the same thing, but the stack position is not prepended." + +#: builtins/pushd.def:662 builtins.c:1361 +msgid "The -c flag clears the directory stack by deleting all of the elements." +msgstr "" +"The -c flag clears the directory stack by deleting all of the elements." + +#: builtins/pushd.def:664 +msgid "+N displays the Nth entry counting from the left of the list shown by" +msgstr "" +"+N displays the Nth entry counting from the left of the list shown by" + +#: builtins/pushd.def:665 builtins/pushd.def:668 +msgid " dirs when invoked without options, starting with zero." +msgstr " dirs when invoked without options, starting with zero." + +#: builtins/pushd.def:667 +msgid "" +"-N displays the Nth entry counting from the right of the list shown by" +msgstr "" +"-N displays the Nth entry counting from the right of the list shown by" + +#: builtins/pushd.def:673 builtins.c:1302 +msgid "Adds a directory to the top of the directory stack, or rotates" +msgstr "Adds a directory to the top of the directory stack, or rotates" + +#: builtins/pushd.def:674 builtins.c:1303 +msgid "the stack, making the new top of the stack the current working" +msgstr "the stack, making the new top of the stack the current working" + +#: builtins/pushd.def:675 builtins.c:1304 +msgid "directory. With no arguments, exchanges the top two directories." +msgstr "directory. With no arguments, exchanges the top two directories." + +#: builtins/pushd.def:677 +msgid "+N Rotates the stack so that the Nth directory (counting" +msgstr "+N Rotates the stack so that the Nth directory (counting" + +#: builtins/pushd.def:678 +msgid " from the left of the list shown by `dirs', starting with" +msgstr " from the left of the list shown by ‘dirs’, starting with" + +#: builtins/pushd.def:679 builtins/pushd.def:683 +msgid " zero) is at the top." +msgstr " zero) is at the top." + +#: builtins/pushd.def:681 +msgid "-N Rotates the stack so that the Nth directory (counting" +msgstr "-N Rotates the stack so that the Nth directory (counting" + +#: builtins/pushd.def:682 +msgid " from the right of the list shown by `dirs', starting with" +msgstr " from the right of the list shown by ‘dirs’, starting with" + +#: builtins/pushd.def:685 +msgid "-n suppress the normal change of directory when adding directories" +msgstr "-n suppress the normal change of directory when adding directories" + +#: builtins/pushd.def:686 +msgid " to the stack, so only the stack is manipulated." +msgstr " to the stack, so only the stack is manipulated." + +#: builtins/pushd.def:688 +msgid "dir adds DIR to the directory stack at the top, making it the" +msgstr "dir adds DIR to the directory stack at the top, making it the" + +#: builtins/pushd.def:689 +msgid " new current working directory." +msgstr " new current working directory." + +#: builtins/pushd.def:691 builtins/pushd.def:711 builtins.c:1320 +#: builtins.c:1343 +msgid "You can see the directory stack with the `dirs' command." +msgstr "You can see the directory stack with the ‘dirs’ command." + +#: builtins/pushd.def:696 builtins.c:1328 +msgid "Removes entries from the directory stack. With no arguments," +msgstr "Removes entries from the directory stack. With no arguments," + +#: builtins/pushd.def:697 builtins.c:1329 +msgid "removes the top directory from the stack, and cd's to the new" +msgstr "removes the top directory from the stack, and cd's to the new" + +#: builtins/pushd.def:698 builtins.c:1330 +msgid "top directory." +msgstr "top directory." + +#: builtins/pushd.def:700 +msgid "+N removes the Nth entry counting from the left of the list" +msgstr "+N removes the Nth entry counting from the left of the list" + +#: builtins/pushd.def:701 +msgid " shown by `dirs', starting with zero. For example: `popd +0'" +msgstr "" +" shown by ‘dirs’, starting with zero. For example: ‘popd +0’" + +#: builtins/pushd.def:702 +msgid " removes the first directory, `popd +1' the second." +msgstr " removes the first directory, ‘popd +1’ the second." + +#: builtins/pushd.def:704 +msgid "-N removes the Nth entry counting from the right of the list" +msgstr "-N removes the Nth entry counting from the right of the list" + +#: builtins/pushd.def:705 +msgid " shown by `dirs', starting with zero. For example: `popd -0'" +msgstr "" +" shown by ‘dirs’, starting with zero. For example: ‘popd -0’" + +#: builtins/pushd.def:706 +msgid " removes the last directory, `popd -1' the next to last." +msgstr " removes the last directory, ‘popd -1’ the next to last." + +#: builtins/pushd.def:708 +msgid "-n suppress the normal change of directory when removing directories" +msgstr "-n suppress the normal change of directory when removing directories" + +#: builtins/pushd.def:709 +msgid " from the stack, so only the stack is manipulated." +msgstr " from the stack, so only the stack is manipulated." + +#: builtins/read.def:207 +#, c-format +msgid "%s: invalid timeout specification" +msgstr "%s: invalid timeout specification" + +#: builtins/read.def:230 +#, c-format +msgid "%s: invalid file descriptor specification" +msgstr "%s: invalid file descriptor specification" + +#: builtins/read.def:237 +#, c-format +msgid "%d: invalid file descriptor: %s" +msgstr "%d: invalid file descriptor: %s" + +#: builtins/read.def:463 +#, c-format +msgid "read error: %d: %s" +msgstr "read error: %d: %s" + +#: builtins/return.def:63 +msgid "can only `return' from a function or sourced script" +msgstr "can only ‘return’ from a function or sourced script" + +#: builtins/set.def:743 +msgid "cannot simultaneously unset a function and a variable" +msgstr "cannot simultaneously unset a function and a variable" + +#: builtins/set.def:780 +#, c-format +msgid "%s: cannot unset" +msgstr "%s: cannot unset" + +#: builtins/set.def:787 +#, c-format +msgid "%s: cannot unset: readonly %s" +msgstr "%s: cannot unset: readonly %s" + +#: builtins/set.def:798 +#, c-format +msgid "%s: not an array variable" +msgstr "%s: not an array variable" + +#: builtins/setattr.def:165 +#, c-format +msgid "%s: not a function" +msgstr "%s: not a function" + +#: builtins/shift.def:66 builtins/shift.def:72 +msgid "shift count" +msgstr "shift count" + +#: builtins/shopt.def:226 +msgid "cannot set and unset shell options simultaneously" +msgstr "cannot set and unset shell options simultaneously" + +#: builtins/shopt.def:291 +#, c-format +msgid "%s: invalid shell option name" +msgstr "%s: invalid shell option name" + +#: builtins/source.def:117 +msgid "filename argument required" +msgstr "filename argument required" + +#: builtins/source.def:137 +#, c-format +msgid "%s: file not found" +msgstr "%s: file not found" + +#: builtins/suspend.def:93 +msgid "cannot suspend" +msgstr "cannot suspend" + +#: builtins/suspend.def:103 +msgid "cannot suspend a login shell" +msgstr "cannot suspend a login shell" + +#: builtins/type.def:231 +#, c-format +msgid "%s is aliased to `%s'\n" +msgstr "%s is aliased to ‘%s’\n" + +#: builtins/type.def:252 +#, c-format +msgid "%s is a shell keyword\n" +msgstr "%s is a shell keyword\n" + +#: builtins/type.def:272 +#, c-format +msgid "%s is a function\n" +msgstr "%s is a function\n" + +#: builtins/type.def:297 +#, c-format +msgid "%s is a shell builtin\n" +msgstr "%s is a shell builtin\n" + +#: builtins/type.def:318 +#, c-format +msgid "%s is %s\n" +msgstr "%s is %s\n" + +#: builtins/type.def:338 +#, c-format +msgid "%s is hashed (%s)\n" +msgstr "%s is hashed (%s)\n" + +#: builtins/ulimit.def:332 +#, c-format +msgid "%s: invalid limit argument" +msgstr "%s: invalid limit argument" + +#: builtins/ulimit.def:358 +#, c-format +msgid "`%c': bad command" +msgstr "‘%c’: bad command" + +#: builtins/ulimit.def:387 +#, c-format +msgid "%s: cannot get limit: %s" +msgstr "%s: cannot get limit: %s" + +#: builtins/ulimit.def:425 +#, c-format +msgid "%s: cannot modify limit: %s" +msgstr "%s: cannot modify limit: %s" + +#: builtins/umask.def:112 +msgid "octal number" +msgstr "octal number" + +#: builtins/umask.def:226 +#, c-format +msgid "`%c': invalid symbolic mode operator" +msgstr "‘%c’: invalid symbolic mode operator" + +#: builtins/umask.def:279 +#, c-format +msgid "`%c': invalid symbolic mode character" +msgstr "‘%c’: invalid symbolic mode character" + +#: error.c:165 +#, c-format +msgid "last command: %s\n" +msgstr "last command: %s\n" + +#: error.c:173 +msgid "Aborting..." +msgstr "Aborting..." + +#: error.c:260 +#, c-format +msgid "%s: warning: " +msgstr "%s: warning: " + +#: error.c:405 +msgid "unknown command error" +msgstr "unknown command error" + +#: error.c:406 +msgid "bad command type" +msgstr "bad command type" + +#: error.c:407 +msgid "bad connector" +msgstr "bad connector" + +#: error.c:408 +msgid "bad jump" +msgstr "bad jump" + +#: error.c:446 +#, c-format +msgid "%s: unbound variable" +msgstr "%s: unbound variable" + +#: eval.c:175 +msgid "timed out waiting for input: auto-logout\n" +msgstr "timed out waiting for input: auto-logout\n" + +#: execute_cmd.c:466 +#, c-format +msgid "cannot redirect standard input from /dev/null: %s" +msgstr "cannot redirect standard input from /dev/null: %s" + +#: execute_cmd.c:1036 +#, c-format +msgid "TIMEFORMAT: `%c': invalid format character" +msgstr "TIMEFORMAT: ‘%c’: invalid format character" + +#: execute_cmd.c:3521 +#, c-format +msgid "%s: restricted: cannot specify `/' in command names" +msgstr "%s: restricted: cannot specify ‘/’ in command names" + +#: execute_cmd.c:3609 +#, c-format +msgid "%s: command not found" +msgstr "%s: command not found" + +#: execute_cmd.c:3839 +#, c-format +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: bad interpreter" + +#: execute_cmd.c:3876 +#, c-format +msgid "%s: cannot execute binary file" +msgstr "%s: cannot execute binary file" + +#: execute_cmd.c:3988 +#, c-format +msgid "cannot duplicate fd %d to fd %d" +msgstr "cannot duplicate fd %d to fd %d" + +#: expr.c:239 +msgid "expression recursion level exceeded" +msgstr "expression recursion level exceeded" + +#: expr.c:263 +msgid "recursion stack underflow" +msgstr "recursion stack underflow" + +#: expr.c:374 +msgid "syntax error in expression" +msgstr "syntax error in expression" + +#: expr.c:414 +msgid "attempted assignment to non-variable" +msgstr "attempted assignment to non-variable" + +#: expr.c:435 expr.c:440 expr.c:750 +msgid "division by 0" +msgstr "division by 0" + +#: expr.c:466 +msgid "bug: bad expassign token" +msgstr "bug: bad expassign token" + +#: expr.c:508 +msgid "`:' expected for conditional expression" +msgstr "‘:’ expected for conditional expression" + +#: expr.c:775 +msgid "exponent less than 0" +msgstr "exponent less than 0" + +#: expr.c:819 +msgid "identifier expected after pre-increment or pre-decrement" +msgstr "identifier expected after pre-increment or pre-decrement" + +#: expr.c:847 +msgid "missing `)'" +msgstr "missing ‘)’" + +#: expr.c:871 +msgid "syntax error: operand expected" +msgstr "syntax error: operand expected" + +#: expr.c:1146 +msgid "invalid number" +msgstr "invalid number" + +#: expr.c:1150 +msgid "invalid arithmetic base" +msgstr "invalid arithmetic base" + +#: expr.c:1170 +msgid "value too great for base" +msgstr "value too great for base" + +#: general.c:60 +msgid "getcwd: cannot access parent directories" +msgstr "getcwd: cannot access parent directories" + +#: input.c:231 +#, c-format +msgid "cannot allocate new file descriptor for bash input from fd %d" +msgstr "cannot allocate new file descriptor for bash input from fd %d" + +#: input.c:239 +#, c-format +msgid "save_bash_input: buffer already exists for new fd %d" +msgstr "save_bash_input: buffer already exists for new fd %d" + +#: jobs.c:693 +#, c-format +msgid "deleting stopped job %d with process group %ld" +msgstr "deleting stopped job %d with process group %ld" + +#: jobs.c:1001 +#, c-format +msgid "describe_pid: %ld: no such pid" +msgstr "describe_pid: %ld: no such pid" + +#: jobs.c:1632 nojobs.c:648 +#, c-format +msgid "wait: pid %ld is not a child of this shell" +msgstr "wait: pid %ld is not a child of this shell" + +#: jobs.c:1815 +#, c-format +msgid "wait_for: No record of process %ld" +msgstr "wait_for: No record of process %ld" + +#: jobs.c:2062 +#, c-format +msgid "wait_for_job: job %d is stopped" +msgstr "wait_for_job: job %d is stopped" + +#: jobs.c:2284 +#, c-format +msgid "%s: job has terminated" +msgstr "%s: job has terminated" + +#: jobs.c:2293 +#, c-format +msgid "%s: job %d already in background" +msgstr "%s: job %d already in background" + +#: jobs.c:3037 +msgid "no job control in this shell" +msgstr "no job control in this shell" + +#: lib/malloc/malloc.c:298 +#, c-format +msgid "malloc: failed assertion: %s\n" +msgstr "malloc: failed assertion: %s\n" + +#: lib/malloc/malloc.c:314 +#, c-format +msgid "" +"\r\n" +"malloc: %s:%d: assertion botched\r\n" +msgstr "" +"\r\n" +"malloc: %s:%d: assertion botched\r\n" + +#: lib/malloc/malloc.c:740 +msgid "malloc: block on free list clobbered" +msgstr "malloc: block on free list clobbered" + +#: lib/malloc/malloc.c:817 +msgid "free: called with already freed block argument" +msgstr "free: called with already freed block argument" + +#: lib/malloc/malloc.c:820 +msgid "free: called with unallocated block argument" +msgstr "free: called with unallocated block argument" + +#: lib/malloc/malloc.c:839 +msgid "free: underflow detected; mh_nbytes out of range" +msgstr "free: underflow detected; mh_nbytes out of range" + +#: lib/malloc/malloc.c:845 +msgid "free: start and end chunk sizes differ" +msgstr "free: start and end chunk sizes differ" + +#: lib/malloc/malloc.c:942 +msgid "realloc: called with unallocated block argument" +msgstr "realloc: called with unallocated block argument" + +#: lib/malloc/malloc.c:957 +msgid "realloc: underflow detected; mh_nbytes out of range" +msgstr "realloc: underflow detected; mh_nbytes out of range" + +#: lib/malloc/malloc.c:963 +msgid "realloc: start and end chunk sizes differ" +msgstr "realloc: start and end chunk sizes differ" + +#: lib/malloc/table.c:175 +msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" +msgstr "register_alloc: alloc table is full with FIND_ALLOC?\n" + +#: lib/malloc/table.c:182 +#, c-format +msgid "register_alloc: %p already in table as allocated?\n" +msgstr "register_alloc: %p already in table as allocated?\n" + +#: lib/malloc/table.c:218 +#, c-format +msgid "register_free: %p already in table as free?\n" +msgstr "register_free: %p already in table as free?\n" + +#: lib/malloc/watch.c:46 +msgid "allocated" +msgstr "allocated" + +#: lib/malloc/watch.c:48 +msgid "freed" +msgstr "freed" + +#: lib/malloc/watch.c:50 +msgid "requesting resize" +msgstr "requesting resize" + +#: lib/malloc/watch.c:52 +msgid "just resized" +msgstr "just resized" + +#: lib/malloc/watch.c:54 +msgid "bug: unknown operation" +msgstr "bug: unknown operation" + +#: lib/malloc/watch.c:56 +#, c-format +msgid "malloc: watch alert: %p %s " +msgstr "malloc: watch alert: %p %s " + +#: lib/sh/fmtulong.c:101 +msgid "invalid base" +msgstr "invalid base" + +#: lib/sh/netopen.c:158 +#, c-format +msgid "%s: host unknown" +msgstr "%s: host unknown" + +#: lib/sh/netopen.c:165 +#, c-format +msgid "%s: invalid service" +msgstr "%s: invalid service" + +#: lib/sh/netopen.c:296 +#, c-format +msgid "%s: bad network path specification" +msgstr "%s: bad network path specification" + +#: lib/sh/netopen.c:336 +msgid "network operations not supported" +msgstr "network operations not supported" + +#: mailcheck.c:382 +msgid "You have mail in $_" +msgstr "You have mail in $_" + +#: mailcheck.c:407 +msgid "You have new mail in $_" +msgstr "You have new mail in $_" + +#: mailcheck.c:423 +#, c-format +msgid "The mail in %s has been read\n" +msgstr "The mail in %s has been read\n" + +#: make_cmd.c:318 +msgid "syntax error: arithmetic expression required" +msgstr "syntax error: arithmetic expression required" + +#: make_cmd.c:320 +msgid "syntax error: `;' unexpected" +msgstr "syntax error: ‘;’ unexpected" + +#: make_cmd.c:321 +#, c-format +msgid "syntax error: `((%s))'" +msgstr "syntax error: ‘((%s))’" + +#: make_cmd.c:560 +#, c-format +msgid "make_here_document: bad instruction type %d" +msgstr "make_here_document: bad instruction type %d" + +#: make_cmd.c:730 +#, c-format +msgid "make_redirection: redirection instruction `%d' out of range" +msgstr "make_redirection: redirection instruction ‘%d’ out of range" + +#: parse.y:2726 +#, c-format +msgid "unexpected EOF while looking for matching `%c'" +msgstr "unexpected EOF while looking for matching ‘%c’" + +#: parse.y:3011 +msgid "unexpected EOF while looking for `]]'" +msgstr "unexpected EOF while looking for ‘]]’" + +#: parse.y:3016 +#, c-format +msgid "syntax error in conditional expression: unexpected token `%s'" +msgstr "syntax error in conditional expression: unexpected token ‘%s’" + +#: parse.y:3020 +msgid "syntax error in conditional expression" +msgstr "syntax error in conditional expression" + +#: parse.y:3098 +#, c-format +msgid "unexpected token `%s', expected `)'" +msgstr "unexpected token ‘%s’, expected ‘)’" + +#: parse.y:3102 +msgid "expected `)'" +msgstr "expected ‘)’" + +#: parse.y:3130 +#, c-format +msgid "unexpected argument `%s' to conditional unary operator" +msgstr "unexpected argument ‘%s’ to conditional unary operator" + +#: parse.y:3134 +msgid "unexpected argument to conditional unary operator" +msgstr "unexpected argument to conditional unary operator" + +#: parse.y:3171 +#, c-format +msgid "unexpected token `%s', conditional binary operator expected" +msgstr "unexpected token ‘%s’, conditional binary operator expected" + +#: parse.y:3175 +msgid "conditional binary operator expected" +msgstr "conditional binary operator expected" + +#: parse.y:3191 +#, c-format +msgid "unexpected argument `%s' to conditional binary operator" +msgstr "unexpected argument ‘%s’ to conditional binary operator" + +#: parse.y:3195 +msgid "unexpected argument to conditional binary operator" +msgstr "unexpected argument to conditional binary operator" + +#: parse.y:3206 +#, c-format +msgid "unexpected token `%c' in conditional command" +msgstr "unexpected token ‘%c’ in conditional command" + +#: parse.y:3209 +#, c-format +msgid "unexpected token `%s' in conditional command" +msgstr "unexpected token ‘%s’ in conditional command" + +#: parse.y:3213 +#, c-format +msgid "unexpected token %d in conditional command" +msgstr "unexpected token %d in conditional command" + +#: parse.y:4400 +#, c-format +msgid "syntax error near unexpected token `%s'" +msgstr "syntax error near unexpected token ‘%s’" + +#: parse.y:4418 +#, c-format +msgid "syntax error near `%s'" +msgstr "syntax error near ‘%s’" + +#: parse.y:4428 +msgid "syntax error: unexpected end of file" +msgstr "syntax error: unexpected end of file" + +#: parse.y:4428 +msgid "syntax error" +msgstr "syntax error" + +#: parse.y:4490 +#, c-format +msgid "Use \"%s\" to leave the shell.\n" +msgstr "Use “%s” to leave the shell.\n" + +#: parse.y:4649 +msgid "unexpected EOF while looking for matching `)'" +msgstr "unexpected EOF while looking for matching ‘)’" + +#: pcomplete.c:988 +#, c-format +msgid "completion: function `%s' not found" +msgstr "completion: function ‘%s’ not found" + +#: pcomplib.c:179 +#, c-format +msgid "progcomp_insert: %s: NULL COMPSPEC" +msgstr "progcomp_insert: %s: NULL COMPSPEC" + +#: print_cmd.c:260 +#, c-format +msgid "print_command: bad connector `%d'" +msgstr "print_command: bad connector ‘%d’" + +#: print_cmd.c:1172 +#, c-format +msgid "cprintf: `%c': invalid format character" +msgstr "cprintf: ‘%c’: invalid format character" + +#: redir.c:99 +msgid "file descriptor out of range" +msgstr "file descriptor out of range" + +#: redir.c:141 +#, c-format +msgid "%s: ambiguous redirect" +msgstr "%s: ambiguous redirect" + +#: redir.c:145 +#, c-format +msgid "%s: cannot overwrite existing file" +msgstr "%s: cannot overwrite existing file" + +#: redir.c:150 +#, c-format +msgid "%s: restricted: cannot redirect output" +msgstr "%s: restricted: cannot redirect output" + +#: redir.c:155 +#, c-format +msgid "cannot create temp file for here document: %s" +msgstr "cannot create temp file for here document: %s" + +#: redir.c:509 +msgid "/dev/(tcp|udp)/host/port not supported without networking" +msgstr "/dev/(tcp|udp)/host/port not supported without networking" + +#: redir.c:949 +msgid "redirection error: cannot duplicate fd" +msgstr "redirection error: cannot duplicate fd" + +#: shell.c:302 +msgid "could not find /tmp, please create!" +msgstr "could not find /tmp, please create!" + +#: shell.c:306 +msgid "/tmp must be a valid directory name" +msgstr "/tmp must be a valid directory name" + +#: shell.c:839 +#, c-format +msgid "%c%c: invalid option" +msgstr "%c%c: invalid option" + +#: shell.c:1590 +msgid "I have no name!" +msgstr "I have no name!" + +#: shell.c:1725 +#, c-format +msgid "" +"Usage:\t%s [GNU long option] [option] ...\n" +"\t%s [GNU long option] [option] script-file ...\n" +msgstr "" +"Usage:\t%s [GNU long option] [option] ...\n" +"\t%s [GNU long option] [option] script-file ...\n" + +#: shell.c:1727 +msgid "GNU long options:\n" +msgstr "GNU long options:\n" + +#: shell.c:1731 +msgid "Shell options:\n" +msgstr "Shell options:\n" + +#: shell.c:1732 +msgid "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n" +msgstr "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n" + +#: shell.c:1747 +#, c-format +msgid "\t-%s or -o option\n" +msgstr "\t-%s or -o option\n" + +#: shell.c:1753 +#, c-format +msgid "Type `%s -c \"help set\"' for more information about shell options.\n" +msgstr "" +"Type ‘%s -c “help set”’ for more information about shell " +"options.\n" + +#: shell.c:1754 +#, c-format +msgid "Type `%s -c help' for more information about shell builtin commands.\n" +msgstr "" +"Type ‘%s -c help’ for more information about shell builtin commands.\n" + +#: shell.c:1755 +msgid "Use the `bashbug' command to report bugs.\n" +msgstr "Use the ‘bashbug’ command to report bugs.\n" + +#: sig.c:485 +#, c-format +msgid "sigprocmask: %d: invalid operation" +msgstr "sigprocmask: %d: invalid operation" + +#: subst.c:1011 +#, c-format +msgid "bad substitution: no closing `%s' in %s" +msgstr "bad substitution: no closing ‘%s’ in %s" + +#: subst.c:2020 +#, c-format +msgid "%s: cannot assign list to array member" +msgstr "%s: cannot assign list to array member" + +#: subst.c:3516 subst.c:3532 +msgid "cannot make pipe for process substitution" +msgstr "cannot make pipe for process substitution" + +#: subst.c:3563 +msgid "cannot make child for process substitution" +msgstr "cannot make child for process substitution" + +#: subst.c:3608 +#, c-format +msgid "cannot open named pipe %s for reading" +msgstr "cannot open named pipe %s for reading" + +#: subst.c:3610 +#, c-format +msgid "cannot open named pipe %s for writing" +msgstr "cannot open named pipe %s for writing" + +#: subst.c:3618 +#, c-format +msgid "cannout reset nodelay mode for fd %d" +msgstr "cannout reset nodelay mode for fd %d" + +#: subst.c:3628 +#, c-format +msgid "cannot duplicate named pipe %s as fd %d" +msgstr "cannot duplicate named pipe %s as fd %d" + +#: subst.c:3803 +msgid "cannot make pipe for command substitution" +msgstr "cannot make pipe for command substitution" + +#: subst.c:3832 +msgid "cannot make child for command substitution" +msgstr "cannot make child for command substitution" + +#: subst.c:3849 +msgid "command_substitute: cannot duplicate pipe as fd 1" +msgstr "command_substitute: cannot duplicate pipe as fd 1" + +#: subst.c:4284 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parameter null or not set" + +#: subst.c:4529 +#, c-format +msgid "%s: substring expression < 0" +msgstr "%s: substring expression < 0" + +#: subst.c:5209 +#, c-format +msgid "%s: bad substitution" +msgstr "%s: bad substitution" + +#: subst.c:5283 +#, c-format +msgid "$%s: cannot assign in this way" +msgstr "$%s: cannot assign in this way" + +#: subst.c:6652 +#, c-format +msgid "no match: %s" +msgstr "no match: %s" + +#: test.c:154 +msgid "argument expected" +msgstr "argument expected" + +#: test.c:163 +#, c-format +msgid "%s: integer expression expected" +msgstr "%s: integer expression expected" + +#: test.c:361 +msgid "`)' expected" +msgstr "‘)’ expected" + +#: test.c:363 +#, c-format +msgid "`)' expected, found %s" +msgstr "‘)’ expected, found %s" + +#: test.c:378 test.c:787 test.c:790 +#, c-format +msgid "%s: unary operator expected" +msgstr "%s: unary operator expected" + +#: test.c:543 test.c:830 +#, c-format +msgid "%s: binary operator expected" +msgstr "%s: binary operator expected" + +#: test.c:905 +msgid "missing `]'" +msgstr "missing ‘]’" + +#: trap.c:194 +msgid "invalid signal number" +msgstr "invalid signal number" + +#: trap.c:309 +#, c-format +msgid "run_pending_traps: bad value in trap_list[%d]: %p" +msgstr "run_pending_traps: bad value in trap_list[%d]: %p" + +#: trap.c:313 +#, c-format +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgstr "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" + +#: trap.c:349 +#, c-format +msgid "trap_handler: bad signal %d" +msgstr "trap_handler: bad signal %d" + +#: variables.c:310 +#, c-format +msgid "error importing function definition for `%s'" +msgstr "error importing function definition for ‘%s’" + +#: variables.c:670 +#, c-format +msgid "shell level (%d) too high, resetting to 1" +msgstr "shell level (%d) too high, resetting to 1" + +#: variables.c:1610 +msgid "make_local_variable: no function context at current scope" +msgstr "make_local_variable: no function context at current scope" + +#: variables.c:2709 +msgid "all_local_variables: no function context at current scope" +msgstr "all_local_variables: no function context at current scope" + +#: variables.c:2923 variables.c:2932 +#, c-format +msgid "invalid character %d in exportstr for %s" +msgstr "invalid character %d in exportstr for %s" + +#: variables.c:2938 +#, c-format +msgid "no `=' in exportstr for %s" +msgstr "no ‘=’ in exportstr for %s" + +#: variables.c:3363 +msgid "pop_var_context: head of shell_variables not a function context" +msgstr "pop_var_context: head of shell_variables not a function context" + +#: variables.c:3376 +msgid "pop_var_context: no global_variables context" +msgstr "pop_var_context: no global_variables context" + +#: variables.c:3442 +msgid "pop_scope: head of shell_variables not a temporary environment scope" +msgstr "pop_scope: head of shell_variables not a temporary environment scope" + +#: version.c:82 +msgid "Copyright (C) 2004 Free Software Foundation, Inc.\n" +msgstr "Copyright (C) 2004 Free Software Foundation, Inc.\n" + +#: xmalloc.c:93 +#, c-format +msgid "xmalloc: cannot allocate %lu bytes (%lu bytes allocated)" +msgstr "xmalloc: cannot allocate %lu bytes (%lu bytes allocated)" + +#: xmalloc.c:95 +#, c-format +msgid "xmalloc: cannot allocate %lu bytes" +msgstr "xmalloc: cannot allocate %lu bytes" + +#: xmalloc.c:115 +#, c-format +msgid "xrealloc: cannot reallocate %lu bytes (%lu bytes allocated)" +msgstr "xrealloc: cannot reallocate %lu bytes (%lu bytes allocated)" + +#: xmalloc.c:117 +#, c-format +msgid "xrealloc: cannot allocate %lu bytes" +msgstr "xrealloc: cannot allocate %lu bytes" + +#: xmalloc.c:151 +#, c-format +msgid "xmalloc: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" +msgstr "xmalloc: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" + +#: xmalloc.c:153 +#, c-format +msgid "xmalloc: %s:%d: cannot allocate %lu bytes" +msgstr "xmalloc: %s:%d: cannot allocate %lu bytes" + +#: xmalloc.c:175 +#, c-format +msgid "xrealloc: %s:%d: cannot reallocate %lu bytes (%lu bytes allocated)" +msgstr "xrealloc: %s:%d: cannot reallocate %lu bytes (%lu bytes allocated)" + +#: xmalloc.c:177 +#, c-format +msgid "xrealloc: %s:%d: cannot allocate %lu bytes" +msgstr "xrealloc: %s:%d: cannot allocate %lu bytes" + +#: builtins.c:244 +msgid "`alias' with no arguments or with the -p option prints the list" +msgstr "‘alias’ with no arguments or with the -p option prints the list" + +#: builtins.c:245 +msgid "of aliases in the form alias NAME=VALUE on standard output." +msgstr "of aliases in the form alias NAME=VALUE on standard output." + +#: builtins.c:246 +msgid "Otherwise, an alias is defined for each NAME whose VALUE is given." +msgstr "Otherwise, an alias is defined for each NAME whose VALUE is given." + +#: builtins.c:247 +msgid "A trailing space in VALUE causes the next word to be checked for" +msgstr "A trailing space in VALUE causes the next word to be checked for" + +#: builtins.c:248 +msgid "alias substitution when the alias is expanded. Alias returns" +msgstr "alias substitution when the alias is expanded. Alias returns" + +#: builtins.c:249 +msgid "true unless a NAME is given for which no alias has been defined." +msgstr "true unless a NAME is given for which no alias has been defined." + +#: builtins.c:257 +msgid "" +"Remove NAMEs from the list of defined aliases. If the -a option is given," +msgstr "" +"Remove NAMEs from the list of defined aliases. If the -a option is given," + +#: builtins.c:258 +msgid "then remove all alias definitions." +msgstr "then remove all alias definitions." + +#: builtins.c:266 +msgid "Bind a key sequence to a Readline function or a macro, or set" +msgstr "Bind a key sequence to a Readline function or a macro, or set" + +#: builtins.c:267 +msgid "a Readline variable. The non-option argument syntax is equivalent" +msgstr "a Readline variable. The non-option argument syntax is equivalent" + +#: builtins.c:268 +msgid "to that found in ~/.inputrc, but must be passed as a single argument:" +msgstr "to that found in ~/.inputrc, but must be passed as a single argument:" + +#: builtins.c:269 +msgid "bind '\"\\C-x\\C-r\": re-read-init-file'." +msgstr "bind '“\\C-x\\C-r”: re-read-init-file'." + +#: builtins.c:270 +msgid "bind accepts the following options:" +msgstr "bind accepts the following options:" + +#: builtins.c:271 +msgid "" +" -m keymap Use `keymap' as the keymap for the duration of this" +msgstr "" +" -m keymap Use ‘keymap’ as the keymap for the duration of " +"this" + +#: builtins.c:272 +msgid " command. Acceptable keymap names are emacs," +msgstr " command. Acceptable keymap names are emacs," + +#: builtins.c:273 +msgid "" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move," +msgstr "" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move," + +#: builtins.c:274 +msgid " vi-command, and vi-insert." +msgstr " vi-command, and vi-insert." + +#: builtins.c:275 +msgid " -l List names of functions." +msgstr " -l List names of functions." + +#: builtins.c:276 +msgid " -P List function names and bindings." +msgstr " -P List function names and bindings." + +#: builtins.c:277 +msgid " -p List functions and bindings in a form that can be" +msgstr " -p List functions and bindings in a form that can be" + +#: builtins.c:278 +msgid " reused as input." +msgstr " reused as input." + +#: builtins.c:279 +msgid " -r keyseq Remove the binding for KEYSEQ." +msgstr " -r keyseq Remove the binding for KEYSEQ." + +#: builtins.c:280 +msgid " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when" +msgstr " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when" + +#: builtins.c:281 +msgid "\t\t\t\tKEYSEQ is entered." +msgstr "\t\t\t\tKEYSEQ is entered." + +#: builtins.c:282 +msgid " -f filename Read key bindings from FILENAME." +msgstr " -f filename Read key bindings from FILENAME." + +#: builtins.c:283 +msgid " -q function-name Query about which keys invoke the named function." +msgstr " -q function-name Query about which keys invoke the named function." + +#: builtins.c:284 +msgid "" +" -u function-name Unbind all keys which are bound to the named function." +msgstr "" +" -u function-name Unbind all keys which are bound to the named function." + +#: builtins.c:285 +msgid " -V List variable names and values" +msgstr " -V List variable names and values" + +#: builtins.c:286 +msgid " -v List variable names and values in a form that can" +msgstr " -v List variable names and values in a form that can" + +#: builtins.c:287 +msgid " be reused as input." +msgstr " be reused as input." + +#: builtins.c:288 +msgid "" +" -S List key sequences that invoke macros and their values" +msgstr "" +" -S List key sequences that invoke macros and their values" + +#: builtins.c:289 +msgid "" +" -s List key sequences that invoke macros and their values" +msgstr "" +" -s List key sequences that invoke macros and their values" + +#: builtins.c:290 +msgid " in a form that can be reused as input." +msgstr " in a form that can be reused as input." + +#: builtins.c:297 +msgid "Exit from within a FOR, WHILE or UNTIL loop. If N is specified," +msgstr "Exit from within a FOR, WHILE or UNTIL loop. If N is specified," + +#: builtins.c:298 +msgid "break N levels." +msgstr "break N levels." + +#: builtins.c:304 +msgid "Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop." +msgstr "Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop." + +#: builtins.c:305 +msgid "If N is specified, resume at the N-th enclosing loop." +msgstr "If N is specified, resume at the N-th enclosing loop." + +#: builtins.c:311 +msgid "Run a shell builtin. This is useful when you wish to rename a" +msgstr "Run a shell builtin. This is useful when you wish to rename a" + +#: builtins.c:312 +msgid "shell builtin to be a function, but need the functionality of the" +msgstr "shell builtin to be a function, but need the functionality of the" + +#: builtins.c:313 +msgid "builtin within the function itself." +msgstr "builtin within the function itself." + +#: builtins.c:334 +msgid "Change the current directory to DIR. The variable $HOME is the" +msgstr "Change the current directory to DIR. The variable $HOME is the" + +#: builtins.c:335 +msgid "default DIR. The variable CDPATH defines the search path for" +msgstr "default DIR. The variable CDPATH defines the search path for" + +#: builtins.c:336 +msgid "the directory containing DIR. Alternative directory names in CDPATH" +msgstr "the directory containing DIR. Alternative directory names in CDPATH" + +#: builtins.c:337 +msgid "are separated by a colon (:). A null directory name is the same as" +msgstr "are separated by a colon (:). A null directory name is the same as" + +#: builtins.c:338 +msgid "the current directory, i.e. `.'. If DIR begins with a slash (/)," +msgstr "" +"the current directory, i.e. ‘.’. If DIR begins with a slash (/)," + +#: builtins.c:339 +msgid "then CDPATH is not used. If the directory is not found, and the" +msgstr "then CDPATH is not used. If the directory is not found, and the" + +#: builtins.c:340 +msgid "shell option `cdable_vars' is set, then try the word as a variable" +msgstr "" +"shell option ‘cdable_vars’ is set, then try the word as a variable" + +#: builtins.c:341 +msgid "name. If that variable has a value, then cd to the value of that" +msgstr "name. If that variable has a value, then cd to the value of that" + +#: builtins.c:342 +msgid "variable. The -P option says to use the physical directory structure" +msgstr "variable. The -P option says to use the physical directory structure" + +#: builtins.c:343 +msgid "" +"instead of following symbolic links; the -L option forces symbolic links" +msgstr "" +"instead of following symbolic links; the -L option forces symbolic links" + +#: builtins.c:344 +msgid "to be followed." +msgstr "to be followed." + +#: builtins.c:350 +msgid "Print the current working directory. With the -P option, pwd prints" +msgstr "Print the current working directory. With the -P option, pwd prints" + +#: builtins.c:351 +msgid "the physical directory, without any symbolic links; the -L option" +msgstr "the physical directory, without any symbolic links; the -L option" + +#: builtins.c:352 +msgid "makes pwd follow symbolic links." +msgstr "makes pwd follow symbolic links." + +#: builtins.c:358 +msgid "No effect; the command does nothing. A zero exit code is returned." +msgstr "No effect; the command does nothing. A zero exit code is returned." + +#: builtins.c:364 +msgid "Return a successful result." +msgstr "Return a successful result." + +#: builtins.c:370 +msgid "Return an unsuccessful result." +msgstr "Return an unsuccessful result." + +#: builtins.c:376 +msgid "Runs COMMAND with ARGS ignoring shell functions. If you have a shell" +msgstr "Runs COMMAND with ARGS ignoring shell functions. If you have a shell" + +#: builtins.c:377 +msgid "function called `ls', and you wish to call the command `ls', you can" +msgstr "" +"function called ‘ls’, and you wish to call the command ‘ls’, you " +"can" + +#: builtins.c:378 +msgid "say \"command ls\". If the -p option is given, a default value is used" +msgstr "" +"say “command ls”. If the -p option is given, a default value is used" + +#: builtins.c:379 +msgid "for PATH that is guaranteed to find all of the standard utilities. If" +msgstr "for PATH that is guaranteed to find all of the standard utilities. If" + +#: builtins.c:380 +msgid "the -V or -v option is given, a string is printed describing COMMAND." +msgstr "the -V or -v option is given, a string is printed describing COMMAND." + +#: builtins.c:381 +msgid "The -V option produces a more verbose description." +msgstr "The -V option produces a more verbose description." + +#: builtins.c:387 +msgid "Declare variables and/or give them attributes. If no NAMEs are" +msgstr "Declare variables and/or give them attributes. If no NAMEs are" + +#: builtins.c:388 +msgid "given, then display the values of variables instead. The -p option" +msgstr "given, then display the values of variables instead. The -p option" + +#: builtins.c:389 +msgid "will display the attributes and values of each NAME." +msgstr "will display the attributes and values of each NAME." + +#: builtins.c:391 +msgid "The flags are:" +msgstr "The flags are:" + +#: builtins.c:393 +msgid " -a\tto make NAMEs arrays (if supported)" +msgstr " -a\tto make NAMEs arrays (if supported)" + +#: builtins.c:394 +msgid " -f\tto select from among function names only" +msgstr " -f\tto select from among function names only" + +#: builtins.c:395 +msgid "" +" -F\tto display function names (and line number and source file name if" +msgstr "" +" -F\tto display function names (and line number and source file name if" + +#: builtins.c:396 +msgid "\tdebugging) without definitions" +msgstr "\tdebugging) without definitions" + +#: builtins.c:397 +msgid " -i\tto make NAMEs have the `integer' attribute" +msgstr " -i\tto make NAMEs have the ‘integer’ attribute" + +#: builtins.c:398 +msgid " -r\tto make NAMEs readonly" +msgstr " -r\tto make NAMEs readonly" + +#: builtins.c:399 +msgid " -t\tto make NAMEs have the `trace' attribute" +msgstr " -t\tto make NAMEs have the ‘trace’ attribute" + +#: builtins.c:400 +msgid " -x\tto make NAMEs export" +msgstr " -x\tto make NAMEs export" + +#: builtins.c:402 +msgid "Variables with the integer attribute have arithmetic evaluation (see" +msgstr "Variables with the integer attribute have arithmetic evaluation (see" + +#: builtins.c:403 +msgid "`let') done when the variable is assigned to." +msgstr "‘let’) done when the variable is assigned to." + +#: builtins.c:405 +msgid "When displaying values of variables, -f displays a function's name" +msgstr "When displaying values of variables, -f displays a function's name" + +#: builtins.c:406 +msgid "and definition. The -F option restricts the display to function" +msgstr "and definition. The -F option restricts the display to function" + +#: builtins.c:407 +msgid "name only." +msgstr "name only." + +#: builtins.c:409 +msgid "Using `+' instead of `-' turns off the given attribute instead. When" +msgstr "" +"Using ‘+’ instead of ‘-’ turns off the given attribute instead. " +"When" + +#: builtins.c:410 +msgid "used in a function, makes NAMEs local, as with the `local' command." +msgstr "" +"used in a function, makes NAMEs local, as with the ‘local’ command." + +#: builtins.c:416 +msgid "Obsolete. See `declare'." +msgstr "Obsolete. See ‘declare’." + +#: builtins.c:422 +msgid "Create a local variable called NAME, and give it VALUE. LOCAL" +msgstr "Create a local variable called NAME, and give it VALUE. LOCAL" + +#: builtins.c:423 +msgid "can only be used within a function; it makes the variable NAME" +msgstr "can only be used within a function; it makes the variable NAME" + +#: builtins.c:424 +msgid "have a visible scope restricted to that function and its children." +msgstr "have a visible scope restricted to that function and its children." + +#: builtins.c:431 +msgid "Output the ARGs. If -n is specified, the trailing newline is" +msgstr "Output the ARGs. If -n is specified, the trailing newline is" + +#: builtins.c:432 +msgid "suppressed. If the -e option is given, interpretation of the" +msgstr "suppressed. If the -e option is given, interpretation of the" + +#: builtins.c:433 +msgid "following backslash-escaped characters is turned on:" +msgstr "following backslash-escaped characters is turned on:" + +#: builtins.c:434 +msgid "\t\\a\talert (bell)" +msgstr "\t\\a\talert (bell)" + +#: builtins.c:435 +msgid "\t\\b\tbackspace" +msgstr "\t\\b\tbackspace" + +#: builtins.c:436 +msgid "\t\\c\tsuppress trailing newline" +msgstr "\t\\c\tsuppress trailing newline" + +#: builtins.c:437 +msgid "\t\\E\tescape character" +msgstr "\t\\E\tescape character" + +#: builtins.c:438 +msgid "\t\\f\tform feed" +msgstr "\t\\f\tform feed" + +#: builtins.c:439 +msgid "\t\\n\tnew line" +msgstr "\t\\n\tnew line" + +#: builtins.c:440 +msgid "\t\\r\tcarriage return" +msgstr "\t\\r\tcarriage return" + +#: builtins.c:441 +msgid "\t\\t\thorizontal tab" +msgstr "\t\\t\thorizontal tab" + +#: builtins.c:442 +msgid "\t\\v\tvertical tab" +msgstr "\t\\v\tvertical tab" + +#: builtins.c:443 +msgid "\t\\\\\tbackslash" +msgstr "\t\\\\\tbackslash" + +#: builtins.c:444 +msgid "\t\\num\tthe character whose ASCII code is NUM (octal)." +msgstr "\t\\num\tthe character whose ASCII code is NUM (octal)." + +#: builtins.c:446 +msgid "You can explicitly turn off the interpretation of the above characters" +msgstr "You can explicitly turn off the interpretation of the above characters" + +#: builtins.c:447 +msgid "with the -E option." +msgstr "with the -E option." + +#: builtins.c:455 +msgid "" +"Output the ARGs. If -n is specified, the trailing newline is suppressed." +msgstr "" +"Output the ARGs. If -n is specified, the trailing newline is suppressed." + +#: builtins.c:462 +msgid "Enable and disable builtin shell commands. This allows" +msgstr "Enable and disable builtin shell commands. This allows" + +#: builtins.c:463 +msgid "you to use a disk command which has the same name as a shell" +msgstr "you to use a disk command which has the same name as a shell" + +#: builtins.c:464 +msgid "builtin without specifying a full pathname. If -n is used, the" +msgstr "builtin without specifying a full pathname. If -n is used, the" + +#: builtins.c:465 +msgid "NAMEs become disabled; otherwise NAMEs are enabled. For example," +msgstr "NAMEs become disabled; otherwise NAMEs are enabled. For example," + +#: builtins.c:466 +msgid "to use the `test' found in $PATH instead of the shell builtin" +msgstr "to use the ‘test’ found in $PATH instead of the shell builtin" + +#: builtins.c:467 +msgid "version, type `enable -n test'. On systems supporting dynamic" +msgstr "version, type ‘enable -n test’. On systems supporting dynamic" + +#: builtins.c:468 +msgid "loading, the -f option may be used to load new builtins from the" +msgstr "loading, the -f option may be used to load new builtins from the" + +#: builtins.c:469 +msgid "shared object FILENAME. The -d option will delete a builtin" +msgstr "shared object FILENAME. The -d option will delete a builtin" + +#: builtins.c:470 +msgid "previously loaded with -f. If no non-option names are given, or" +msgstr "previously loaded with -f. If no non-option names are given, or" + +#: builtins.c:471 +msgid "the -p option is supplied, a list of builtins is printed. The" +msgstr "the -p option is supplied, a list of builtins is printed. The" + +#: builtins.c:472 +msgid "-a option means to print every builtin with an indication of whether" +msgstr "-a option means to print every builtin with an indication of whether" + +#: builtins.c:473 +msgid "" +"or not it is enabled. The -s option restricts the output to the POSIX.2" +msgstr "" +"or not it is enabled. The -s option restricts the output to the POSIX.2" + +#: builtins.c:474 +msgid "" +"`special' builtins. The -n option displays a list of all disabled builtins." +msgstr "" +"‘special’ builtins. The -n option displays a list of all disabled " +"builtins." + +#: builtins.c:480 +msgid "Read ARGs as input to the shell and execute the resulting command(s)." +msgstr "Read ARGs as input to the shell and execute the resulting command(s)." + +#: builtins.c:486 +msgid "Getopts is used by shell procedures to parse positional parameters." +msgstr "Getopts is used by shell procedures to parse positional parameters." + +#: builtins.c:488 +msgid "OPTSTRING contains the option letters to be recognized; if a letter" +msgstr "OPTSTRING contains the option letters to be recognized; if a letter" + +#: builtins.c:489 +msgid "is followed by a colon, the option is expected to have an argument," +msgstr "is followed by a colon, the option is expected to have an argument," + +#: builtins.c:490 +msgid "which should be separated from it by white space." +msgstr "which should be separated from it by white space." + +#: builtins.c:492 +msgid "Each time it is invoked, getopts will place the next option in the" +msgstr "Each time it is invoked, getopts will place the next option in the" + +#: builtins.c:493 +msgid "shell variable $name, initializing name if it does not exist, and" +msgstr "shell variable $name, initializing name if it does not exist, and" + +#: builtins.c:494 +msgid "the index of the next argument to be processed into the shell" +msgstr "the index of the next argument to be processed into the shell" + +#: builtins.c:495 +msgid "variable OPTIND. OPTIND is initialized to 1 each time the shell or" +msgstr "variable OPTIND. OPTIND is initialized to 1 each time the shell or" + +#: builtins.c:496 +msgid "a shell script is invoked. When an option requires an argument," +msgstr "a shell script is invoked. When an option requires an argument," + +#: builtins.c:497 +msgid "getopts places that argument into the shell variable OPTARG." +msgstr "getopts places that argument into the shell variable OPTARG." + +#: builtins.c:499 +msgid "getopts reports errors in one of two ways. If the first character" +msgstr "getopts reports errors in one of two ways. If the first character" + +#: builtins.c:500 +msgid "of OPTSTRING is a colon, getopts uses silent error reporting. In" +msgstr "of OPTSTRING is a colon, getopts uses silent error reporting. In" + +#: builtins.c:501 +msgid "this mode, no error messages are printed. If an invalid option is" +msgstr "this mode, no error messages are printed. If an invalid option is" + +#: builtins.c:502 +msgid "seen, getopts places the option character found into OPTARG. If a" +msgstr "seen, getopts places the option character found into OPTARG. If a" + +#: builtins.c:503 +msgid "required argument is not found, getopts places a ':' into NAME and" +msgstr "" +"required argument is not found, getopts places a ‘:’ into NAME and" + +#: builtins.c:504 +msgid "sets OPTARG to the option character found. If getopts is not in" +msgstr "sets OPTARG to the option character found. If getopts is not in" + +#: builtins.c:505 +msgid "silent mode, and an invalid option is seen, getopts places '?' into" +msgstr "" +"silent mode, and an invalid option is seen, getopts places ‘?’ into" + +#: builtins.c:506 +msgid "NAME and unsets OPTARG. If a required argument is not found, a '?'" +msgstr "" +"NAME and unsets OPTARG. If a required argument is not found, a ‘?’" + +#: builtins.c:507 +msgid "is placed in NAME, OPTARG is unset, and a diagnostic message is" +msgstr "is placed in NAME, OPTARG is unset, and a diagnostic message is" + +#: builtins.c:508 +msgid "printed." +msgstr "printed." + +#: builtins.c:510 +msgid "If the shell variable OPTERR has the value 0, getopts disables the" +msgstr "If the shell variable OPTERR has the value 0, getopts disables the" + +#: builtins.c:511 +msgid "printing of error messages, even if the first character of" +msgstr "printing of error messages, even if the first character of" + +#: builtins.c:512 +msgid "OPTSTRING is not a colon. OPTERR has the value 1 by default." +msgstr "OPTSTRING is not a colon. OPTERR has the value 1 by default." + +#: builtins.c:514 +msgid "Getopts normally parses the positional parameters ($0 - $9), but if" +msgstr "Getopts normally parses the positional parameters ($0 - $9), but if" + +#: builtins.c:515 +msgid "more arguments are given, they are parsed instead." +msgstr "more arguments are given, they are parsed instead." + +#: builtins.c:521 +msgid "Exec FILE, replacing this shell with the specified program." +msgstr "Exec FILE, replacing this shell with the specified program." + +#: builtins.c:522 +msgid "If FILE is not specified, the redirections take effect in this" +msgstr "If FILE is not specified, the redirections take effect in this" + +#: builtins.c:523 +msgid "shell. If the first argument is `-l', then place a dash in the" +msgstr "shell. If the first argument is ‘-l’, then place a dash in the" + +#: builtins.c:524 +msgid "zeroth arg passed to FILE, as login does. If the `-c' option" +msgstr "zeroth arg passed to FILE, as login does. If the ‘-c’ option" + +#: builtins.c:525 +msgid "is supplied, FILE is executed with a null environment. The `-a'" +msgstr "is supplied, FILE is executed with a null environment. The ‘-a’" + +#: builtins.c:526 +msgid "option means to make set argv[0] of the executed process to NAME." +msgstr "option means to make set argv[0] of the executed process to NAME." + +#: builtins.c:527 +msgid "If the file cannot be executed and the shell is not interactive," +msgstr "If the file cannot be executed and the shell is not interactive," + +#: builtins.c:528 +msgid "then the shell exits, unless the shell option `execfail' is set." +msgstr "then the shell exits, unless the shell option ‘execfail’ is set." + +#: builtins.c:534 +msgid "Exit the shell with a status of N. If N is omitted, the exit status" +msgstr "Exit the shell with a status of N. If N is omitted, the exit status" + +#: builtins.c:535 +msgid "is that of the last command executed." +msgstr "is that of the last command executed." + +#: builtins.c:541 +msgid "Logout of a login shell." +msgstr "Logout of a login shell." + +#: builtins.c:548 +msgid "" +"fc is used to list or edit and re-execute commands from the history list." +msgstr "" +"fc is used to list or edit and re-execute commands from the history list." + +#: builtins.c:549 +msgid "FIRST and LAST can be numbers specifying the range, or FIRST can be a" +msgstr "FIRST and LAST can be numbers specifying the range, or FIRST can be a" + +#: builtins.c:550 +msgid "string, which means the most recent command beginning with that" +msgstr "string, which means the most recent command beginning with that" + +#: builtins.c:551 +msgid "string." +msgstr "string." + +#: builtins.c:553 +msgid "" +" -e ENAME selects which editor to use. Default is FCEDIT, then EDITOR," +msgstr "" +" -e ENAME selects which editor to use. Default is FCEDIT, then EDITOR," + +#: builtins.c:554 +msgid " then vi." +msgstr " then vi." + +#: builtins.c:556 +msgid " -l means list lines instead of editing." +msgstr " -l means list lines instead of editing." + +#: builtins.c:557 +msgid " -n means no line numbers listed." +msgstr " -n means no line numbers listed." + +#: builtins.c:558 +msgid "" +" -r means reverse the order of the lines (making it newest listed first)." +msgstr "" +" -r means reverse the order of the lines (making it newest listed first)." + +#: builtins.c:560 +msgid "With the `fc -s [pat=rep ...] [command]' format, the command is" +msgstr "With the ‘fc -s [pat=rep ...] [command]’ format, the command is" + +#: builtins.c:561 +msgid "re-executed after the substitution OLD=NEW is performed." +msgstr "re-executed after the substitution OLD=NEW is performed." + +#: builtins.c:563 +msgid "A useful alias to use with this is r='fc -s', so that typing `r cc'" +msgstr "" +"A useful alias to use with this is r='fc -s', so that typing ‘r cc’" + +#: builtins.c:564 +msgid "runs the last command beginning with `cc' and typing `r' re-executes" +msgstr "" +"runs the last command beginning with ‘cc’ and typing ‘r’ re-" +"executes" + +#: builtins.c:565 +msgid "the last command." +msgstr "the last command." + +#: builtins.c:573 +msgid "Place JOB_SPEC in the foreground, and make it the current job. If" +msgstr "Place JOB_SPEC in the foreground, and make it the current job. If" + +#: builtins.c:574 +msgid "JOB_SPEC is not present, the shell's notion of the current job is" +msgstr "JOB_SPEC is not present, the shell's notion of the current job is" + +#: builtins.c:575 +msgid "used." +msgstr "used." + +#: builtins.c:583 +msgid "Place JOB_SPEC in the background, as if it had been started with" +msgstr "Place JOB_SPEC in the background, as if it had been started with" + +#: builtins.c:584 +msgid "`&'. If JOB_SPEC is not present, the shell's notion of the current" +msgstr "" +"‘&’. If JOB_SPEC is not present, the shell's notion of the current" + +#: builtins.c:585 +msgid "job is used." +msgstr "job is used." + +#: builtins.c:592 +msgid "For each NAME, the full pathname of the command is determined and" +msgstr "For each NAME, the full pathname of the command is determined and" + +#: builtins.c:593 +msgid "remembered. If the -p option is supplied, PATHNAME is used as the" +msgstr "remembered. If the -p option is supplied, PATHNAME is used as the" + +#: builtins.c:594 +msgid "full pathname of NAME, and no path search is performed. The -r" +msgstr "full pathname of NAME, and no path search is performed. The -r" + +#: builtins.c:595 +msgid "option causes the shell to forget all remembered locations. The -d" +msgstr "option causes the shell to forget all remembered locations. The -d" + +#: builtins.c:596 +msgid "option causes the shell to forget the remembered location of each NAME." +msgstr "" +"option causes the shell to forget the remembered location of each NAME." + +#: builtins.c:597 +msgid "If the -t option is supplied the full pathname to which each NAME" +msgstr "If the -t option is supplied the full pathname to which each NAME" + +#: builtins.c:598 +msgid "corresponds is printed. If multiple NAME arguments are supplied with" +msgstr "corresponds is printed. If multiple NAME arguments are supplied with" + +#: builtins.c:599 +msgid "-t, the NAME is printed before the hashed full pathname. The -l option" +msgstr "" +"-t, the NAME is printed before the hashed full pathname. The -l option" + +#: builtins.c:600 +msgid "causes output to be displayed in a format that may be reused as input." +msgstr "causes output to be displayed in a format that may be reused as input." + +#: builtins.c:601 +msgid "" +"If no arguments are given, information about remembered commands is " +"displayed." +msgstr "" +"If no arguments are given, information about remembered commands is " +"displayed." + +#: builtins.c:608 +msgid "Display helpful information about builtin commands. If PATTERN is" +msgstr "Display helpful information about builtin commands. If PATTERN is" + +#: builtins.c:609 +msgid "specified, gives detailed help on all commands matching PATTERN," +msgstr "specified, gives detailed help on all commands matching PATTERN," + +#: builtins.c:610 +msgid "otherwise a list of the builtins is printed. The -s option" +msgstr "otherwise a list of the builtins is printed. The -s option" + +#: builtins.c:611 +msgid "restricts the output for each builtin command matching PATTERN to" +msgstr "restricts the output for each builtin command matching PATTERN to" + +#: builtins.c:612 +msgid "a short usage synopsis." +msgstr "a short usage synopsis." + +#: builtins.c:620 +msgid "Display the history list with line numbers. Lines listed with" +msgstr "Display the history list with line numbers. Lines listed with" + +#: builtins.c:621 +msgid "with a `*' have been modified. Argument of N says to list only" +msgstr "with a ‘*’ have been modified. Argument of N says to list only" + +#: builtins.c:622 +msgid "the last N lines. The `-c' option causes the history list to be" +msgstr "the last N lines. The ‘-c’ option causes the history list to be" + +#: builtins.c:623 +msgid "cleared by deleting all of the entries. The `-d' option deletes" +msgstr "cleared by deleting all of the entries. The ‘-d’ option deletes" + +#: builtins.c:624 +msgid "the history entry at offset OFFSET. The `-w' option writes out the" +msgstr "" +"the history entry at offset OFFSET. The ‘-w’ option writes out the" + +#: builtins.c:625 +msgid "current history to the history file; `-r' means to read the file and" +msgstr "" +"current history to the history file; ‘-r’ means to read the file and" + +#: builtins.c:626 +msgid "append the contents to the history list instead. `-a' means" +msgstr "append the contents to the history list instead. ‘-a’ means" + +#: builtins.c:627 +msgid "to append history lines from this session to the history file." +msgstr "to append history lines from this session to the history file." + +#: builtins.c:628 +msgid "Argument `-n' means to read all history lines not already read" +msgstr "Argument ‘-n’ means to read all history lines not already read" + +#: builtins.c:629 +msgid "from the history file and append them to the history list." +msgstr "from the history file and append them to the history list." + +#: builtins.c:631 +msgid "If FILENAME is given, then that is used as the history file else" +msgstr "If FILENAME is given, then that is used as the history file else" + +#: builtins.c:632 +msgid "if $HISTFILE has a value, that is used, else ~/.bash_history." +msgstr "if $HISTFILE has a value, that is used, else ~/.bash_history." + +#: builtins.c:633 +msgid "If the -s option is supplied, the non-option ARGs are appended to" +msgstr "If the -s option is supplied, the non-option ARGs are appended to" + +#: builtins.c:634 +msgid "the history list as a single entry. The -p option means to perform" +msgstr "the history list as a single entry. The -p option means to perform" + +#: builtins.c:635 +msgid "history expansion on each ARG and display the result, without storing" +msgstr "history expansion on each ARG and display the result, without storing" + +#: builtins.c:636 +msgid "anything in the history list." +msgstr "anything in the history list." + +#: builtins.c:638 +msgid "If the $HISTTIMEFORMAT variable is set and not null, its value is used" +msgstr "If the $HISTTIMEFORMAT variable is set and not null, its value is used" + +#: builtins.c:639 +msgid "as a format string for strftime(3) to print the time stamp associated" +msgstr "as a format string for strftime(3) to print the time stamp associated" + +#: builtins.c:640 +msgid "" +"with each displayed history entry. No time stamps are printed otherwise." +msgstr "" +"with each displayed history entry. No time stamps are printed otherwise." + +#: builtins.c:648 +msgid "Lists the active jobs. The -l option lists process id's in addition" +msgstr "Lists the active jobs. The -l option lists process id's in addition" + +#: builtins.c:649 +msgid "to the normal information; the -p option lists process id's only." +msgstr "to the normal information; the -p option lists process id's only." + +#: builtins.c:650 +msgid "If -n is given, only processes that have changed status since the last" +msgstr "If -n is given, only processes that have changed status since the last" + +#: builtins.c:651 +msgid "notification are printed. JOBSPEC restricts output to that job. The" +msgstr "notification are printed. JOBSPEC restricts output to that job. The" + +#: builtins.c:652 +msgid "-r and -s options restrict output to running and stopped jobs only," +msgstr "-r and -s options restrict output to running and stopped jobs only," + +#: builtins.c:653 +msgid "respectively. Without options, the status of all active jobs is" +msgstr "respectively. Without options, the status of all active jobs is" + +#: builtins.c:654 +msgid "printed. If -x is given, COMMAND is run after all job specifications" +msgstr "printed. If -x is given, COMMAND is run after all job specifications" + +#: builtins.c:655 +msgid "" +"that appear in ARGS have been replaced with the process ID of that job's" +msgstr "" +"that appear in ARGS have been replaced with the process ID of that job's" + +#: builtins.c:656 +msgid "process group leader." +msgstr "process group leader." + +#: builtins.c:664 +msgid "" +"By default, removes each JOBSPEC argument from the table of active jobs." +msgstr "" +"By default, removes each JOBSPEC argument from the table of active jobs." + +#: builtins.c:665 +msgid "" +"If the -h option is given, the job is not removed from the table, but is" +msgstr "" +"If the -h option is given, the job is not removed from the table, but is" + +#: builtins.c:666 +msgid "marked so that SIGHUP is not sent to the job if the shell receives a" +msgstr "marked so that SIGHUP is not sent to the job if the shell receives a" + +#: builtins.c:667 +msgid "" +"SIGHUP. The -a option, when JOBSPEC is not supplied, means to remove all" +msgstr "" +"SIGHUP. The -a option, when JOBSPEC is not supplied, means to remove all" + +#: builtins.c:668 +msgid "" +"jobs from the job table; the -r option means to remove only running jobs." +msgstr "" +"jobs from the job table; the -r option means to remove only running jobs." + +#: builtins.c:675 +msgid "Send the processes named by PID (or JOB) the signal SIGSPEC. If" +msgstr "Send the processes named by PID (or JOB) the signal SIGSPEC. If" + +#: builtins.c:676 +msgid "SIGSPEC is not present, then SIGTERM is assumed. An argument of `-l'" +msgstr "" +"SIGSPEC is not present, then SIGTERM is assumed. An argument of ‘-l’" + +#: builtins.c:677 +msgid "lists the signal names; if arguments follow `-l' they are assumed to" +msgstr "" +"lists the signal names; if arguments follow ‘-l’ they are assumed to" + +#: builtins.c:678 +msgid "be signal numbers for which names should be listed. Kill is a shell" +msgstr "be signal numbers for which names should be listed. Kill is a shell" + +#: builtins.c:679 +msgid "builtin for two reasons: it allows job IDs to be used instead of" +msgstr "builtin for two reasons: it allows job IDs to be used instead of" + +#: builtins.c:680 +msgid "process IDs, and, if you have reached the limit on processes that" +msgstr "process IDs, and, if you have reached the limit on processes that" + +#: builtins.c:681 +msgid "you can create, you don't have to start a process to kill another one." +msgstr "you can create, you don't have to start a process to kill another one." + +#: builtins.c:687 +msgid "Each ARG is an arithmetic expression to be evaluated. Evaluation" +msgstr "Each ARG is an arithmetic expression to be evaluated. Evaluation" + +#: builtins.c:688 +msgid "is done in fixed-width integers with no check for overflow, though" +msgstr "is done in fixed-width integers with no check for overflow, though" + +#: builtins.c:689 +msgid "division by 0 is trapped and flagged as an error. The following" +msgstr "division by 0 is trapped and flagged as an error. The following" + +#: builtins.c:690 +msgid "list of operators is grouped into levels of equal-precedence operators." +msgstr "" +"list of operators is grouped into levels of equal-precedence operators." + +#: builtins.c:691 +msgid "The levels are listed in order of decreasing precedence." +msgstr "The levels are listed in order of decreasing precedence." + +#: builtins.c:693 +msgid "\tid++, id--\tvariable post-increment, post-decrement" +msgstr "\tid++, id--\tvariable post-increment, post-decrement" + +#: builtins.c:694 +msgid "\t++id, --id\tvariable pre-increment, pre-decrement" +msgstr "\t++id, --id\tvariable pre-increment, pre-decrement" + +#: builtins.c:695 +msgid "\t-, +\t\tunary minus, plus" +msgstr "\t-, +\t\tunary minus, plus" + +#: builtins.c:696 +msgid "\t!, ~\t\tlogical and bitwise negation" +msgstr "\t!, ~\t\tlogical and bitwise negation" + +#: builtins.c:697 +msgid "\t**\t\texponentiation" +msgstr "\t**\t\texponentiation" + +#: builtins.c:698 +msgid "\t*, /, %\t\tmultiplication, division, remainder" +msgstr "\t*, /, %\t\tmultiplication, division, remainder" + +#: builtins.c:699 +msgid "\t+, -\t\taddition, subtraction" +msgstr "\t+, -\t\taddition, subtraction" + +#: builtins.c:700 +msgid "\t<<, >>\t\tleft and right bitwise shifts" +msgstr "\t<<, >>\t\tleft and right bitwise shifts" + +#: builtins.c:701 +msgid "\t<=, >=, <, >\tcomparison" +msgstr "\t<=, >=, <, >\tcomparison" + +#: builtins.c:702 +msgid "\t==, !=\t\tequality, inequality" +msgstr "\t==, !=\t\tequality, inequality" + +#: builtins.c:703 +msgid "\t&\t\tbitwise AND" +msgstr "\t&\t\tbitwise AND" + +#: builtins.c:704 +msgid "\t^\t\tbitwise XOR" +msgstr "\t^\t\tbitwise XOR" + +#: builtins.c:705 +msgid "\t|\t\tbitwise OR" +msgstr "\t|\t\tbitwise OR" + +#: builtins.c:706 +msgid "\t&&\t\tlogical AND" +msgstr "\t&&\t\tlogical AND" + +#: builtins.c:707 +msgid "\t||\t\tlogical OR" +msgstr "\t||\t\tlogical OR" + +#: builtins.c:708 +msgid "\texpr ? expr : expr" +msgstr "\texpr ? expr : expr" + +#: builtins.c:709 +msgid "\t\t\tconditional operator" +msgstr "\t\t\tconditional operator" + +#: builtins.c:710 +msgid "\t=, *=, /=, %=," +msgstr "\t=, *=, /=, %=," + +#: builtins.c:711 +msgid "\t+=, -=, <<=, >>=," +msgstr "\t+=, -=, <<=, >>=," + +#: builtins.c:712 +msgid "\t&=, ^=, |=\tassignment" +msgstr "\t&=, ^=, |=\tassignment" + +#: builtins.c:714 +msgid "Shell variables are allowed as operands. The name of the variable" +msgstr "Shell variables are allowed as operands. The name of the variable" + +#: builtins.c:715 +msgid "is replaced by its value (coerced to a fixed-width integer) within" +msgstr "is replaced by its value (coerced to a fixed-width integer) within" + +#: builtins.c:716 +msgid "an expression. The variable need not have its integer attribute" +msgstr "an expression. The variable need not have its integer attribute" + +#: builtins.c:717 +msgid "turned on to be used in an expression." +msgstr "turned on to be used in an expression." + +#: builtins.c:719 +msgid "Operators are evaluated in order of precedence. Sub-expressions in" +msgstr "Operators are evaluated in order of precedence. Sub-expressions in" + +#: builtins.c:720 +msgid "parentheses are evaluated first and may override the precedence" +msgstr "parentheses are evaluated first and may override the precedence" + +#: builtins.c:721 +msgid "rules above." +msgstr "rules above." + +#: builtins.c:723 +msgid "If the last ARG evaluates to 0, let returns 1; 0 is returned" +msgstr "If the last ARG evaluates to 0, let returns 1; 0 is returned" + +#: builtins.c:724 +msgid "otherwise." +msgstr "otherwise." + +#: builtins.c:730 +msgid "" +"One line is read from the standard input, or from file descriptor FD if the" +msgstr "" +"One line is read from the standard input, or from file descriptor FD if the" + +#: builtins.c:731 +msgid "" +"-u option is supplied, and the first word is assigned to the first NAME," +msgstr "" +"-u option is supplied, and the first word is assigned to the first NAME," + +#: builtins.c:732 +msgid "" +"the second word to the second NAME, and so on, with leftover words assigned" +msgstr "" +"the second word to the second NAME, and so on, with leftover words assigned" + +#: builtins.c:733 +msgid "" +"to the last NAME. Only the characters found in $IFS are recognized as word" +msgstr "" +"to the last NAME. Only the characters found in $IFS are recognized as word" + +#: builtins.c:734 +msgid "" +"delimiters. If no NAMEs are supplied, the line read is stored in the REPLY" +msgstr "" +"delimiters. If no NAMEs are supplied, the line read is stored in the REPLY" + +#: builtins.c:735 +msgid "variable. If the -r option is given, this signifies `raw' input, and" +msgstr "" +"variable. If the -r option is given, this signifies ‘raw’ input, and" + +#: builtins.c:736 +msgid "backslash escaping is disabled. The -d option causes read to continue" +msgstr "backslash escaping is disabled. The -d option causes read to continue" + +#: builtins.c:737 +msgid "" +"until the first character of DELIM is read, rather than newline. If the -p" +msgstr "" +"until the first character of DELIM is read, rather than newline. If the -p" + +#: builtins.c:738 +msgid "" +"option is supplied, the string PROMPT is output without a trailing newline" +msgstr "" +"option is supplied, the string PROMPT is output without a trailing newline" + +#: builtins.c:739 +msgid "" +"before attempting to read. If -a is supplied, the words read are assigned" +msgstr "" +"before attempting to read. If -a is supplied, the words read are assigned" + +#: builtins.c:740 +msgid "" +"to sequential indices of ARRAY, starting at zero. If -e is supplied and" +msgstr "" +"to sequential indices of ARRAY, starting at zero. If -e is supplied and" + +#: builtins.c:741 +msgid "" +"the shell is interactive, readline is used to obtain the line. If -n is" +msgstr "" +"the shell is interactive, readline is used to obtain the line. If -n is" + +#: builtins.c:742 +msgid "supplied with a non-zero NCHARS argument, read returns after NCHARS" +msgstr "supplied with a non-zero NCHARS argument, read returns after NCHARS" + +#: builtins.c:743 +msgid "characters have been read. The -s option causes input coming from a" +msgstr "characters have been read. The -s option causes input coming from a" + +#: builtins.c:744 +msgid "terminal to not be echoed." +msgstr "terminal to not be echoed." + +#: builtins.c:746 +msgid "" +"The -t option causes read to time out and return failure if a complete line" +msgstr "" +"The -t option causes read to time out and return failure if a complete line" + +#: builtins.c:747 +msgid "" +"of input is not read within TIMEOUT seconds. If the TMOUT variable is set," +msgstr "" +"of input is not read within TIMEOUT seconds. If the TMOUT variable is set," + +#: builtins.c:748 +msgid "" +"its value is the default timeout. The return code is zero, unless end-of-" +"file" +msgstr "" +"its value is the default timeout. The return code is zero, unless end-of-" +"file" + +#: builtins.c:749 +msgid "" +"is encountered, read times out, or an invalid file descriptor is supplied as" +msgstr "" +"is encountered, read times out, or an invalid file descriptor is supplied as" + +#: builtins.c:750 +msgid "the argument to -u." +msgstr "the argument to -u." + +#: builtins.c:756 +msgid "Causes a function to exit with the return value specified by N. If N" +msgstr "Causes a function to exit with the return value specified by N. If N" + +#: builtins.c:757 +msgid "is omitted, the return status is that of the last command." +msgstr "is omitted, the return status is that of the last command." + +#: builtins.c:763 +msgid " -a Mark variables which are modified or created for export." +msgstr " -a Mark variables which are modified or created for export." + +#: builtins.c:764 +msgid " -b Notify of job termination immediately." +msgstr " -b Notify of job termination immediately." + +#: builtins.c:765 +msgid " -e Exit immediately if a command exits with a non-zero status." +msgstr " -e Exit immediately if a command exits with a non-zero status." + +#: builtins.c:766 +msgid " -f Disable file name generation (globbing)." +msgstr " -f Disable file name generation (globbing)." + +#: builtins.c:767 +msgid " -h Remember the location of commands as they are looked up." +msgstr " -h Remember the location of commands as they are looked up." + +#: builtins.c:768 +msgid " -k All assignment arguments are placed in the environment for a" +msgstr " -k All assignment arguments are placed in the environment for a" + +#: builtins.c:769 +msgid " command, not just those that precede the command name." +msgstr " command, not just those that precede the command name." + +#: builtins.c:770 +msgid " -m Job control is enabled." +msgstr " -m Job control is enabled." + +#: builtins.c:771 +msgid " -n Read commands but do not execute them." +msgstr " -n Read commands but do not execute them." + +#: builtins.c:772 +msgid " -o option-name" +msgstr " -o option-name" + +#: builtins.c:773 +msgid " Set the variable corresponding to option-name:" +msgstr " Set the variable corresponding to option-name:" + +#: builtins.c:774 +msgid " allexport same as -a" +msgstr " allexport same as -a" + +#: builtins.c:775 +msgid " braceexpand same as -B" +msgstr " braceexpand same as -B" + +#: builtins.c:777 +msgid " emacs use an emacs-style line editing interface" +msgstr " emacs use an emacs-style line editing interface" + +#: builtins.c:779 +msgid " errexit same as -e" +msgstr " errexit same as -e" + +#: builtins.c:780 +msgid " errtrace same as -E" +msgstr " errtrace same as -E" + +#: builtins.c:781 +msgid " functrace same as -T" +msgstr " functrace same as -T" + +#: builtins.c:782 +msgid " hashall same as -h" +msgstr " hashall same as -h" + +#: builtins.c:784 +msgid " histexpand same as -H" +msgstr " histexpand same as -H" + +#: builtins.c:787 +msgid " history enable command history" +msgstr " history enable command history" + +#: builtins.c:789 +msgid " ignoreeof the shell will not exit upon reading EOF" +msgstr " ignoreeof the shell will not exit upon reading EOF" + +#: builtins.c:790 +msgid " interactive-comments" +msgstr " interactive-comments" + +#: builtins.c:791 +msgid "" +" allow comments to appear in interactive commands" +msgstr "" +" allow comments to appear in interactive commands" + +#: builtins.c:792 +msgid " keyword same as -k" +msgstr " keyword same as -k" + +#: builtins.c:793 +msgid " monitor same as -m" +msgstr " monitor same as -m" + +#: builtins.c:794 +msgid " noclobber same as -C" +msgstr " noclobber same as -C" + +#: builtins.c:795 +msgid " noexec same as -n" +msgstr " noexec same as -n" + +#: builtins.c:796 +msgid " noglob same as -f" +msgstr " noglob same as -f" + +#: builtins.c:797 +msgid " nolog currently accepted but ignored" +msgstr " nolog currently accepted but ignored" + +#: builtins.c:798 +msgid " notify same as -b" +msgstr " notify same as -b" + +#: builtins.c:799 +msgid " nounset same as -u" +msgstr " nounset same as -u" + +#: builtins.c:800 +msgid " onecmd same as -t" +msgstr " onecmd same as -t" + +#: builtins.c:801 +msgid " physical same as -P" +msgstr " physical same as -P" + +#: builtins.c:802 +msgid "" +" pipefail the return value of a pipeline is the status of" +msgstr "" +" pipefail the return value of a pipeline is the status of" + +#: builtins.c:803 +msgid "" +" the last command to exit with a non-zero status," +msgstr "" +" the last command to exit with a non-zero status," + +#: builtins.c:804 +msgid "" +" or zero if no command exited with a non-zero status" +msgstr "" +" or zero if no command exited with a non-zero status" + +#: builtins.c:805 +msgid " posix change the behavior of bash where the default" +msgstr " posix change the behavior of bash where the default" + +#: builtins.c:806 +msgid " operation differs from the 1003.2 standard to" +msgstr " operation differs from the 1003.2 standard to" + +#: builtins.c:807 +msgid " match the standard" +msgstr " match the standard" + +#: builtins.c:808 +msgid " privileged same as -p" +msgstr " privileged same as -p" + +#: builtins.c:809 +msgid " verbose same as -v" +msgstr " verbose same as -v" + +#: builtins.c:811 +msgid " vi use a vi-style line editing interface" +msgstr " vi use a vi-style line editing interface" + +#: builtins.c:813 +msgid " xtrace same as -x" +msgstr " xtrace same as -x" + +#: builtins.c:814 +msgid "" +" -p Turned on whenever the real and effective user ids do not match." +msgstr "" +" -p Turned on whenever the real and effective user ids do not match." + +#: builtins.c:815 +msgid " Disables processing of the $ENV file and importing of shell" +msgstr " Disables processing of the $ENV file and importing of shell" + +#: builtins.c:816 +msgid "" +" functions. Turning this option off causes the effective uid and" +msgstr "" +" functions. Turning this option off causes the effective uid and" + +#: builtins.c:817 +msgid " gid to be set to the real uid and gid." +msgstr " gid to be set to the real uid and gid." + +#: builtins.c:818 +msgid " -t Exit after reading and executing one command." +msgstr " -t Exit after reading and executing one command." + +#: builtins.c:819 +msgid " -u Treat unset variables as an error when substituting." +msgstr " -u Treat unset variables as an error when substituting." + +#: builtins.c:820 +msgid " -v Print shell input lines as they are read." +msgstr " -v Print shell input lines as they are read." + +#: builtins.c:821 +msgid " -x Print commands and their arguments as they are executed." +msgstr " -x Print commands and their arguments as they are executed." + +#: builtins.c:823 +msgid " -B the shell will perform brace expansion" +msgstr " -B the shell will perform brace expansion" + +#: builtins.c:825 +msgid " -C If set, disallow existing regular files to be overwritten" +msgstr " -C If set, disallow existing regular files to be overwritten" + +#: builtins.c:826 +msgid " by redirection of output." +msgstr " by redirection of output." + +#: builtins.c:827 +msgid " -E If set, the ERR trap is inherited by shell functions." +msgstr " -E If set, the ERR trap is inherited by shell functions." + +#: builtins.c:829 +msgid " -H Enable ! style history substitution. This flag is on" +msgstr " -H Enable ! style history substitution. This flag is on" + +#: builtins.c:830 +msgid " by default." +msgstr " by default." + +#: builtins.c:832 +msgid " -P If set, do not follow symbolic links when executing commands" +msgstr " -P If set, do not follow symbolic links when executing commands" + +#: builtins.c:833 +msgid " such as cd which change the current directory." +msgstr " such as cd which change the current directory." + +#: builtins.c:834 +msgid " -T If set, the DEBUG trap is inherited by shell functions." +msgstr " -T If set, the DEBUG trap is inherited by shell functions." + +#: builtins.c:836 +msgid "Using + rather than - causes these flags to be turned off. The" +msgstr "Using + rather than - causes these flags to be turned off. The" + +#: builtins.c:837 +msgid "flags can also be used upon invocation of the shell. The current" +msgstr "flags can also be used upon invocation of the shell. The current" + +#: builtins.c:838 +msgid "set of flags may be found in $-. The remaining n ARGs are positional" +msgstr "set of flags may be found in $-. The remaining n ARGs are positional" + +#: builtins.c:839 +msgid "parameters and are assigned, in order, to $1, $2, .. $n. If no" +msgstr "parameters and are assigned, in order, to $1, $2, .. $n. If no" + +#: builtins.c:840 +msgid "ARGs are given, all shell variables are printed." +msgstr "ARGs are given, all shell variables are printed." + +#: builtins.c:846 +msgid "For each NAME, remove the corresponding variable or function. Given" +msgstr "For each NAME, remove the corresponding variable or function. Given" + +#: builtins.c:847 +msgid "the `-v', unset will only act on variables. Given the `-f' flag," +msgstr "" +"the ‘-v’, unset will only act on variables. Given the ‘-f’ flag," + +#: builtins.c:848 +msgid "unset will only act on functions. With neither flag, unset first" +msgstr "unset will only act on functions. With neither flag, unset first" + +#: builtins.c:849 +msgid "tries to unset a variable, and if that fails, then tries to unset a" +msgstr "tries to unset a variable, and if that fails, then tries to unset a" + +#: builtins.c:850 +msgid "function. Some variables cannot be unset; also see readonly." +msgstr "function. Some variables cannot be unset; also see readonly." + +#: builtins.c:856 +msgid "NAMEs are marked for automatic export to the environment of" +msgstr "NAMEs are marked for automatic export to the environment of" + +#: builtins.c:857 +msgid "subsequently executed commands. If the -f option is given," +msgstr "subsequently executed commands. If the -f option is given," + +#: builtins.c:858 +msgid "the NAMEs refer to functions. If no NAMEs are given, or if `-p'" +msgstr "the NAMEs refer to functions. If no NAMEs are given, or if ‘-p’" + +#: builtins.c:859 +msgid "is given, a list of all names that are exported in this shell is" +msgstr "is given, a list of all names that are exported in this shell is" + +#: builtins.c:860 +msgid "printed. An argument of `-n' says to remove the export property" +msgstr "printed. An argument of ‘-n’ says to remove the export property" + +#: builtins.c:861 +msgid "from subsequent NAMEs. An argument of `--' disables further option" +msgstr "" +"from subsequent NAMEs. An argument of ‘--’ disables further option" + +#: builtins.c:862 builtins.c:874 +msgid "processing." +msgstr "processing." + +#: builtins.c:868 +msgid "The given NAMEs are marked readonly and the values of these NAMEs may" +msgstr "The given NAMEs are marked readonly and the values of these NAMEs may" + +#: builtins.c:869 +msgid "not be changed by subsequent assignment. If the -f option is given," +msgstr "not be changed by subsequent assignment. If the -f option is given," + +#: builtins.c:870 +msgid "then functions corresponding to the NAMEs are so marked. If no" +msgstr "then functions corresponding to the NAMEs are so marked. If no" + +#: builtins.c:871 +msgid "arguments are given, or if `-p' is given, a list of all readonly names" +msgstr "" +"arguments are given, or if ‘-p’ is given, a list of all readonly names" + +#: builtins.c:872 +msgid "is printed. The `-a' option means to treat each NAME as" +msgstr "is printed. The ‘-a’ option means to treat each NAME as" + +#: builtins.c:873 +msgid "an array variable. An argument of `--' disables further option" +msgstr "an array variable. An argument of ‘--’ disables further option" + +#: builtins.c:880 +msgid "The positional parameters from $N+1 ... are renamed to $1 ... If N is" +msgstr "The positional parameters from $N+1 ... are renamed to $1 ... If N is" + +#: builtins.c:881 +msgid "not given, it is assumed to be 1." +msgstr "not given, it is assumed to be 1." + +#: builtins.c:887 builtins.c:896 +msgid "Read and execute commands from FILENAME and return. The pathnames" +msgstr "Read and execute commands from FILENAME and return. The pathnames" + +#: builtins.c:888 builtins.c:897 +msgid "in $PATH are used to find the directory containing FILENAME. If any" +msgstr "in $PATH are used to find the directory containing FILENAME. If any" + +#: builtins.c:889 builtins.c:898 +msgid "ARGUMENTS are supplied, they become the positional parameters when" +msgstr "ARGUMENTS are supplied, they become the positional parameters when" + +#: builtins.c:890 builtins.c:899 +msgid "FILENAME is executed." +msgstr "FILENAME is executed." + +#: builtins.c:906 +msgid "Suspend the execution of this shell until it receives a SIGCONT" +msgstr "Suspend the execution of this shell until it receives a SIGCONT" + +#: builtins.c:907 +msgid "signal. The `-f' if specified says not to complain about this" +msgstr "signal. The ‘-f’ if specified says not to complain about this" + +#: builtins.c:908 +msgid "being a login shell if it is; just suspend anyway." +msgstr "being a login shell if it is; just suspend anyway." + +#: builtins.c:915 +msgid "Exits with a status of 0 (true) or 1 (false) depending on" +msgstr "Exits with a status of 0 (true) or 1 (false) depending on" + +#: builtins.c:916 +msgid "the evaluation of EXPR. Expressions may be unary or binary. Unary" +msgstr "the evaluation of EXPR. Expressions may be unary or binary. Unary" + +#: builtins.c:917 +msgid "expressions are often used to examine the status of a file. There" +msgstr "expressions are often used to examine the status of a file. There" + +#: builtins.c:918 +msgid "are string operators as well, and numeric comparison operators." +msgstr "are string operators as well, and numeric comparison operators." + +#: builtins.c:920 +msgid "File operators:" +msgstr "File operators:" + +#: builtins.c:922 +msgid " -a FILE True if file exists." +msgstr " -a FILE True if file exists." + +#: builtins.c:923 +msgid " -b FILE True if file is block special." +msgstr " -b FILE True if file is block special." + +#: builtins.c:924 +msgid " -c FILE True if file is character special." +msgstr " -c FILE True if file is character special." + +#: builtins.c:925 +msgid " -d FILE True if file is a directory." +msgstr " -d FILE True if file is a directory." + +#: builtins.c:926 +msgid " -e FILE True if file exists." +msgstr " -e FILE True if file exists." + +#: builtins.c:927 +msgid " -f FILE True if file exists and is a regular file." +msgstr " -f FILE True if file exists and is a regular file." + +#: builtins.c:928 +msgid " -g FILE True if file is set-group-id." +msgstr " -g FILE True if file is set-group-id." + +#: builtins.c:929 +msgid " -h FILE True if file is a symbolic link." +msgstr " -h FILE True if file is a symbolic link." + +#: builtins.c:930 +msgid " -L FILE True if file is a symbolic link." +msgstr " -L FILE True if file is a symbolic link." + +#: builtins.c:931 +msgid " -k FILE True if file has its `sticky' bit set." +msgstr " -k FILE True if file has its ‘sticky’ bit set." + +#: builtins.c:932 +msgid " -p FILE True if file is a named pipe." +msgstr " -p FILE True if file is a named pipe." + +#: builtins.c:933 +msgid " -r FILE True if file is readable by you." +msgstr " -r FILE True if file is readable by you." + +#: builtins.c:934 +msgid " -s FILE True if file exists and is not empty." +msgstr " -s FILE True if file exists and is not empty." + +#: builtins.c:935 +msgid " -S FILE True if file is a socket." +msgstr " -S FILE True if file is a socket." + +#: builtins.c:936 +msgid " -t FD True if FD is opened on a terminal." +msgstr " -t FD True if FD is opened on a terminal." + +#: builtins.c:937 +msgid " -u FILE True if the file is set-user-id." +msgstr " -u FILE True if the file is set-user-id." + +#: builtins.c:938 +msgid " -w FILE True if the file is writable by you." +msgstr " -w FILE True if the file is writable by you." + +#: builtins.c:939 +msgid " -x FILE True if the file is executable by you." +msgstr " -x FILE True if the file is executable by you." + +#: builtins.c:940 +msgid " -O FILE True if the file is effectively owned by you." +msgstr " -O FILE True if the file is effectively owned by you." + +#: builtins.c:941 +msgid " -G FILE True if the file is effectively owned by your group." +msgstr "" +" -G FILE True if the file is effectively owned by your group." + +#: builtins.c:942 +msgid "" +" -N FILE True if the file has been modified since it was last read." +msgstr "" +" -N FILE True if the file has been modified since it was last read." + +#: builtins.c:944 +msgid " FILE1 -nt FILE2 True if file1 is newer than file2 (according to" +msgstr " FILE1 -nt FILE2 True if file1 is newer than file2 (according to" + +#: builtins.c:945 +msgid " modification date)." +msgstr " modification date)." + +#: builtins.c:947 +msgid " FILE1 -ot FILE2 True if file1 is older than file2." +msgstr " FILE1 -ot FILE2 True if file1 is older than file2." + +#: builtins.c:949 +msgid " FILE1 -ef FILE2 True if file1 is a hard link to file2." +msgstr " FILE1 -ef FILE2 True if file1 is a hard link to file2." + +#: builtins.c:951 +msgid "String operators:" +msgstr "String operators:" + +#: builtins.c:953 +msgid " -z STRING True if string is empty." +msgstr " -z STRING True if string is empty." + +#: builtins.c:955 +msgid " -n STRING" +msgstr " -n STRING" + +#: builtins.c:956 +msgid " STRING True if string is not empty." +msgstr " STRING True if string is not empty." + +#: builtins.c:958 +msgid " STRING1 = STRING2" +msgstr " STRING1 = STRING2" + +#: builtins.c:959 +msgid " True if the strings are equal." +msgstr " True if the strings are equal." + +#: builtins.c:960 +msgid " STRING1 != STRING2" +msgstr " STRING1 != STRING2" + +#: builtins.c:961 +msgid " True if the strings are not equal." +msgstr " True if the strings are not equal." + +#: builtins.c:962 +msgid " STRING1 < STRING2" +msgstr " STRING1 < STRING2" + +#: builtins.c:963 +msgid "" +" True if STRING1 sorts before STRING2 lexicographically." +msgstr "" +" True if STRING1 sorts before STRING2 lexicographically." + +#: builtins.c:964 +msgid " STRING1 > STRING2" +msgstr " STRING1 > STRING2" + +#: builtins.c:965 +msgid "" +" True if STRING1 sorts after STRING2 lexicographically." +msgstr "" +" True if STRING1 sorts after STRING2 lexicographically." + +#: builtins.c:967 +msgid "Other operators:" +msgstr "Other operators:" + +#: builtins.c:969 +msgid " -o OPTION True if the shell option OPTION is enabled." +msgstr " -o OPTION True if the shell option OPTION is enabled." + +#: builtins.c:970 +msgid " ! EXPR True if expr is false." +msgstr " ! EXPR True if expr is false." + +#: builtins.c:971 +msgid " EXPR1 -a EXPR2 True if both expr1 AND expr2 are true." +msgstr " EXPR1 -a EXPR2 True if both expr1 AND expr2 are true." + +#: builtins.c:972 +msgid " EXPR1 -o EXPR2 True if either expr1 OR expr2 is true." +msgstr " EXPR1 -o EXPR2 True if either expr1 OR expr2 is true." + +#: builtins.c:974 +msgid " arg1 OP arg2 Arithmetic tests. OP is one of -eq, -ne," +msgstr " arg1 OP arg2 Arithmetic tests. OP is one of -eq, -ne," + +#: builtins.c:975 +msgid " -lt, -le, -gt, or -ge." +msgstr " -lt, -le, -gt, or -ge." + +#: builtins.c:977 +msgid "Arithmetic binary operators return true if ARG1 is equal, not-equal," +msgstr "Arithmetic binary operators return true if ARG1 is equal, not-equal," + +#: builtins.c:978 +msgid "less-than, less-than-or-equal, greater-than, or greater-than-or-equal" +msgstr "less-than, less-than-or-equal, greater-than, or greater-than-or-equal" + +#: builtins.c:979 +msgid "than ARG2." +msgstr "than ARG2." + +#: builtins.c:985 +msgid "This is a synonym for the \"test\" builtin, but the last" +msgstr "This is a synonym for the “test” builtin, but the last" + +#: builtins.c:986 +msgid "argument must be a literal `]', to match the opening `['." +msgstr "argument must be a literal ‘]’, to match the opening ‘[’." + +#: builtins.c:992 +msgid "Print the accumulated user and system times for processes run from" +msgstr "Print the accumulated user and system times for processes run from" + +#: builtins.c:993 +msgid "the shell." +msgstr "the shell." + +#: builtins.c:999 +msgid "The command ARG is to be read and executed when the shell receives" +msgstr "The command ARG is to be read and executed when the shell receives" + +#: builtins.c:1000 +msgid "signal(s) SIGNAL_SPEC. If ARG is absent all specified signals are" +msgstr "signal(s) SIGNAL_SPEC. If ARG is absent all specified signals are" + +#: builtins.c:1001 +msgid "reset to their original values. If ARG is the null string each" +msgstr "reset to their original values. If ARG is the null string each" + +#: builtins.c:1002 +msgid "SIGNAL_SPEC is ignored by the shell and by the commands it invokes." +msgstr "SIGNAL_SPEC is ignored by the shell and by the commands it invokes." + +#: builtins.c:1003 +msgid "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from" +msgstr "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from" + +#: builtins.c:1004 +msgid "the shell. If a SIGNAL_SPEC is DEBUG, ARG is executed after every" +msgstr "the shell. If a SIGNAL_SPEC is DEBUG, ARG is executed after every" + +#: builtins.c:1005 +msgid "command. If ARG is `-p' then the trap commands associated with" +msgstr "command. If ARG is ‘-p’ then the trap commands associated with" + +#: builtins.c:1006 +msgid "each SIGNAL_SPEC are displayed. If no arguments are supplied or if" +msgstr "each SIGNAL_SPEC are displayed. If no arguments are supplied or if" + +#: builtins.c:1007 +msgid "only `-p' is given, trap prints the list of commands associated with" +msgstr "" +"only ‘-p’ is given, trap prints the list of commands associated with" + +#: builtins.c:1008 +msgid "" +"each signal number. Each SIGNAL_SPEC is either a signal name in " +msgstr "" +"each signal number. Each SIGNAL_SPEC is either a signal name in " + +#: builtins.c:1009 +msgid "or a signal number. `trap -l' prints a list of signal names and their" +msgstr "" +"or a signal number. ‘trap -l’ prints a list of signal names and their" + +#: builtins.c:1010 +msgid "corresponding numbers. Note that a signal can be sent to the shell" +msgstr "corresponding numbers. Note that a signal can be sent to the shell" + +#: builtins.c:1011 +msgid "with \"kill -signal $$\"." +msgstr "with “kill -signal $$”." + +#: builtins.c:1017 +msgid "For each NAME, indicate how it would be interpreted if used as a" +msgstr "For each NAME, indicate how it would be interpreted if used as a" + +#: builtins.c:1018 +msgid "command name." +msgstr "command name." + +#: builtins.c:1020 +msgid "If the -t option is used, `type' outputs a single word which is one of" +msgstr "" +"If the -t option is used, ‘type’ outputs a single word which is one of" + +#: builtins.c:1021 +msgid "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an" +msgstr "" +"‘alias’, ‘keyword’, ‘function’, ‘builtin’, ‘file" +"[0m’ or ‘’, if NAME is an" + +#: builtins.c:1022 +msgid "alias, shell reserved word, shell function, shell builtin, disk file," +msgstr "alias, shell reserved word, shell function, shell builtin, disk file," + +#: builtins.c:1023 +msgid "or unfound, respectively." +msgstr "or unfound, respectively." + +#: builtins.c:1025 +msgid "If the -p flag is used, `type' either returns the name of the disk" +msgstr "" +"If the -p flag is used, ‘type’ either returns the name of the disk" + +#: builtins.c:1026 +msgid "file that would be executed, or nothing if `type -t NAME' would not" +msgstr "" +"file that would be executed, or nothing if ‘type -t NAME’ would not" + +#: builtins.c:1027 +msgid "return `file'." +msgstr "return ‘file’." + +#: builtins.c:1029 +msgid "If the -a flag is used, `type' displays all of the places that contain" +msgstr "" +"If the -a flag is used, ‘type’ displays all of the places that contain" + +#: builtins.c:1030 +msgid "an executable named `file'. This includes aliases, builtins, and" +msgstr "" +"an executable named ‘file’. This includes aliases, builtins, and" + +#: builtins.c:1031 +msgid "functions, if and only if the -p flag is not also used." +msgstr "functions, if and only if the -p flag is not also used." + +#: builtins.c:1033 +msgid "The -f flag suppresses shell function lookup." +msgstr "The -f flag suppresses shell function lookup." + +#: builtins.c:1035 +msgid "The -P flag forces a PATH search for each NAME, even if it is an alias," +msgstr "" +"The -P flag forces a PATH search for each NAME, even if it is an alias," + +#: builtins.c:1036 +msgid "builtin, or function, and returns the name of the disk file that would" +msgstr "builtin, or function, and returns the name of the disk file that would" + +#: builtins.c:1037 +msgid "be executed." +msgstr "be executed." + +#: builtins.c:1044 +msgid "Ulimit provides control over the resources available to processes" +msgstr "Ulimit provides control over the resources available to processes" + +#: builtins.c:1045 +msgid "started by the shell, on systems that allow such control. If an" +msgstr "started by the shell, on systems that allow such control. If an" + +#: builtins.c:1046 +msgid "option is given, it is interpreted as follows:" +msgstr "option is given, it is interpreted as follows:" + +#: builtins.c:1048 +msgid " -S\tuse the `soft' resource limit" +msgstr " -S\tuse the ‘soft’ resource limit" + +#: builtins.c:1049 +msgid " -H\tuse the `hard' resource limit" +msgstr " -H\tuse the ‘hard’ resource limit" + +#: builtins.c:1050 +msgid " -a\tall current limits are reported" +msgstr " -a\tall current limits are reported" + +#: builtins.c:1051 +msgid " -c\tthe maximum size of core files created" +msgstr " -c\tthe maximum size of core files created" + +#: builtins.c:1052 +msgid " -d\tthe maximum size of a process's data segment" +msgstr " -d\tthe maximum size of a process's data segment" + +#: builtins.c:1053 +msgid " -f\tthe maximum size of files created by the shell" +msgstr " -f\tthe maximum size of files created by the shell" + +#: builtins.c:1054 +msgid " -l\tthe maximum size a process may lock into memory" +msgstr " -l\tthe maximum size a process may lock into memory" + +#: builtins.c:1055 +msgid " -m\tthe maximum resident set size" +msgstr " -m\tthe maximum resident set size" + +#: builtins.c:1056 +msgid " -n\tthe maximum number of open file descriptors" +msgstr " -n\tthe maximum number of open file descriptors" + +#: builtins.c:1057 +msgid " -p\tthe pipe buffer size" +msgstr " -p\tthe pipe buffer size" + +#: builtins.c:1058 +msgid " -s\tthe maximum stack size" +msgstr " -s\tthe maximum stack size" + +#: builtins.c:1059 +msgid " -t\tthe maximum amount of cpu time in seconds" +msgstr " -t\tthe maximum amount of cpu time in seconds" + +#: builtins.c:1060 +msgid " -u\tthe maximum number of user processes" +msgstr " -u\tthe maximum number of user processes" + +#: builtins.c:1061 +msgid " -v\tthe size of virtual memory" +msgstr " -v\tthe size of virtual memory" + +#: builtins.c:1063 +msgid "If LIMIT is given, it is the new value of the specified resource;" +msgstr "If LIMIT is given, it is the new value of the specified resource;" + +#: builtins.c:1064 +msgid "the special LIMIT values `soft', `hard', and `unlimited' stand for" +msgstr "" +"the special LIMIT values ‘soft’, ‘hard’, and ‘unlimited’ " +"stand for" + +#: builtins.c:1065 +msgid "" +"the current soft limit, the current hard limit, and no limit, respectively." +msgstr "" +"the current soft limit, the current hard limit, and no limit, respectively." + +#: builtins.c:1066 +msgid "Otherwise, the current value of the specified resource is printed." +msgstr "Otherwise, the current value of the specified resource is printed." + +#: builtins.c:1067 +msgid "If no option is given, then -f is assumed. Values are in 1024-byte" +msgstr "If no option is given, then -f is assumed. Values are in 1024-byte" + +#: builtins.c:1068 +msgid "increments, except for -t, which is in seconds, -p, which is in" +msgstr "increments, except for -t, which is in seconds, -p, which is in" + +#: builtins.c:1069 +msgid "increments of 512 bytes, and -u, which is an unscaled number of" +msgstr "increments of 512 bytes, and -u, which is an unscaled number of" + +#: builtins.c:1070 +msgid "processes." +msgstr "processes." + +#: builtins.c:1077 +msgid "The user file-creation mask is set to MODE. If MODE is omitted, or if" +msgstr "The user file-creation mask is set to MODE. If MODE is omitted, or if" + +#: builtins.c:1078 +msgid "`-S' is supplied, the current value of the mask is printed. The `-S'" +msgstr "" +"‘-S’ is supplied, the current value of the mask is printed. The ‘-S" +"[0m’" + +#: builtins.c:1079 +msgid "option makes the output symbolic; otherwise an octal number is output." +msgstr "option makes the output symbolic; otherwise an octal number is output." + +#: builtins.c:1080 +msgid "If `-p' is supplied, and MODE is omitted, the output is in a form" +msgstr "" +"If ‘-p’ is supplied, and MODE is omitted, the output is in a form" + +#: builtins.c:1081 +msgid "that may be used as input. If MODE begins with a digit, it is" +msgstr "that may be used as input. If MODE begins with a digit, it is" + +#: builtins.c:1082 +msgid "interpreted as an octal number, otherwise it is a symbolic mode string" +msgstr "interpreted as an octal number, otherwise it is a symbolic mode string" + +#: builtins.c:1083 +msgid "like that accepted by chmod(1)." +msgstr "like that accepted by chmod(1)." + +#: builtins.c:1090 builtins.c:1102 +msgid "Wait for the specified process and report its termination status. If" +msgstr "Wait for the specified process and report its termination status. If" + +#: builtins.c:1091 builtins.c:1103 +msgid "N is not given, all currently active child processes are waited for," +msgstr "N is not given, all currently active child processes are waited for," + +#: builtins.c:1092 +msgid "and the return code is zero. N may be a process ID or a job" +msgstr "and the return code is zero. N may be a process ID or a job" + +#: builtins.c:1093 +msgid "specification; if a job spec is given, all processes in the job's" +msgstr "specification; if a job spec is given, all processes in the job's" + +#: builtins.c:1094 +msgid "pipeline are waited for." +msgstr "pipeline are waited for." + +#: builtins.c:1104 +msgid "and the return code is zero. N is a process ID; if it is not given," +msgstr "and the return code is zero. N is a process ID; if it is not given," + +#: builtins.c:1105 +msgid "all child processes of the shell are waited for." +msgstr "all child processes of the shell are waited for." + +#: builtins.c:1112 +msgid "The `for' loop executes a sequence of commands for each member in a" +msgstr "" +"The ‘for’ loop executes a sequence of commands for each member in a" + +#: builtins.c:1113 +msgid "list of items. If `in WORDS ...;' is not present, then `in \"$@\"' is" +msgstr "" +"list of items. If ‘in WORDS ...;’ is not present, then ‘in “$@" +"[0m”’ is" + +#: builtins.c:1114 +msgid "assumed. For each element in WORDS, NAME is set to that element, and" +msgstr "assumed. For each element in WORDS, NAME is set to that element, and" + +#: builtins.c:1115 +msgid "the COMMANDS are executed." +msgstr "the COMMANDS are executed." + +#: builtins.c:1121 +msgid "Equivalent to" +msgstr "Equivalent to" + +#: builtins.c:1122 +msgid "\t(( EXP1 ))" +msgstr "\t(( EXP1 ))" + +#: builtins.c:1123 +msgid "\twhile (( EXP2 )); do" +msgstr "\twhile (( EXP2 )); do" + +#: builtins.c:1124 +msgid "\t\tCOMMANDS" +msgstr "\t\tCOMMANDS" + +#: builtins.c:1125 +msgid "\t\t(( EXP3 ))" +msgstr "\t\t(( EXP3 ))" + +#: builtins.c:1126 +msgid "\tdone" +msgstr "\tdone" + +#: builtins.c:1127 +msgid "EXP1, EXP2, and EXP3 are arithmetic expressions. If any expression is" +msgstr "EXP1, EXP2, and EXP3 are arithmetic expressions. If any expression is" + +#: builtins.c:1128 +msgid "omitted, it behaves as if it evaluates to 1." +msgstr "omitted, it behaves as if it evaluates to 1." + +#: builtins.c:1134 +msgid "The WORDS are expanded, generating a list of words. The" +msgstr "The WORDS are expanded, generating a list of words. The" + +#: builtins.c:1135 +msgid "set of expanded words is printed on the standard error, each" +msgstr "set of expanded words is printed on the standard error, each" + +#: builtins.c:1136 +msgid "preceded by a number. If `in WORDS' is not present, `in \"$@\"'" +msgstr "" +"preceded by a number. If ‘in WORDS’ is not present, ‘in “$@" +"[0m”’" + +#: builtins.c:1137 +msgid "is assumed. The PS3 prompt is then displayed and a line read" +msgstr "is assumed. The PS3 prompt is then displayed and a line read" + +#: builtins.c:1138 +msgid "from the standard input. If the line consists of the number" +msgstr "from the standard input. If the line consists of the number" + +#: builtins.c:1139 +msgid "corresponding to one of the displayed words, then NAME is set" +msgstr "corresponding to one of the displayed words, then NAME is set" + +#: builtins.c:1140 +msgid "to that word. If the line is empty, WORDS and the prompt are" +msgstr "to that word. If the line is empty, WORDS and the prompt are" + +#: builtins.c:1141 +msgid "redisplayed. If EOF is read, the command completes. Any other" +msgstr "redisplayed. If EOF is read, the command completes. Any other" + +#: builtins.c:1142 +msgid "value read causes NAME to be set to null. The line read is saved" +msgstr "value read causes NAME to be set to null. The line read is saved" + +#: builtins.c:1143 +msgid "in the variable REPLY. COMMANDS are executed after each selection" +msgstr "in the variable REPLY. COMMANDS are executed after each selection" + +#: builtins.c:1144 +msgid "until a break command is executed." +msgstr "until a break command is executed." + +#: builtins.c:1150 +msgid "Execute PIPELINE and print a summary of the real time, user CPU time," +msgstr "Execute PIPELINE and print a summary of the real time, user CPU time," + +#: builtins.c:1151 +msgid "and system CPU time spent executing PIPELINE when it terminates." +msgstr "and system CPU time spent executing PIPELINE when it terminates." + +#: builtins.c:1152 +msgid "The return status is the return status of PIPELINE. The `-p' option" +msgstr "" +"The return status is the return status of PIPELINE. The ‘-p’ option" + +#: builtins.c:1153 +msgid "prints the timing summary in a slightly different format. This uses" +msgstr "prints the timing summary in a slightly different format. This uses" + +#: builtins.c:1154 +msgid "the value of the TIMEFORMAT variable as the output format." +msgstr "the value of the TIMEFORMAT variable as the output format." + +#: builtins.c:1160 +msgid "Selectively execute COMMANDS based upon WORD matching PATTERN. The" +msgstr "Selectively execute COMMANDS based upon WORD matching PATTERN. The" + +#: builtins.c:1161 +msgid "`|' is used to separate multiple patterns." +msgstr "‘|’ is used to separate multiple patterns." + +#: builtins.c:1167 +msgid "" +"The if COMMANDS are executed. If the exit status is zero, then the then" +msgstr "" +"The if COMMANDS are executed. If the exit status is zero, then the then" + +#: builtins.c:1168 +msgid "" +"COMMANDS are executed. Otherwise, each of the elif COMMANDS are executed" +msgstr "" +"COMMANDS are executed. Otherwise, each of the elif COMMANDS are executed" + +#: builtins.c:1169 +msgid "" +"in turn, and if the exit status is zero, the corresponding then COMMANDS" +msgstr "" +"in turn, and if the exit status is zero, the corresponding then COMMANDS" + +#: builtins.c:1170 +msgid "" +"are executed and the if command completes. Otherwise, the else COMMANDS" +msgstr "" +"are executed and the if command completes. Otherwise, the else COMMANDS" + +#: builtins.c:1171 +msgid "" +"are executed, if present. The exit status is the exit status of the last" +msgstr "" +"are executed, if present. The exit status is the exit status of the last" + +#: builtins.c:1172 +msgid "command executed, or zero if no condition tested true." +msgstr "command executed, or zero if no condition tested true." + +#: builtins.c:1178 builtins.c:1185 +msgid "Expand and execute COMMANDS as long as the final command in the" +msgstr "Expand and execute COMMANDS as long as the final command in the" + +#: builtins.c:1179 +msgid "`while' COMMANDS has an exit status of zero." +msgstr "‘while’ COMMANDS has an exit status of zero." + +#: builtins.c:1186 +msgid "`until' COMMANDS has an exit status which is not zero." +msgstr "‘until’ COMMANDS has an exit status which is not zero." + +#: builtins.c:1192 +msgid "Create a simple command invoked by NAME which runs COMMANDS." +msgstr "Create a simple command invoked by NAME which runs COMMANDS." + +#: builtins.c:1193 +msgid "Arguments on the command line along with NAME are passed to the" +msgstr "Arguments on the command line along with NAME are passed to the" + +#: builtins.c:1194 +msgid "function as $0 .. $n." +msgstr "function as $0 .. $n." + +#: builtins.c:1200 +msgid "Run a set of commands in a group. This is one way to redirect an" +msgstr "Run a set of commands in a group. This is one way to redirect an" + +#: builtins.c:1201 +msgid "entire set of commands." +msgstr "entire set of commands." + +#: builtins.c:1207 +msgid "This is similar to the `fg' command. Resume a stopped or background" +msgstr "" +"This is similar to the ‘fg’ command. Resume a stopped or background" + +#: builtins.c:1208 +msgid "job. If you specifiy DIGITS, then that job is used. If you specify" +msgstr "job. If you specifiy DIGITS, then that job is used. If you specify" + +#: builtins.c:1209 +msgid "WORD, then the job whose name begins with WORD is used. Following the" +msgstr "WORD, then the job whose name begins with WORD is used. Following the" + +#: builtins.c:1210 +msgid "job specification with a `&' places the job in the background." +msgstr "job specification with a ‘&’ places the job in the background." + +#: builtins.c:1216 +msgid "The EXPRESSION is evaluated according to the rules for arithmetic" +msgstr "The EXPRESSION is evaluated according to the rules for arithmetic" + +#: builtins.c:1217 +msgid "evaluation. Equivalent to \"let EXPRESSION\"." +msgstr "evaluation. Equivalent to “let EXPRESSION”." + +#: builtins.c:1223 +msgid "" +"Returns a status of 0 or 1 depending on the evaluation of the conditional" +msgstr "" +"Returns a status of 0 or 1 depending on the evaluation of the conditional" + +#: builtins.c:1224 +msgid "" +"expression EXPRESSION. Expressions are composed of the same primaries used" +msgstr "" +"expression EXPRESSION. Expressions are composed of the same primaries used" + +#: builtins.c:1225 +msgid "" +"by the `test' builtin, and may be combined using the following operators" +msgstr "" +"by the ‘test’ builtin, and may be combined using the following " +"operators" + +#: builtins.c:1227 +msgid "\t( EXPRESSION )\tReturns the value of EXPRESSION" +msgstr "\t( EXPRESSION )\tReturns the value of EXPRESSION" + +#: builtins.c:1228 +msgid "\t! EXPRESSION\tTrue if EXPRESSION is false; else false" +msgstr "\t! EXPRESSION\tTrue if EXPRESSION is false; else false" + +#: builtins.c:1229 +msgid "\tEXPR1 && EXPR2\tTrue if both EXPR1 and EXPR2 are true; else false" +msgstr "\tEXPR1 && EXPR2\tTrue if both EXPR1 and EXPR2 are true; else false" + +#: builtins.c:1230 +msgid "\tEXPR1 || EXPR2\tTrue if either EXPR1 or EXPR2 is true; else false" +msgstr "\tEXPR1 || EXPR2\tTrue if either EXPR1 or EXPR2 is true; else false" + +#: builtins.c:1232 +msgid "" +"When the `==' and `!=' operators are used, the string to the right of the" +msgstr "" +"When the ‘==’ and ‘!=’ operators are used, the string to the " +"right of the" + +#: builtins.c:1233 +msgid "operator is used as a pattern and pattern matching is performed. The" +msgstr "operator is used as a pattern and pattern matching is performed. The" + +#: builtins.c:1234 +msgid "&& and || operators do not evaluate EXPR2 if EXPR1 is sufficient to" +msgstr "&& and || operators do not evaluate EXPR2 if EXPR1 is sufficient to" + +#: builtins.c:1235 +msgid "determine the expression's value." +msgstr "determine the expression's value." + +#: builtins.c:1241 +msgid "BASH_VERSION Version information for this Bash." +msgstr "BASH_VERSION Version information for this Bash." + +#: builtins.c:1242 +msgid "CDPATH A colon separated list of directories to search" +msgstr "CDPATH A colon separated list of directories to search" + +#: builtins.c:1243 +msgid "\t\twhen the argument to `cd' is not found in the current" +msgstr "\t\twhen the argument to ‘cd’ is not found in the current" + +#: builtins.c:1244 +msgid "\t\tdirectory." +msgstr "\t\tdirectory." + +#: builtins.c:1245 +msgid "GLOBIGNORE\tA colon-separated list of patterns describing filenames to" +msgstr "GLOBIGNORE\tA colon-separated list of patterns describing filenames to" + +#: builtins.c:1246 +msgid "\t\tbe ignored by pathname expansion." +msgstr "\t\tbe ignored by pathname expansion." + +#: builtins.c:1248 +msgid "" +"HISTFILE The name of the file where your command history is stored." +msgstr "" +"HISTFILE The name of the file where your command history is stored." + +#: builtins.c:1249 +msgid "HISTFILESIZE The maximum number of lines this file can contain." +msgstr "HISTFILESIZE The maximum number of lines this file can contain." + +#: builtins.c:1250 +msgid "HISTSIZE The maximum number of history lines that a running" +msgstr "HISTSIZE The maximum number of history lines that a running" + +#: builtins.c:1251 +msgid "\t\tshell can access." +msgstr "\t\tshell can access." + +#: builtins.c:1253 +msgid "HOME The complete pathname to your login directory." +msgstr "HOME The complete pathname to your login directory." + +#: builtins.c:1254 +msgid "HOSTNAME\tThe name of the current host." +msgstr "HOSTNAME\tThe name of the current host." + +#: builtins.c:1255 +msgid "HOSTTYPE The type of CPU this version of Bash is running under." +msgstr "HOSTTYPE The type of CPU this version of Bash is running under." + +#: builtins.c:1256 +msgid "IGNOREEOF Controls the action of the shell on receipt of an EOF" +msgstr "IGNOREEOF Controls the action of the shell on receipt of an EOF" + +#: builtins.c:1257 +msgid "\t\tcharacter as the sole input. If set, then the value" +msgstr "\t\tcharacter as the sole input. If set, then the value" + +#: builtins.c:1258 +msgid "\t\tof it is the number of EOF characters that can be seen" +msgstr "\t\tof it is the number of EOF characters that can be seen" + +#: builtins.c:1259 +msgid "\t\tin a row on an empty line before the shell will exit" +msgstr "\t\tin a row on an empty line before the shell will exit" + +#: builtins.c:1260 +msgid "\t\t(default 10). When unset, EOF signifies the end of input." +msgstr "\t\t(default 10). When unset, EOF signifies the end of input." + +#: builtins.c:1261 +msgid "MACHTYPE\tA string describing the current system Bash is running on." +msgstr "MACHTYPE\tA string describing the current system Bash is running on." + +#: builtins.c:1262 +msgid "MAILCHECK\tHow often, in seconds, Bash checks for new mail." +msgstr "MAILCHECK\tHow often, in seconds, Bash checks for new mail." + +#: builtins.c:1263 +msgid "MAILPATH\tA colon-separated list of filenames which Bash checks" +msgstr "MAILPATH\tA colon-separated list of filenames which Bash checks" + +#: builtins.c:1264 +msgid "\t\tfor new mail." +msgstr "\t\tfor new mail." + +#: builtins.c:1265 +msgid "OSTYPE\t\tThe version of Unix this version of Bash is running on." +msgstr "OSTYPE\t\tThe version of Unix this version of Bash is running on." + +#: builtins.c:1266 +msgid "PATH A colon-separated list of directories to search when" +msgstr "PATH A colon-separated list of directories to search when" + +#: builtins.c:1267 +msgid "\t\tlooking for commands." +msgstr "\t\tlooking for commands." + +#: builtins.c:1268 +msgid "PROMPT_COMMAND A command to be executed before the printing of each" +msgstr "PROMPT_COMMAND A command to be executed before the printing of each" + +#: builtins.c:1269 +msgid "\t\tprimary prompt." +msgstr "\t\tprimary prompt." + +#: builtins.c:1270 +msgid "PS1 The primary prompt string." +msgstr "PS1 The primary prompt string." + +#: builtins.c:1271 +msgid "PS2 The secondary prompt string." +msgstr "PS2 The secondary prompt string." + +#: builtins.c:1272 +msgid "PWD\t\tThe full pathname of the current directory." +msgstr "PWD\t\tThe full pathname of the current directory." + +#: builtins.c:1273 +msgid "SHELLOPTS\tA colon-separated list of enabled shell options." +msgstr "SHELLOPTS\tA colon-separated list of enabled shell options." + +#: builtins.c:1274 +msgid "TERM The name of the current terminal type." +msgstr "TERM The name of the current terminal type." + +#: builtins.c:1275 +msgid "TIMEFORMAT\tThe output format for timing statistics displayed by the" +msgstr "TIMEFORMAT\tThe output format for timing statistics displayed by the" + +#: builtins.c:1276 +msgid "\t\t`time' reserved word." +msgstr "\t\t‘time’ reserved word." + +#: builtins.c:1277 +msgid "auto_resume Non-null means a command word appearing on a line by" +msgstr "auto_resume Non-null means a command word appearing on a line by" + +#: builtins.c:1278 +msgid "\t\titself is first looked for in the list of currently" +msgstr "\t\titself is first looked for in the list of currently" + +#: builtins.c:1279 +msgid "\t\tstopped jobs. If found there, that job is foregrounded." +msgstr "\t\tstopped jobs. If found there, that job is foregrounded." + +#: builtins.c:1280 +msgid "\t\tA value of `exact' means that the command word must" +msgstr "\t\tA value of ‘exact’ means that the command word must" + +#: builtins.c:1281 +msgid "\t\texactly match a command in the list of stopped jobs. A" +msgstr "\t\texactly match a command in the list of stopped jobs. A" + +#: builtins.c:1282 +msgid "\t\tvalue of `substring' means that the command word must" +msgstr "\t\tvalue of ‘substring’ means that the command word must" + +#: builtins.c:1283 +msgid "\t\tmatch a substring of the job. Any other value means that" +msgstr "\t\tmatch a substring of the job. Any other value means that" + +#: builtins.c:1284 +msgid "\t\tthe command must be a prefix of a stopped job." +msgstr "\t\tthe command must be a prefix of a stopped job." + +#: builtins.c:1287 +msgid "histchars Characters controlling history expansion and quick" +msgstr "histchars Characters controlling history expansion and quick" + +#: builtins.c:1288 +msgid "\t\tsubstitution. The first character is the history" +msgstr "\t\tsubstitution. The first character is the history" + +#: builtins.c:1289 +msgid "\t\tsubstitution character, usually `!'. The second is" +msgstr "\t\tsubstitution character, usually ‘!’. The second is" + +#: builtins.c:1290 +msgid "\t\tthe `quick substitution' character, usually `^'. The" +msgstr "\t\tthe ‘quick substitution’ character, usually ‘^’. The" + +#: builtins.c:1291 +msgid "\t\tthird is the `history comment' character, usually `#'." +msgstr "\t\tthird is the ‘history comment’ character, usually ‘#’." + +#: builtins.c:1293 +msgid "HISTIGNORE\tA colon-separated list of patterns used to decide which" +msgstr "HISTIGNORE\tA colon-separated list of patterns used to decide which" + +#: builtins.c:1294 +msgid "\t\tcommands should be saved on the history list." +msgstr "\t\tcommands should be saved on the history list." + +#: builtins.c:1306 +msgid "+N\tRotates the stack so that the Nth directory (counting" +msgstr "+N\tRotates the stack so that the Nth directory (counting" + +#: builtins.c:1307 +msgid "\tfrom the left of the list shown by `dirs', starting with" +msgstr "\tfrom the left of the list shown by ‘dirs’, starting with" + +#: builtins.c:1308 builtins.c:1312 +msgid "\tzero) is at the top." +msgstr "\tzero) is at the top." + +#: builtins.c:1310 +msgid "-N\tRotates the stack so that the Nth directory (counting" +msgstr "-N\tRotates the stack so that the Nth directory (counting" + +#: builtins.c:1311 +msgid "\tfrom the right of the list shown by `dirs', starting with" +msgstr "\tfrom the right of the list shown by ‘dirs’, starting with" + +#: builtins.c:1314 +msgid "-n\tsuppress the normal change of directory when adding directories" +msgstr "-n\tsuppress the normal change of directory when adding directories" + +#: builtins.c:1315 +msgid "\tto the stack, so only the stack is manipulated." +msgstr "\tto the stack, so only the stack is manipulated." + +#: builtins.c:1317 +msgid "dir\tadds DIR to the directory stack at the top, making it the" +msgstr "dir\tadds DIR to the directory stack at the top, making it the" + +#: builtins.c:1318 +msgid "\tnew current working directory." +msgstr "\tnew current working directory." + +#: builtins.c:1332 +msgid "+N\tremoves the Nth entry counting from the left of the list" +msgstr "+N\tremoves the Nth entry counting from the left of the list" + +#: builtins.c:1333 +msgid "\tshown by `dirs', starting with zero. For example: `popd +0'" +msgstr "" +"\tshown by ‘dirs’, starting with zero. For example: ‘popd +0’" + +#: builtins.c:1334 +msgid "\tremoves the first directory, `popd +1' the second." +msgstr "\tremoves the first directory, ‘popd +1’ the second." + +#: builtins.c:1336 +msgid "-N\tremoves the Nth entry counting from the right of the list" +msgstr "-N\tremoves the Nth entry counting from the right of the list" + +#: builtins.c:1337 +msgid "\tshown by `dirs', starting with zero. For example: `popd -0'" +msgstr "" +"\tshown by ‘dirs’, starting with zero. For example: ‘popd -0’" + +#: builtins.c:1338 +msgid "\tremoves the last directory, `popd -1' the next to last." +msgstr "\tremoves the last directory, ‘popd -1’ the next to last." + +#: builtins.c:1340 +msgid "-n\tsuppress the normal change of directory when removing directories" +msgstr "-n\tsuppress the normal change of directory when removing directories" + +#: builtins.c:1341 +msgid "\tfrom the stack, so only the stack is manipulated." +msgstr "\tfrom the stack, so only the stack is manipulated." + +#: builtins.c:1363 +msgid "+N\tdisplays the Nth entry counting from the left of the list shown by" +msgstr "+N\tdisplays the Nth entry counting from the left of the list shown by" + +#: builtins.c:1364 builtins.c:1367 +msgid "\tdirs when invoked without options, starting with zero." +msgstr "\tdirs when invoked without options, starting with zero." + +#: builtins.c:1366 +msgid "-N\tdisplays the Nth entry counting from the right of the list shown by" +msgstr "" +"-N\tdisplays the Nth entry counting from the right of the list shown by" + +#: builtins.c:1374 +msgid "Toggle the values of variables controlling optional behavior." +msgstr "Toggle the values of variables controlling optional behavior." + +#: builtins.c:1375 +msgid "The -s flag means to enable (set) each OPTNAME; the -u flag" +msgstr "The -s flag means to enable (set) each OPTNAME; the -u flag" + +#: builtins.c:1376 +msgid "unsets each OPTNAME. The -q flag suppresses output; the exit" +msgstr "unsets each OPTNAME. The -q flag suppresses output; the exit" + +#: builtins.c:1377 +msgid "status indicates whether each OPTNAME is set or unset. The -o" +msgstr "status indicates whether each OPTNAME is set or unset. The -o" + +#: builtins.c:1378 +msgid "option restricts the OPTNAMEs to those defined for use with" +msgstr "option restricts the OPTNAMEs to those defined for use with" + +#: builtins.c:1379 +msgid "`set -o'. With no options, or with the -p option, a list of all" +msgstr "‘set -o’. With no options, or with the -p option, a list of all" + +#: builtins.c:1380 +msgid "settable options is displayed, with an indication of whether or" +msgstr "settable options is displayed, with an indication of whether or" + +#: builtins.c:1381 +msgid "not each is set." +msgstr "not each is set." + +#: builtins.c:1387 +msgid "printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT" +msgstr "" +"printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT" + +#: builtins.c:1388 +msgid "is a character string which contains three types of objects: plain" +msgstr "is a character string which contains three types of objects: plain" + +#: builtins.c:1389 +msgid "" +"characters, which are simply copied to standard output, character escape" +msgstr "" +"characters, which are simply copied to standard output, character escape" + +#: builtins.c:1390 +msgid "sequences which are converted and copied to the standard output, and" +msgstr "sequences which are converted and copied to the standard output, and" + +#: builtins.c:1391 +msgid "" +"format specifications, each of which causes printing of the next successive" +msgstr "" +"format specifications, each of which causes printing of the next successive" + +#: builtins.c:1392 +msgid "argument. In addition to the standard printf(1) formats, %b means to" +msgstr "argument. In addition to the standard printf(1) formats, %b means to" + +#: builtins.c:1393 +msgid "expand backslash escape sequences in the corresponding argument, and %q" +msgstr "" +"expand backslash escape sequences in the corresponding argument, and %q" + +#: builtins.c:1394 +msgid "means to quote the argument in a way that can be reused as shell input." +msgstr "" +"means to quote the argument in a way that can be reused as shell input." + +#: builtins.c:1401 +msgid "For each NAME, specify how arguments are to be completed." +msgstr "For each NAME, specify how arguments are to be completed." + +#: builtins.c:1402 +msgid "If the -p option is supplied, or if no options are supplied, existing" +msgstr "If the -p option is supplied, or if no options are supplied, existing" + +#: builtins.c:1403 +msgid "completion specifications are printed in a way that allows them to be" +msgstr "completion specifications are printed in a way that allows them to be" + +#: builtins.c:1404 +msgid "reused as input. The -r option removes a completion specification for" +msgstr "reused as input. The -r option removes a completion specification for" + +#: builtins.c:1405 +msgid "each NAME, or, if no NAMEs are supplied, all completion specifications." +msgstr "" +"each NAME, or, if no NAMEs are supplied, all completion specifications." + +#: builtins.c:1413 +msgid "Display the possible completions depending on the options. Intended" +msgstr "Display the possible completions depending on the options. Intended" + +#: builtins.c:1414 +msgid "" +"to be used from within a shell function generating possible completions." +msgstr "" +"to be used from within a shell function generating possible completions." + +#: builtins.c:1415 +msgid "If the optional WORD argument is supplied, matches against WORD are" +msgstr "If the optional WORD argument is supplied, matches against WORD are" + +#: builtins.c:1416 +msgid "generated." +msgstr "generated." diff --git a/po/en@quot.gmo b/po/en@quot.gmo index 62cf0807cb661d4b41814bb5af653910ad3f2acf..b7587469c04023967b8f64e89fb154ad22d3d0ff 100644 GIT binary patch delta 20974 zc-m#01)NsZ_V=HC4kbN+0@7X54BaKEbc1wv5A_T~w*w5r5JL|sHNcQVx0DD7k^&M^ z3aCiqNiKEgV&W94tHz0ZD(iA=b5N3*9fYtk8?} zYn)tYaiP_PmJ&K#Xc3{C>EHMc&zpQM^V<$h8o^21UKc8pHqR_Hnb6`e*u09~H=g#BP)!RlgD<|&zI1G1RW7D#F&S02I3%=~(D$giWfA(f?5y|WQFY6mLMsUU z9onierfAhi=%+&ck$SOBsMxL5DHv*XRcKD3kA&9t`C40>77*G(XicGZf_g$v^S+H} z(U(_fM>N)Enm#{+%G-(``Em(uj49g&3C$<=Z@ZR;ZLRav@%h?i!j|p2<4o-qV5@fL z@sW0aLBGi$w5rfbdLN=RO6e)3&!Fv7F>(8nFxbAU(5zzr_G`4kNu^Jr9RidFDs72r zI*iu)?MkmIeGl!JO{j!o#~Ns=<4k>iN$DG*6@9)=R?r+`|4wb>qMFcP!mra2Y~Jau zP#LUq3OaNy%D|ob3oRsc7wtPg#B^P z(!OU2yS^_8$9}0{uwPAZpx+Qo&~F@Z-_M4vIBvg7n6lsRekSf;mI?d!0!aEVA%6Ss z)AxVE`G7nyFrY2rIAAW=Ki~lU2fW8;1{Os_0~=%OffEpH;64Ny_<{a|{H1v?sI$^Y zR5$1+pm%U0@L_NkrGZN8GV$OJgzw-;lGNabIN1=Z328H=6uvQJ9E=Y+&GVrS4Eu+E z1#k=v!IneUBk9nqFfuF!&xch)WyAUqR>O8EeUD0qS7*TC?U`WsT>1^a&3#aE+6T45 zse_hz_~G{j?LqRO4*<%D(l9V$q)-W!5nI6i5$Cb>i2G<}q`0G`n&m~ixUz5kbNH6}If#^hvz zF;y|qm==0J8A-=PqWUpg^!Y6q9`l-U{HZX3KZlKfQK`QI8t}K(q+mI-#laE=^zT-B zM%&$nG5_B%6r9wnj5=_0mtsf6l1UPJj9@Z5RIOYK%hFLF6}~E`SIG2v8X6y zI~<1mfUQHGG0`{|BpVk1E{tm`R1(a%nPC37AE^t*rzG6Q*9C&d&!PSJ3wZy8#DwjH zhP0pHpGjCvI0;fsOaj!ll|bp}RxsPBZ ztOyf@Rpxn^sxV9?o0k-Z=G6x==grdlqe2DN!xO?#cr*HkFHm|1lg-a-<6k(MKY)qm zYhf|}A815*Iz)_N!ib~TZb1SDUQi8*7EGf3f>UU0VNwuoVME$2?1{H8+=u`RAJJ}6 zUK{_?U{N1zw`dCkEqY4F#f6F2#e?)d1gBek3>!wq0~aEzlVl>>(JpcwNEi7G1|$E4 zE~!fYB@=MgC5P3gThPDQlz5Ye&pIT~1&m4TLZP`Z+S%O0S?^^9$|q9XXRVjMYPg$J?1$%t(IlaYAU zSs08;1q4SmCWk}~!Iz@u!&uZBvSrk7XwV<^p2A>t1qNC@7!9o639zibOZ=`W!2Ozb zB$qW&FtFxFOtzp*i@->8yrybQye(!=1UZ!B(z{WsaH zBq?;$CMMpT2n}q`jfyrmq~qpL2Ht#y`z;w6cuPl2vSk(Rw>&3Gwibrbt-TR!YcyGN z>l2ciz4iIU7SZW&hUomP(V}Zp-A4DLL-bs{JbI0`JA{p+?~t^%xj5Cftf+chc~-yM zH0^Gi0mIu?QigAP45Qm^O1B(tZ-h;^N8m);kF&VkkqDLUXi7Bfn2u(4>_YM#_h=uJ z2Z>_3qw<(wCX9(CdUnPGL3ajHvhC~#13QCk{EIDi?qZ;wZ=t)&D;cg3R8-7Y5D zU0Ltj;XAt*VuIc3YNx&HTRr>!MzFn*l2HkeK1$)HB7KCD-7(b zK|Q~3D(&~}#Wb-lKogsmBov#M31ds5>exz57~2h##4cmJ*p1*rtY23y`zvDm{R7C` z`@@Ob{d@58{im_zepUJYx3oJ@9!U?hhp_`o(a3=ZnCf5=aOGfYeCOaSaOL1eOyxiL z6x$yvKnZoIC7d79>h{nw20C;?=}T(F!jOXZ$7e0>2Xwl`@P`98BNz`a!@^==|;OVA)5cs9EH=fiP(5JTL+b&^)u1g zV@Q536^xy$f@aS3CBDyvv0HZT7!#fQo@8}CC1HBLE>3!WGG+Mr6PWV+O)J5ihlr3ab-IyyYeR!|5Ox?e;Po?pVratr>BJ3)k4&GSDTRMudaZhtH-eY z)r;I;%LMXW%a3NRl_$)vg`ffdwdFY3wFf--xiAy`JeVDdpSOcxKi?tGU(Y~%UvEx0 zT_27&UtdfTy1s{Tu3ur?8yQ(w+~};dKY(^)lm~o%-;FSAe&YmAc;g}y-24=8y;%~K z-fW0XZ+62ZH;1G0n+Ngoo9B`E=2Ob@oByDhTUy%PDnkETLkQPfwwlf$_P@0T)!aJ5 z0Jjsv$nCU9e7hy@Z-)^Lw|^!I?&Kj_?lj^3ohjJ#&N(FiMK_~wW_d5bW_h-S_eXR|D zO@rjWHYG{@I?TqueWCgK*Mo5WAR*59;A2Vld z{rI9jzmJ5!<%O}|dcg2+gYl8ycF^y)qnO}{i>aT~@sli`G$(AHOhMu&7qRWrbZF*j zeI|N3hxbn}15D2{@cvl~7Cs z>Wfi?+soY)8ZR%A4PQRt{#6>n>{S6w@~Rfu@6`}+;MH9EzuJWfUj2xquWsSoud~DG z>t1N=^*Zm~?|c1%j(;lf{8~>W5^1ZBzO;^zZTr^mj1h z{T++1{QWQEya`~OH+FqcOYHw<2^_z92*+<;!s$OHiGqKIFwj4nQSm>&W16=`dH%Ku z{oaPr@9j^NZtv0}`MW$y`y=_gT`>60GUOLd-dBLL_fvTB{xsq9;S;>~Lq?$WLjffG z@Ff#}n1&5Md{0jJ@DjlJH$5fYzqQD!{|==>`gbGI_3wSp>5at@ztnWbqLbLv_=YH5 z?m3U~o%0F{W0H7rZ%kp2QDbU&j2bh^(}XccJ(U{s&|}azCA@mTIKyf0jPU@=I0y9o zRZkPf&1B=>UUc$QXWX@3k!jqA3>+`Dm#s{^lAc5+UNfcRks#hyFHB9md!A`b{PbQJ zoA@m~-!bu5c&0G%W4!P)@sDdeOlT4mr7$oFnlN#K8J;aof}Kd7;4PX+n8gDQld!cH z*Cyd|G>}ld+kE3Qi89gulhIzZm`~Ptb%Ob1zZY)ilPmQ5qKTxP zJZCmZhcRB#tsWE`f6^zYBw1FkmNUuPd(LH&g)(5WADAe4au`fr9Y&IO_tL3JJ{*aY zPl4g&OFbYn$zBD04hCPf3!$^9lpAMe7X2*ycL%wggb8$9neDIW4X zWeO%vnb#{gOv=(YSITBe=X=$$NqNmHw@u3DFqrZ^_W{Z27m!i!?Y^SaeKchm#PRpk*Ye*oGQc%H|C!XJUz2(tG>wZX($psG(u`30t%nCDO%x2J+3rEFNplphPxII-+03UUaMn-T zd&Q>tbT#ikedQIa=Cg`u?6Yn*{^iAIYf<@UFFhbJX$xb^v`q<{v}~7|w41z2#-x3N zEz?!UH_{EoROwhrnRFMG{zWvU&%k~9c1lB(M%nnc7pL^WGba8#6&!wE)vE=~=i_<* z`6{I+mGZ6FWC&0ih-x#m)ca7S+m&8b`rd3P%zc3<$deFG^OV;6p-h-(H3Q{&2%~v3(k^cY zG?{k^(UJEuVVCzU;g~N24Ceca{Xdg$G`7n(jkwQu3P{d(16$^M!^HWkGGYEf07?GU zKyCh``u+oq7bpw^1-cN91r~w*1y0cai}?7=7vA|FQPCHz@!BtDAlVm3!RUes7@%Nf zz3;75b3?(~KyRUx;6tH2N-HRB%*2Iy;4_7yNK%Df;A4d|*!Y*cUAPj?QFt1h7rsb7 zFOnFJi!{RricH0pML3{jirnFS(X>1-S{J}68bnkTJq9h742>3RLi=L<8Nb*{8~>t# zVlQ}5JUbnV_rb|;9i{2fOvxe?6eU~2NXb!T zxsstoNy&{$FJYRJ@1Ui;Z?WQyrSc+4spbq^YA9K+)C^QtDhkF*9fF}!x0$fiEAC6D zC0Ug&K)cfAnV@tle5G`My)4)*Kyg+%`ns|TNZkqqgPSF>Oki6_ZBrf|S6PJC#z~xe6 zl5#opzBuj6)nvkQZDF_^AFoZhS>*Y0>tLW9ADvCP%b22^-D$}r@n1d@8Yo{*X+yBO zd^Z}FA4+(ZUyO#zUxLB%e_-nh$(g7^4uGrzTQ{b{5Yl;tjX-&YSCn8Cix6!UEi(EA zu_{K>q2lj&f2I7yZKVNpsI(Cvs`Ln;s$2}jtIXbzsk}q)-$1KWWSlDFV5rI|CajvA zajG^WnyN0b@h?D7^(v~Y`W^tPmWB@1*ibap7K3orZd2P;4}g*CeA6-2+mI8gFM)yT zw}9FjIf3LF&6&7H7(i6xCYq_~egBh=HT%+`CLah*%{yq|%d8CiWm_itaxw3}yv=>B zEKFFdBNEqIP1dW$cRy3R2&Svec>z;6Erc z(yt;}KzwxrXZ-3hl71ZkBVV^*qOZH_bJgJ2uVJu32^eZH1jK9*L;D6#z5PSuZ&)0T z8ip`H!((vPNGq8}95^(MmeH}%Lk4VINNIoCH{QyGjo)LsCKVaC$w&lhvY+-%9W>Uo zx(9H6)0Ay9({wrB-t<=_XqJtJ&D!IP%~oN%W=|QYc|Q6z??t#a-=z1kI9&?|6Sk;K z{I>`u$Fzu~T??zploJ0f3&CN_N=o_2Y+7nr-O7cLR`r$6CXKebLPgZtAv#*Kfni#= zXPnl{lyZp8w8?`8+w|sn8>=zDsIJXxCTv@ohHb|HFl`T$6WZQ_k+vU5pY3X)fp(+N zRJ&LPZucGyep8M1-;7au0*SpNn8INDWeDnvMks-;RUyK8kvv<1-lOlo8W)>WT?EEk}S(&ush)@^w~7?A!we zI&ZzAIgN96dBpp!MY!*(1xVKeWYKO?Lz-^#Usg2KeKPI4 zd*A;>^*xf}#Xai4agQ)K>~Ra==$Xy?Mr?W(Ms+4A)4-&h&1o-*MM}{uLBbF8%5FC?-ZQ&vuU!O&v+*! zrC{jK=XlfKGTy*v2Bbu#13C}|0~Vo~0erGC1KuI&z)CPWFc^&woX_`vGw?DU2W138 z2i2!$8#D<9263Lp47$WXgEJ^?qjWJ04Zev6hvYyLLv$l!$QW!rWIv`Inuu|S+P&mT z68}TzdE4P;=w-Zq=q+qN^mis6Rvh0L7Nqw_pu-chz!=^D28Jud4&RMQhrhs-L8VZ2 z5C@e^P#fk8vTIJis5)p6k_RmT>w`G!WrBWX;t?8NBZgx85o@X6M_eRqNBo7Ck4#7! zADI=&N0y@9$l*BY$VD(V@;YVus2sZgH>y8ra@0ZqXVgW2Wz-+oYIITJd2~OVX!K&1 zYNPj<$kN5yvD|S_($TbW}PWXB@Lb>2;ja?`ZvRPa=A>DJt|&BL4mSB*XaG;WYk7 zgkNw9R3BUvZw}^!lL?MQbHVqqxp#h0?!EJZ0$^izVuG>HnQ!cSKeh}hj6@;qW}A@3 zNFH*C_qLLBbL6qvH?2_;_88PcUeBg1-{Z zHen2$O*nwU-VonpBFSbW$xCnA8?0oTNT8X&+%Z z=?((;C+9@PllwBz5NZ7z!_QT zKchB`&X`Di&p3%jW+vnL%*;wVVA7c@HUH0i%!D)Fl3Zp5FyX8^IM1xfbo34sic@`? z5=OsmsWd{LUqvIK*)dgU55hTgER2TE#HmALm@m{;T7DTg^g0vH&cZ~q+amewrARXS zDLyf$C{R0RAQO8B3q|rdPw6*Ty?t&UqGj$@YP`8WkrTr5z)+Ybxv=Io{_TThAYa%< zR1jQjGvbqo6Q@Br1SQ}PV!Z#7$;m?Vt`6+Sc`GFKR^BcqH z{C+n6Wnk~%p&;4(chCq95SoaLAYVivHjn6z6GjYTf{5*eSHxx3ei58-HVaaat`}rQ zOx+3Y4 zP5S&Knpqkj)h|`&T-pE)F4b+krEB&1GZTEp40C^%jA1m{^^kSw)aZMD1& z?UpZt^W_h4#ubHmzoI7$uh@ilulOCtRwiW4xH1(^xH2Mz7d;^Q*Hc<6K$N$1RKwyx=pE&d{YBdzo{()ZyHZ- z*mO+k9pZn}JMK5@9?#}#m}GNj!qYoBDLAlsv$ng02{ym5@h@Ju`7PePr6!zi;pBqZ za+dq8Y3R6BopEblRIW!V&DQs{kLKI1iEd82=oJVStyS-~FSy?}7(ut~r=!EkU^5y@A%A&7z#Lvp*dD%1+#ku0U`Om)Q0hH*ukSzpxS#oajz6E?NkT9Z z*N&i>kp+iiL!}D`5ZrolFCl0I`P>Ga@37|p&1UT@KH~P0zq`0K;)JG!UfYeVYg{{G zVpsBkBPKD=dFFS1(S}j~$(lTZM(Z2DHjvnLL<2_5;7Bp*h;+v8WCZDZ2~8uu zV?=sK>Ibt%{=SiM5_2HU*CGyQ>?1Hw{y0pO(8;9A@j1ET*v7`S&0vG|!Fd^6Y63@U zKu1E!%^7EK>E}o;FstOLsq^)J zs@2y_nQEo?8}82f9&BBS8(4Ib-FV+VCF>X;Hn8DCNY8=j)bynq1S#p z7@}=b|JQgD_eK_^Zu^hUCMA?Bon3)cQ(ZcUnvLChd#XK7%R6hwV0k`F2mMT`t$HjZ zA5#GY&W)s1r=;H7!Zx1V3wk=%FQm3`d+WQBADz8|4%U$qPe#`Bj#bfW&hxnal#%sH zWkqCUA}3`WsnW-}wzwgoYQ$NM#JbZy&bu(Vm&K}MtE46WFW5L3TUCl$jTDBi z*v|>$bfOW@b;Zs`aNQNJHg*e67N3qdpi%WY=l=_|Y&Kn?*A_WDaER3iewb)&REMK@ z-k+akepgCwSJdZzBb^-O()xiol0CU(>>9v^sND3N`r*Bee<>iGb#aidTO4P(r&MCt5wCRwP#ggx z*QVOm`pz;Yk~pFPr#1)EOn+tQf?Uh^u2et9`iW@Jyp;Rl+Bct#f5B>Fm&BcP)&p@E z_(2D{$uVnV%^+(%SD@58Y-Sl2M!bV)AALZO&K1OSM9ofiPCFZ6${EJ#Id?9{@r^Ch zgGK*lI7cGA!J6yD0wC^ueI_8|?AB{3P@Ok=JwV!tvl+3sE6(Of!f_z8fmf-s$f@ya(TDLotK-2uTv- z#wH@khDN~2wdwUIp|-PSSc(ki2nUvpET!C0as1}1_OWdx9nNa@Uo6Sop(#$thWHoF*+O2^oPYU0_BBrxZ9PRp9yaxDnzh$+o!?Q8EP zoQ*_~J4>HgElFs*ewz@)af}p=j+RHRT_Q_{a>PqrQJW))$jBPbR8uWU+&gxgO*CP| zVI5mLRMde}a+uY%^zooSb5RM^x%2 zkE3e4gK6>FrrVzSOd!{>S<&TOxErGb+4Z26&LW>=Nmp>dv8&xj@=W>|`^8Mp{hICC z$A+`?b1X8(v-oeT(+8Yt_Nj;ZWDuvcURwmSgNgHbCs)Or-L|SVTV%Y5<6u(2IO035 zgrbp5XEe1Nn{>kUS_)a$f{#5p;g|B;t*pHpdta%1j>NcQQ>Rs*b+iQXSL|pk$AaNT z;@A~wT)T$b9%phpsjL-@MLaLgquAn@7mhXt|iClGi$CKoDFxh6!X~y%SWiTi71t|zpd5n z#)3ou`|L891t390cTJo)mIPw#*X&(!Br2;^l8+ImGr#KnC1qT&!L{HeHKb!B&E^7e zQr8x$76mVh{T(~-cz)O8vq&bjoGU5T*c2+c-La~)sn?cG;;8N(Wk?~^*D+4=v8!QQ z0ZVuqY3JAvkAe;M7W+j%YKYU3Pz5=k zv3W&bSh&sVeeLwQ62r#&fOxJ^aB^f>?TCbqt%wE39np{xJTUfS(-~#(qq*+#zufVj z+1kQ7wycVbb-=}O81)NYI~C)osg8ECyPjINyORBks?xQKNgIMvN;y)bx*yjB0^dfM zcWsULF^cT6?g_t^aJ9s9Y(D8L&+TUAG+X~|iDUn&%9V2Nvud)XmyPTD{7l1pzfdQz z$;ASW-F}lnUCD?>QPUMCbMk0=TY}rgXq+{pYZF-WIO`8%2e4Jo41T3#;w(HIyS%dN zg0p%rq3S3zjt#S);tX7rpV;|k^6LnnNbZQ*o%`Be&FxyKul;ee!8UB7*LKNeaY3BW zk($75stoGJf!mXxWBBX=RozChKix4lbK2FDbu^odhViRN*Z$3@eXD4Diw|~jy9KOBM9h-ea!=XFDca-$8SPBM(y6d{r+cDuT8r){&i*Jh;&9w=Ss!w zN)B-a;Edh6v1{!gp_Z+}MyGojwzgU^ww#{S5}QFR%+0v4b$>a4Dfnzi~) z;Mo<;7+rE1$)2v=bP&zCmSKyC)-lCgt`sh2xlSkxS@T%uHob)vt291=fz=8M7c zqig)x@{{nW113%M>wi-viOG`0ZIT$Bj!k=z`LX_Ugmn$;qoYb85h>Z2Hylf;M!VaYxAV}$)vN#?lQ zLSrHZnG#Nn@IO1X@IEoT=2TNNMg)j*=M+3wDW=9OvnqLvFup(GoWNgG#!QVel|9a* i63&_VVs^}oE#^bKn6o=f*e5Zlf->Jaun73B2g5YhzDk_+}WtA0d?#}!$ckOprR-8Kof4DQTXnQ2?)*gXI z3T76Z-X04qZI1>!1=9&WY>xo11WO5~?O<8u1gmtwqP~Jz1;-kkBbZBYonUq0Zyk}F zB7(M#3>51KV>iKkf~^JJ1Op6i7R)aALNJ41nobD#WhdH2J29`4X}9f!t2_iNsw+An zaEzcsC5kf(oa_YSYk~y?A9cbq={j4MgoIVEGZPzk#%0|)WAbRh@`C3&WAc<;m|v|6 z?M_`V`D8&2tD^=}bQSxnPwI9R{|E*d950wra8XwT+8|g+aIauv!8?K_1WR?ZtnZb9 zU^BtR-57r?SWI2e9gFqsPXE&G#L(}8h1JqM9Qd+D56k*igQ5q7s|1?}KJS4qYxX2I z0(#=AZEBLkG zuU^on>chef1WOA}=>vUyA6)mc52kkY#@DsInK!~4x;@@beh%w}H=5-1p^&un!6K6k zp79}SGy7UrZe{3;t9tmtc)TxkJA7gEPOzb1)xN|`cwhRL_azwb2sT%K{iN1t{(H$y zed$=yj|q*GKCRkMPt{(zq=ueE)=uiIp_a|27_lM!R{`fkT zKbEcR&-_rqN}B&m{i#fs{gE_n0PThWFdP!VLOTNx^l<>`SAGDd^c#TSF#|}u;{!;? z2Lli=??CE6lYzLP<3I{gw4fue2E#ynd2}F*GX=u1P9TLOIFS5}3}pONAR2xMM1b-^ zq@!;TE}R);G!G(XQUzn7V!^n&b1;fU28;bwlk>qWkRb%ksu>Il!F20GD81K1s1Gj< zelZBN4}x*!L8NccAU3V|K?L;!!KQ-g2NN3|2P636!43v44MyUELns^_hTzNaA!xc` z2!i}-`m+zkVs(d-Ruc`L6I6@l4rRScp{(y4%Dio+eJ2$9GLB(H^`K!CkZHrv{Jd#r z7>)p~1oP`AGMw7Kd^o<|H5|)a6-+DmY&g5(d()p`1X##m^%3~K%?MoU@ESph9W{bH zj~c;tyV6Y9XYl6{Smv?dH@ew`AxO0_cDWW|WJy1Rkzu%Ir@!ZB&qkyxPoND568!91D;BUx~&!KH?7+eidU7>Pi)M^ef^k0ko-5zyC- zpx-?Liw+XZtNA}U0>-Ni;fV-b@{4KzZYF$=fZ>;;5V-Ux1Zy;k{PrA$00T#{-qcaJ zVx#H*d6dZ>gI|mmD{HN`kA|?!Xri|LXiPL=G%i^=8ebn84WrAWsbu#?Qx}Slk+Q4; zjG^YQ9>cld?ikX|K9<7fGZy+4V~PHoW5xcOw?)P=!E+pGwQwAj>i#$?UXdTjhJHWL z-eB;>4=hx5JOVk!!|>2})=4*kY-%@wIxuAdmfSLd0(4@6gNa{Egh7jmRJiFAIolna zh#+SSW|+jD&}o|NP zG0}!d7(a+4IEqCvp;i>ZI68`nGoqMyF^YM4W*|Vj8PLy~LD2p(1Izwlu)<7ERD)+C z=t0n7rJO}aqgiM=aTcf5ld}lQOS91Q(<}sO5Dg>uX!_?xGcPe30l%J&K)q&DIhUFC z)!EGZYL2*B$LFYE;{VNaSm>3(8gudCsJRGsdM*<)&0`^VgVFP#zcLTT_W8KbV?G)$ zoX`Bk`Op_$faSawnDf72J?Hs<0nwj!A)3@*2;r!OEOdM!K1{!eg&HlQf5IY;T4zlA z`XYkx>&3XT$71TlqQz`FI~PNjatRf*v7kdG?7Rd?7c60cTT6)A{7VtU$Kd*j}!)>!H8Bo|>L#gQU+T9dvHPg9xUq;kIQPu)9w~eEX@^kI3K6u zu|TQ4Fc>J9M$=?3Cf~IeK~C>Qz*PINK(l?cqYPfzhbs!~M}YeKIrop>Z(?CTE^;|w zURWFu`#axQ9Dre^1DLwj0T}ivxA zuDo;5Sjx~-4pVSCA0~LF9H!u`Ka8t>KaB5-AK|Fg@d$zs zIl`v3_z3G9Gx+=nXUTj=!G=c>e4xYJL?7jF7=IL#-7uK>7`s^AW7LBo$B5o>$B5=- z29F-Y^bd~V$_&R%kRHc!vyY?T_2VY^P7tIH?-S(r!V{Qe-3b`~egdE7KZ(hDpM=2= zCt|G+6MlKM3CrBCx5;CI?t2_4qF)0p`FY4fm{0AaBN zOx`DfXkVUyp!XBd;8g-qUHJ?px7`^8n}3E9d+Q8!qvVgIVSR%Ge}sPFj~ZLz|9d~0 z*J(d8G0j<`wB1=W@;OW1PC85F`td9-$o-Rfp8ttsc<4{i%`|xVCj`%Xju#l+&f${C zbMUz$SX%SH@OdO_cOFxXJWu|wI?rpjE9YT!^E|s;!3*SZ_Y1ge-UW_q*Dm1eXBV(w z<%^sJgD>(*cHKoD;o>eb|JFsb|L6M|20ec!FPHs{2HOn2`59kUzr^^+OE8SQM5$hN z35K^XAwYr4%=6dbUZH=$6|ujXWakxpWnCrTb6rK!!dHp<7FW$P-BlJ2 zx(dVXrv36NrMJp86d8Su7&(5;oUDF>@!bi2;s(EB>)g6-E4 z=*o41@!oYbEPR7l=zD|ltv9HY2X0`g^Eapqxo<*W?IuANX4*$@!Z)4c7H>Y9-J;?R zxy3Don)8$v@FZtCeh{M|OD;hsF1SRj19)WksioJJP_|aX`sO&xHyzb%awfC^VANMFM zRqnG#^tn&EZN87jZ|=kAy9e|SdY}r5|KlHUP)PL<0{cTu)%77k<85%|Lri-AAp%*y z(cj=V1Re7mF|y@11bp@zKCbczOAL9$CO7vH{V{?KH2;5nga*ZbCt3r4H@n^MNdEkH zTvPEef;D-JkKG?*dXL8@svqN$_{Y2nIs2H+#(KhLR{RNyc7H;h86xOV4Hi8iNNzr1 zv&s4g8a4XEoC*IR-FEyzl)pCpX`W(%rccpm;!^}X{S?73JtcN>KQkr$8K&>^j2Kw| zOzf|l&8}yp)9=sFyz+B=J?uHA-1HoVub-QAdO-yXd%^hb7YJZ`i9mHYQ{ol<{;wQN*z^jMJ~ad%Ug68yuQ74hYl3abYbM@(4a1`U0)74k{px?2r)a^{ zs_`3Qs_Yx)`@O*uo8Dl7CyqDx;=LL8<}K;i^DQTrVQ<+^BTakPThj2Sx47uZTXxU9 z@2C^sy<>ilceo<-9SV(kM>-#WhoD*BV>w5w_jJs9&%}%G(dg-WG%fdm-7x3_?QtJS z&l4YTMUIbX*4f}fgNYwesK_VQ>-~w?S^kN2;y#)E|LrI94+)=3s0+>!tnJ(~Y)%*DvC&^sQ0IjS>bwJjdM317Y)(Fz4R#W2p!vU4ZdB3-f~r{& zSDRD9Kv(*=3Tj$C7u0A@nZo9*XxRl-)3PaG94x4=+$N}d$uELhkX%yQoM**yg1Q~| z5Y(erv|xG7|1)x8e2&!+p8=NSpL9|0q4_}&GIP>zjA$*<=M&;AnoE6PIJpxQg zk56}|#{wVHV-b4>o3o&F71Vr>$$%wp3HFeu-TWDuAC}4H%%0Vm5NyAorr+gE4kq4} z4&8pg$!w$cXU50gnPE68Gd^1>sHOErW){epg?V|ippknP=)44-{|1x=hUc;%@NZdA ztVmXyGaGt1vSN~fS&8m3Sy^zupw{enS+Pv%Y&Pea&_5f&wkR75-ZJ=Ab{KZdj=)p0 zBhVH>-Hs1t#{%cGqrh*1TJRisav(sF9Qg9P9Qe{lPz%l697KPd!IL=%p6fYa{5l6w zU;az_JADb`KtVmQM0`omEjE}asHg2hIc<8JcUaYOB4I;1td2RE*vGU-=fu>JISH;s zIT83mP6T>j=D*Jgw_DS{J3&Teqv*P zeq8lBKQWT8faJg4xD_D1yb3U|%HU~(PYq_bgH`P??rKNCNrHNqJY&ZHFqrLYu!_Mh z1|45x*_f{-|Fz?q8Tf3l;5T5yZ>ZJ%z9G-In*R3&3lyYK)hkFlq97G-MM2W=w}SZm z>q0i?5v)=n=sOf*-C2bk)aaXqn2@nBzH3kzQ@1OOhSLgTp>u_y%TWY|&5A%bpa^NX zt_Uu8Y_LjEf_9{!9=)~~#Z_mE!uOq{C=9+WMpX6_)U)8~V#L5R)1T*Cg0rKb{_FLm zZ((>PF2q0d*s<~&byFM$A#u_XwSZ6(P6`y~jL93^4c zv?RWEl*F_fOR~U=lF;QXMHaL!g`g3py}uL;pOs>r@}&{9Pig4ZmUddwVLdEOdf3a5 zb`8pqj$UPuaCRB$z_Bv;?qV78K6_b8bkVZ-vR+vjPbv$;__EZIXJsk5naVNVs2qY1 zEvEuV{%tHrKHe)wo@Xu30xioEG^5I6q2=X?+DqlpEK>zab*l=@pJ3YC4L+@a<%(CN z^meXDeHdtPoTBFcf{HMXtw_*3t;nwRT_u9ds}lS9_)5ga#YzNWzRL8stBk;lD-#13 zD&xwJmC>|B6~;ZP&_A;Z_2!VEL(?jARnn_NRZP0DDid~9g~5}mSm3*AwEe0S>GYR6+u0uW~xr@FI^p1*Q+l1ucq;o4t>KJTAgiibahNN%iwxJ zJ)9n{j_+?)$G6X`Q(`mMAkXbJ*lsJ#&~PV1+u+ zIlixhWZml^QD7Zv`LsGj|7J7cyy?GJ2hCHvp>cjU7=PymU1v93(%-a4xIsV74TdY- z5O|-PQ!s~h#f|)a>4pFPv+0;Nzk6}i6Hqrz+N8gsw+J>A)WKkY?1u??12T!_F|!d2DkQN;=g)f!Wy3R zM|fhoBc3qK+#9+Uy(u_Rz1br+_C}C1z1dB3d0~NOURY|1p!5A-f)^&t)`tl#`k?7- z)BeS@i+CewUvEnDT5mR&1aE@tskbRKKJ23Pe6Xau59fuMKCE-vhs`XrujIe_sJ1Wp zJkA%N?egWI;L;ZX%J#*Fp?z`1_P%K1(vON*zaR5P^h1Cn{V2_8{IFb3KZ3HGAM`8y zaP3V$8}I)=8iM-$iQ35qFZ3ta^7`8>QO>I9kEP}ZKz}I!7uW~jlI{Z#c=Z4Td@;b( zk%2bnKVH`xh~?%F!~%N(zLfe5fa&^+@6p;>dm*1DSoVamiHTv8+$ zdhcMeXhSf&>Z4$Gz0biErko+TtW*fwb1O%PIhlk&7!$(owL1h8T{aV5hw#jodl1`j z?Lq94JqKa>@Ihq7@j>kOR|cWb%RwAY>kdX>f5Glr$_I0MMkIBqBczZq(>AQVfr2xZ=kP)h8PP>yz=LlGeDF!S_0%(;%kisHt) zU@*sU1ZqDVQ_dT1EHRw%*TeCBl@a(ld;|-h9Dyq{hS{92*;|B>1s%eO1>Z0juMHzs zo`sqBe|iSgfd~f=BF7yF@Yq2KE+39>eZukS#&Ar1D4gKB5Dvq{a7_Iu9L;l%WG`qv zlJ&ZegmKJBvh9iBx0?T7N3g#)jUbN$B8YlN1pEE$2sGbl=$=NPY4%YF)@~H%`FW$L za1TbYi)I^5A!<6>Y{R2*)#}maQBTmJL6l<*&vcc>uxoW2!$PACZX83jUNx9vEWudX zV7svdW$0M*9?)RISS-k4qnoN3n7fSijQ*=)xvoiGvf2@2!cL_WOzWu4WQwhRjQ#svUp31z(Qwh>)(@?1SG_$EqL!qtHaKWc( zW}Up#DHxv9F?rZ@Q^Thtd74PxU^Izj+z|<*qmfu5YZTk5TNIY^k3!IyQM`6L8U>@% zQPh>}Gf3-}Gi-eSGie5;@$?L$IB^ChEHjfR?mv@Pvdd>uDL2hzfh#i+^vhXTuG1_m zvS1ed8w@_1g^MdjGaecZzlqW2{J$g`hF7Bru3WR3*lo5shR-&~W`p0(q2G577TGcf zSG}D>zGs<>p!w$#^$q93u>D-t^_vU7joQ}ye>@k>%g#fS5%UO=1M@JM%X}EuoR8)s z=9|;C zh&`d!B78V?k=b?^A)tLR+2XO7iZ^*Nf*xB;JxINTv@5oRXm7rR6H>n=2r_PoEN*3WJ2Dq~DXJJXB_g!N)~o*zc>x;DYHfME&9z zED|4MUS`KQh}!EhNR(n33p8FvK6hS*C5A7g;SZecXT(QUCht*iL#u^lLUqioR?iwV$x`u^QuSLQ(Yms>NT7v7!T6Ve5Ygr)8 zIAZ)_ypzTRa1$z_vyGTNl`CI5D8 zLen>!kg(cjB(J|2fySEloXt$UwwW0CW(%85nJuJ~#}?9f?G`HL8`EDZ7C{EbVwqjB zr19ribN;Wf6#*i)qS2wP5V&qL&uZJSM8q}(SZDfQY$J#&ZO5cTx5H?R!QDOWz23QlpgOPvMjv-zO1GU@z_AloOxnr9u{+sI zUKz~1i~3Mv7wrzaNZY_&xF~9u3-` z)8YGAXzxA*`(i%=x80BFyYHtIFWHZPPxq4@We%7}xC2;vt>XYbdUOCr84t2R+k;G; zb&!g9@gR)u8Z3Rtycalxpz((g==~uCYd_&VK5EaH9=3(h-I4`y zOrW6kO+bK{1Oz&hz>zG=87x`pjCubz@C^CB;|v_edRp+Y zT*KvZmr0ui+X{LJt`}@=1Zb_l9Zx3A0E3&g3d)*qWGvc@UzPTvzj!*V8qyf3D`8-r(SNQHVG7H=-RAtN&yvKl5@g&}`oD8! zo@|CzAGzYy|J!6RQm&umx}a|-)Q2v7fY?tkO0G$AjW7bq1FyBw2ryInn#%nP!B&E$ zY&Bz5knwD;$uw1euhxpC$1GW7stkI$@WqS%jdbC|M9CWKYZv|M z#j<+I{VOe6LVL$0>ZcZ8I)2eDUb>e{S9{G`Bi{g5J}ZURjjzcEM8kWu4z(8JDo7^FIQjb>u!{8D!5Ef z^V0XDzF5^vm-|LSUq{Bi5sa5>vY~$>_Zj7KG3(zK{N3h!#bu?C`>L+`YhL||*ARRw z1Bc|khYU2(A3W&4XUY90xhiOaB(p*>>B}uwW$BAc@~9abrI{{cLu71?mK!|-=^@rqwRCf9oxr~Xod%)%aKkq|Yf+z*$lxS6b# z*H`XS3hhh5=~_PY!CM!VzCg90S!ciWrIf3qv}>FBKT3O|S^u)>o1y&2nZ|NG$H@IP znKVlu@#TJ@S+JYj=QH=^Ws#U<+Lkx{&osfzT8m^nlUx@~yRP6$X^%~2m8a5|$07e2 zqngMflg)r`A^C*(qggn!+^078PxTd|o^zxxjSIi-h|rI1k_nW`&@N4~s$hD#5{)ng z1@B9{qs(!H>qIkoeKKDM3PB-PJ|~x>jEZWZCAn6+> zw1Wj#+4w**g<&#U`cG@7Xc3YthqM<7R?@03r%0=Xno+kB!P!PSedIf8?thp5TV}Dt z(zi?BRp>*v%$cCuhrUK~;j`1Ely*mLY|QOeLCMLG+p}FscGxT&33hbU`u@p zcj0T^q`ze@e8JsSAEfnYs7D4huUw&K@zF_vCVldBVC|LmLAjr&XJNqrxzfvZPj_>< zzLzUV{r{_BGRu{ZDg9jeZq@m(0T!Q_>)$agAX=Vn`XQwG;8M33>7T9tXkzHP*!UuN zdol&;YRPu7oUf06mHYWxx^<(LrwA)Z4>+o^jn7E;8S}hLwtyb_Lrnh|8$YfnsP)_Q zoz=}z=j+a_8<(+0tYC5D#umvotnJcYNZMbh|C0jpqdw|M;};uW^nTXI2e}__#yiVc z9=TpfpRZhH4U_X`;d0X6AmbxU+xad``rfPXf(aI%Di@ObvW96-4VGw&4_uvpX3-mh zA+CH9oLBBk$o&+3#FWJk7}DW#UqSkR(`+$JFA4^0UDs2d?(!teSY^yj z=_2JOI9X0sk^5mna76I4Mz~y?q+MTdlpYWWp%9Z!TkFpRTW4cKTHYrpefi>{beTfQVo&?Vn!RkQB3;# z)|DU3IFH~mHdhOdjbDWH5e7fY!N~3O7OS$k9gU2$q%axy+=%0Q?>U>#x zLLZb26L)>;lKb&`#MYfmQ&8@M48v3Uyle4Of~-k>#+(hccqyY~g1y!UEPck+N^5v5 zk-j3fq|I8tO|tlf%@84&p&A&%cCLTd@`;R%k-m1xv=5c`G((rm2(r(NH59s&(zime zm%dgK+$L8<^7H>2b6+kQvq}2H37P1p4{`%_ZlD<((+QkHC7~)QHe?|9mY0uUDTkikRNoG7!YlAG9 zU9Nn|gsYNtWY_X*7@pOXH2t>?U83s0Mi%Lk%*3O$s3e*8A3^p^+FoWsPr+QtEOty5 zKWXTH)`}0|mA8{92;NXxL6a&)DA2IuNQ#7egR zy8I*6?4~{6U=zXT`i@IqBFI%x76|*toN3a(jenEHUDEzm-6?cm+xTA}E70e9E|AOLj7>Fo!G&J} zTF##vnfU9gd8@Bb^p%Oe&Csn;E;qx#ZZLycq^Yz&S^QY)ffg9E-~>JI>3aZmiJ8+# z-{_h9LqfY!`AK`CTs2&IKW4R(n=*#zvYLk9(^`$CZ@fN28?C>T_FiewxF$2+QB|v{`O!WFS|#ecSwIP|6qG?fW4<@@1l0! zAiIA+u)R+}h<|UpFGQXpfq`EBv8~#9SIJqwm0P<;_CNpJ?4ALB0si)=!i!~(iCmj2 z_RPc@>D)Z*Z5uai;nu82+g1(g>6#5XHg0DxR`y%g3+Uh9LzZ`I(@@8}hIn~~1bg+i z%Q{{|e1&;nKytJp6n;f}HbWSH@<@R#k`^_es*JXQ=^2 z|6&sy=rQ0g**t=R0z7>^RAc27weINIO8z1JdwB&0$r>#Jf@Ok_N3h+)9whpD_}M)@ z{6#c-knz)>nnxdqux*JgaQwZC!^6|(ZzlH$^s@K%4I1F*G1Mu(Nai2#r?-Qg<3S+< z2Kf1^-2?5ueJn3s!*E0#nb+W-3#-3GXs^J(#1j)_^3qtTK}TtyTCurK?ak=02MzG@ z^zGy8=@INJzIB?_!``z2E9jK94+LCU>9vTpmw9Zg_{l*O& zw`=>S1I0+r>3@3ZZ}hgI(d}p2?!<1px-3;~r$dC$+jo$ce@Q$tAkbHBp{)IUgM#e= zef~=)#kRfO#HF6czuBj!bD>gxMUxiu_;abhtRtFgj0zv$z}Pu=B2(A!N^+!cpjh8m zqE09WdH98R1^q3IR5bq(iSeM|K#e{1QFOYMwpp?9j}lYVC>Hc>a_9VQsz)zpym;tj z%qOZKlhggNv!C`%TT{b`Y5$h8^&8Z6Z&>o*lGLM5usGjqkXPW)=+fJ5d1BMQ%bG6B zH~oBtQ7NNyp+eup-hC1Mw3Y4q|GZ$u zNx_<%@&8(}io4UpcJlvDwTfHQ&vra{xr*!IZ(E+N#^0hvOk8S!n)tt0v!XwYv|ae0 z6|FcaTH9Rze=Ar~xlXyoZ5wM_{$EusF;Ee;&;Rqvl~N}Rjg!iCD0RI*-SR)LTyfbJ z*xI`^{P)r&Yn$Tb)a$=pzB0SSg)FhnP5B=cu{bGWGgAIX1uSm%I@|pJu!6-&1q)7> VBQbpbKk8Rv_=3232W%N#{}=wUoRt6o diff --git a/po/en@quot.po b/po/en@quot.po index a560bf6ca..2a644cbe1 100644 --- a/po/en@quot.po +++ b/po/en@quot.po @@ -37,23 +37,23 @@ #: builtins.c:722 builtins.c:745 builtins.c:835 builtins.c:919 builtins.c:921 #: builtins.c:943 builtins.c:946 builtins.c:948 builtins.c:950 builtins.c:952 #: builtins.c:954 builtins.c:957 builtins.c:966 builtins.c:968 builtins.c:973 -#: builtins.c:976 builtins.c:1019 builtins.c:1024 builtins.c:1028 -#: builtins.c:1032 builtins.c:1034 builtins.c:1047 builtins.c:1062 -#: builtins.c:1226 builtins.c:1231 builtins.c:1305 builtins.c:1309 -#: builtins.c:1313 builtins.c:1316 builtins.c:1319 builtins.c:1331 -#: builtins.c:1335 builtins.c:1339 builtins.c:1342 builtins.c:1354 -#: builtins.c:1362 builtins.c:1365 +#: builtins.c:976 builtins.c:1020 builtins.c:1025 builtins.c:1029 +#: builtins.c:1033 builtins.c:1035 builtins.c:1048 builtins.c:1063 +#: builtins.c:1226 builtins.c:1231 builtins.c:1304 builtins.c:1308 +#: builtins.c:1312 builtins.c:1315 builtins.c:1318 builtins.c:1330 +#: builtins.c:1334 builtins.c:1338 builtins.c:1341 builtins.c:1353 +#: builtins.c:1361 builtins.c:1364 msgid "" msgstr "" "Project-Id-Version: GNU bash 3.0-rc1\n" -"POT-Creation-Date: 2003-12-22 15:34-0500\n" +"Report-Msgid-Bugs-To: bug-bash@gnu.org\n" +"POT-Creation-Date: 2004-09-09 17:59-0400\n" "PO-Revision-Date: 2003-12-22 15:34-0500\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Report-Msgid-Bugs-To: bug-bash@gnu.org\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: arrayfunc.c:45 @@ -65,35 +65,30 @@ msgstr "bad array subscript" msgid "%s: cannot assign to non-numeric index" msgstr "%s: cannot assign to non-numeric index" -#: bashhist.c:321 +#: bashhist.c:322 #, c-format msgid "%s: cannot create: %s" msgstr "%s: cannot create: %s" -#: bashline.c:2791 +#: bashline.c:2916 msgid "bash_execute_unix_command: cannot find keymap for command" msgstr "bash_execute_unix_command: cannot find keymap for command" -#: bashline.c:2840 +#: bashline.c:2965 #, c-format msgid "%s: first non-whitespace character is not `\"'" msgstr "%s: first non-whitespace character is not ‘\"’" -#: bashline.c:2869 +#: bashline.c:2994 #, c-format msgid "no closing `%c' in %s" msgstr "no closing ‘%c’ in %s" -#: bashline.c:2903 +#: bashline.c:3028 #, c-format msgid "%s: missing colon separator" msgstr "%s: missing colon separator" -#: builtins/alias.def:123 -#, c-format -msgid "`%s': invalid alias name" -msgstr "‘%s’: invalid alias name" - #: builtins/bind.def:194 #, c-format msgid "`%s': invalid keymap name" @@ -152,19 +147,14 @@ msgstr "The value of EXPR indicates how many call frames to go back before the" msgid "current one; the top frame is frame 0." msgstr "current one; the top frame is frame 0." -#: builtins/cd.def:188 +#: builtins/cd.def:190 msgid "HOME not set" msgstr "HOME not set" -#: builtins/cd.def:200 +#: builtins/cd.def:202 msgid "OLDPWD not set" msgstr "OLDPWD not set" -#: builtins/cd.def:357 -#, c-format -msgid "write error: %s" -msgstr "write error: %s" - #: builtins/common.c:133 test.c:921 msgid "too many arguments" msgstr "too many arguments" @@ -194,7 +184,7 @@ msgstr "%s: invalid option" msgid "%s: invalid option name" msgstr "%s: invalid option name" -#: builtins/common.c:194 general.c:229 general.c:234 +#: builtins/common.c:194 general.c:231 general.c:236 #, c-format msgid "`%s': not a valid identifier" msgstr "‘%s’: not a valid identifier" @@ -261,12 +251,17 @@ msgstr "restricted" msgid "%s: not a shell builtin" msgstr "%s: not a shell builtin" -#: builtins/common.c:486 +#: builtins/common.c:276 +#, c-format +msgid "write error: %s" +msgstr "write error: %s" + +#: builtins/common.c:484 #, c-format msgid "%s: error retrieving current directory: %s: %s\n" msgstr "%s: error retrieving current directory: %s: %s\n" -#: builtins/common.c:553 builtins/common.c:555 +#: builtins/common.c:548 builtins/common.c:550 #, c-format msgid "%s: ambiguous job spec" msgstr "%s: ambiguous job spec" @@ -297,7 +292,7 @@ msgstr "can only be used in a function" msgid "cannot use `-f' to make functions" msgstr "cannot use ‘-f’ to make functions" -#: builtins/declare.def:307 execute_cmd.c:3949 +#: builtins/declare.def:307 execute_cmd.c:3969 #, c-format msgid "%s: readonly function" msgstr "%s: readonly function" @@ -331,17 +326,17 @@ msgstr "%s: not dynamically loaded" msgid "%s: cannot delete: %s" msgstr "%s: cannot delete: %s" -#: builtins/evalfile.c:128 execute_cmd.c:3821 shell.c:1395 +#: builtins/evalfile.c:129 execute_cmd.c:3841 shell.c:1396 #, c-format msgid "%s: is a directory" msgstr "%s: is a directory" -#: builtins/evalfile.c:133 +#: builtins/evalfile.c:134 #, c-format msgid "%s: not a regular file" msgstr "%s: not a regular file" -#: builtins/evalfile.c:141 +#: builtins/evalfile.c:142 #, c-format msgid "%s: file is too large" msgstr "%s: file is too large" @@ -359,20 +354,20 @@ msgstr "not login shell: use ‘exit’" msgid "There are stopped jobs.\n" msgstr "There are stopped jobs.\n" -#: builtins/fc.def:252 +#: builtins/fc.def:254 msgid "no command found" msgstr "no command found" -#: builtins/fc.def:317 +#: builtins/fc.def:319 msgid "history specification" msgstr "history specification" -#: builtins/fc.def:338 +#: builtins/fc.def:340 #, c-format msgid "%s: cannot open temp file: %s" msgstr "%s: cannot open temp file: %s" -#: builtins/fg_bg.def:133 +#: builtins/fg_bg.def:145 #, c-format msgid "job %d started without job control" msgstr "job %d started without job control" @@ -460,7 +455,7 @@ msgstr "%s: arguments must be process or job IDs" msgid "Unknown error" msgstr "Unknown error" -#: builtins/let.def:94 builtins/let.def:119 expr.c:496 expr.c:511 +#: builtins/let.def:94 builtins/let.def:119 expr.c:497 expr.c:512 msgid "expression expected" msgstr "expression expected" @@ -469,12 +464,12 @@ msgstr "expression expected" msgid "`%s': missing format character" msgstr "‘%s’: missing format character" -#: builtins/printf.def:408 +#: builtins/printf.def:423 #, c-format msgid "`%c': invalid format character" msgstr "‘%c’: invalid format character" -#: builtins/printf.def:601 +#: builtins/printf.def:629 msgid "missing hex digit for \\x" msgstr "missing hex digit for \\x" @@ -486,43 +481,43 @@ msgstr "no other directory" msgid "" msgstr "" -#: builtins/pushd.def:652 builtins.c:1351 +#: builtins/pushd.def:652 builtins.c:1350 msgid "Display the list of currently remembered directories. Directories" msgstr "Display the list of currently remembered directories. Directories" -#: builtins/pushd.def:653 builtins.c:1352 +#: builtins/pushd.def:653 builtins.c:1351 msgid "find their way onto the list with the `pushd' command; you can get" msgstr "find their way onto the list with the ‘pushd’ command; you can get" -#: builtins/pushd.def:654 builtins.c:1353 +#: builtins/pushd.def:654 builtins.c:1352 msgid "back up through the list with the `popd' command." msgstr "back up through the list with the ‘popd’ command." -#: builtins/pushd.def:656 builtins.c:1355 +#: builtins/pushd.def:656 builtins.c:1354 msgid "The -l flag specifies that `dirs' should not print shorthand versions" msgstr "The -l flag specifies that ‘dirs’ should not print shorthand versions" -#: builtins/pushd.def:657 builtins.c:1356 +#: builtins/pushd.def:657 builtins.c:1355 msgid "of directories which are relative to your home directory. This means" msgstr "of directories which are relative to your home directory. This means" -#: builtins/pushd.def:658 builtins.c:1357 +#: builtins/pushd.def:658 builtins.c:1356 msgid "that `~/bin' might be displayed as `/homes/bfox/bin'. The -v flag" msgstr "that ‘~/bin’ might be displayed as ‘/homes/bfox/bin’. The -v flag" -#: builtins/pushd.def:659 builtins.c:1358 +#: builtins/pushd.def:659 builtins.c:1357 msgid "causes `dirs' to print the directory stack with one entry per line," msgstr "causes ‘dirs’ to print the directory stack with one entry per line," -#: builtins/pushd.def:660 builtins.c:1359 +#: builtins/pushd.def:660 builtins.c:1358 msgid "prepending the directory name with its position in the stack. The -p" msgstr "prepending the directory name with its position in the stack. The -p" -#: builtins/pushd.def:661 builtins.c:1360 +#: builtins/pushd.def:661 builtins.c:1359 msgid "flag does the same thing, but the stack position is not prepended." msgstr "flag does the same thing, but the stack position is not prepended." -#: builtins/pushd.def:662 builtins.c:1361 +#: builtins/pushd.def:662 builtins.c:1360 msgid "The -c flag clears the directory stack by deleting all of the elements." msgstr "" "The -c flag clears the directory stack by deleting all of the elements." @@ -542,15 +537,15 @@ msgid "" msgstr "" "-N displays the Nth entry counting from the right of the list shown by" -#: builtins/pushd.def:673 builtins.c:1302 +#: builtins/pushd.def:673 builtins.c:1301 msgid "Adds a directory to the top of the directory stack, or rotates" msgstr "Adds a directory to the top of the directory stack, or rotates" -#: builtins/pushd.def:674 builtins.c:1303 +#: builtins/pushd.def:674 builtins.c:1302 msgid "the stack, making the new top of the stack the current working" msgstr "the stack, making the new top of the stack the current working" -#: builtins/pushd.def:675 builtins.c:1304 +#: builtins/pushd.def:675 builtins.c:1303 msgid "directory. With no arguments, exchanges the top two directories." msgstr "directory. With no arguments, exchanges the top two directories." @@ -590,20 +585,20 @@ msgstr "dir adds DIR to the directory stack at the top, making it the" msgid " new current working directory." msgstr " new current working directory." -#: builtins/pushd.def:691 builtins/pushd.def:711 builtins.c:1320 -#: builtins.c:1343 +#: builtins/pushd.def:691 builtins/pushd.def:711 builtins.c:1319 +#: builtins.c:1342 msgid "You can see the directory stack with the `dirs' command." msgstr "You can see the directory stack with the ‘dirs’ command." -#: builtins/pushd.def:696 builtins.c:1328 +#: builtins/pushd.def:696 builtins.c:1327 msgid "Removes entries from the directory stack. With no arguments," msgstr "Removes entries from the directory stack. With no arguments," -#: builtins/pushd.def:697 builtins.c:1329 +#: builtins/pushd.def:697 builtins.c:1328 msgid "removes the top directory from the stack, and cd's to the new" msgstr "removes the top directory from the stack, and cd's to the new" -#: builtins/pushd.def:698 builtins.c:1330 +#: builtins/pushd.def:698 builtins.c:1329 msgid "top directory." msgstr "top directory." @@ -717,32 +712,32 @@ msgstr "cannot suspend" msgid "cannot suspend a login shell" msgstr "cannot suspend a login shell" -#: builtins/type.def:231 +#: builtins/type.def:232 #, c-format msgid "%s is aliased to `%s'\n" msgstr "%s is aliased to ‘%s’\n" -#: builtins/type.def:252 +#: builtins/type.def:253 #, c-format msgid "%s is a shell keyword\n" msgstr "%s is a shell keyword\n" -#: builtins/type.def:272 +#: builtins/type.def:273 #, c-format msgid "%s is a function\n" msgstr "%s is a function\n" -#: builtins/type.def:297 +#: builtins/type.def:298 #, c-format msgid "%s is a shell builtin\n" msgstr "%s is a shell builtin\n" -#: builtins/type.def:318 +#: builtins/type.def:319 #, c-format msgid "%s is %s\n" msgstr "%s is %s\n" -#: builtins/type.def:338 +#: builtins/type.def:339 #, c-format msgid "%s is hashed (%s)\n" msgstr "%s is hashed (%s)\n" @@ -776,7 +771,7 @@ msgstr "octal number" msgid "`%c': invalid symbolic mode operator" msgstr "‘%c’: invalid symbolic mode operator" -#: builtins/umask.def:279 +#: builtins/umask.def:281 #, c-format msgid "`%c': invalid symbolic mode character" msgstr "‘%c’: invalid symbolic mode character" @@ -820,98 +815,98 @@ msgstr "%s: unbound variable" msgid "timed out waiting for input: auto-logout\n" msgstr "timed out waiting for input: auto-logout\n" -#: execute_cmd.c:466 +#: execute_cmd.c:467 #, c-format msgid "cannot redirect standard input from /dev/null: %s" msgstr "cannot redirect standard input from /dev/null: %s" -#: execute_cmd.c:1036 +#: execute_cmd.c:1037 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: ‘%c’: invalid format character" -#: execute_cmd.c:3521 +#: execute_cmd.c:3541 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: restricted: cannot specify ‘/’ in command names" -#: execute_cmd.c:3609 +#: execute_cmd.c:3629 #, c-format msgid "%s: command not found" msgstr "%s: command not found" -#: execute_cmd.c:3839 +#: execute_cmd.c:3859 #, c-format msgid "%s: %s: bad interpreter" msgstr "%s: %s: bad interpreter" -#: execute_cmd.c:3876 +#: execute_cmd.c:3896 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: cannot execute binary file" -#: execute_cmd.c:3988 +#: execute_cmd.c:4008 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "cannot duplicate fd %d to fd %d" -#: expr.c:239 +#: expr.c:240 msgid "expression recursion level exceeded" msgstr "expression recursion level exceeded" -#: expr.c:263 +#: expr.c:264 msgid "recursion stack underflow" msgstr "recursion stack underflow" -#: expr.c:374 +#: expr.c:375 msgid "syntax error in expression" msgstr "syntax error in expression" -#: expr.c:414 +#: expr.c:415 msgid "attempted assignment to non-variable" msgstr "attempted assignment to non-variable" -#: expr.c:435 expr.c:440 expr.c:750 +#: expr.c:436 expr.c:441 expr.c:751 msgid "division by 0" msgstr "division by 0" -#: expr.c:466 +#: expr.c:467 msgid "bug: bad expassign token" msgstr "bug: bad expassign token" -#: expr.c:508 +#: expr.c:509 msgid "`:' expected for conditional expression" msgstr "‘:’ expected for conditional expression" -#: expr.c:775 +#: expr.c:776 msgid "exponent less than 0" msgstr "exponent less than 0" -#: expr.c:819 +#: expr.c:821 msgid "identifier expected after pre-increment or pre-decrement" msgstr "identifier expected after pre-increment or pre-decrement" -#: expr.c:847 +#: expr.c:849 msgid "missing `)'" msgstr "missing ‘)’" -#: expr.c:871 +#: expr.c:892 msgid "syntax error: operand expected" msgstr "syntax error: operand expected" -#: expr.c:1146 +#: expr.c:1178 msgid "invalid number" msgstr "invalid number" -#: expr.c:1150 +#: expr.c:1182 msgid "invalid arithmetic base" msgstr "invalid arithmetic base" -#: expr.c:1170 +#: expr.c:1202 msgid "value too great for base" msgstr "value too great for base" -#: general.c:60 +#: general.c:62 msgid "getcwd: cannot access parent directories" msgstr "getcwd: cannot access parent directories" @@ -925,42 +920,42 @@ msgstr "cannot allocate new file descriptor for bash input from fd %d" msgid "save_bash_input: buffer already exists for new fd %d" msgstr "save_bash_input: buffer already exists for new fd %d" -#: jobs.c:693 +#: jobs.c:694 #, c-format msgid "deleting stopped job %d with process group %ld" msgstr "deleting stopped job %d with process group %ld" -#: jobs.c:1001 +#: jobs.c:1002 #, c-format msgid "describe_pid: %ld: no such pid" msgstr "describe_pid: %ld: no such pid" -#: jobs.c:1632 nojobs.c:648 +#: jobs.c:1633 nojobs.c:648 #, c-format msgid "wait: pid %ld is not a child of this shell" msgstr "wait: pid %ld is not a child of this shell" -#: jobs.c:1815 +#: jobs.c:1821 #, c-format msgid "wait_for: No record of process %ld" msgstr "wait_for: No record of process %ld" -#: jobs.c:2062 +#: jobs.c:2068 #, c-format msgid "wait_for_job: job %d is stopped" msgstr "wait_for_job: job %d is stopped" -#: jobs.c:2284 +#: jobs.c:2290 #, c-format msgid "%s: job has terminated" msgstr "%s: job has terminated" -#: jobs.c:2293 +#: jobs.c:2299 #, c-format msgid "%s: job %d already in background" msgstr "%s: job %d already in background" -#: jobs.c:3037 +#: jobs.c:3043 msgid "no job control in this shell" msgstr "no job control in this shell" @@ -1098,12 +1093,12 @@ msgstr "syntax error: ‘;’ unexpected" msgid "syntax error: `((%s))'" msgstr "syntax error: ‘((%s))’" -#: make_cmd.c:560 +#: make_cmd.c:561 #, c-format msgid "make_here_document: bad instruction type %d" msgstr "make_here_document: bad instruction type %d" -#: make_cmd.c:730 +#: make_cmd.c:731 #, c-format msgid "make_redirection: redirection instruction `%d' out of range" msgstr "make_redirection: redirection instruction ‘%d’ out of range" @@ -1177,34 +1172,34 @@ msgstr "unexpected token ‘%s’ in conditional command" msgid "unexpected token %d in conditional command" msgstr "unexpected token %d in conditional command" -#: parse.y:4400 +#: parse.y:4409 #, c-format msgid "syntax error near unexpected token `%s'" msgstr "syntax error near unexpected token ‘%s’" -#: parse.y:4418 +#: parse.y:4427 #, c-format msgid "syntax error near `%s'" msgstr "syntax error near ‘%s’" -#: parse.y:4428 +#: parse.y:4437 msgid "syntax error: unexpected end of file" msgstr "syntax error: unexpected end of file" -#: parse.y:4428 +#: parse.y:4437 msgid "syntax error" msgstr "syntax error" -#: parse.y:4490 +#: parse.y:4499 #, c-format msgid "Use \"%s\" to leave the shell.\n" msgstr "Use “%s” to leave the shell.\n" -#: parse.y:4649 +#: parse.y:4658 msgid "unexpected EOF while looking for matching `)'" msgstr "unexpected EOF while looking for matching ‘)’" -#: pcomplete.c:988 +#: pcomplete.c:998 #, c-format msgid "completion: function `%s' not found" msgstr "completion: function ‘%s’ not found" @@ -1214,12 +1209,12 @@ msgstr "completion: function ‘%s’ not found" msgid "progcomp_insert: %s: NULL COMPSPEC" msgstr "progcomp_insert: %s: NULL COMPSPEC" -#: print_cmd.c:260 +#: print_cmd.c:261 #, c-format msgid "print_command: bad connector `%d'" msgstr "print_command: bad connector ‘%d’" -#: print_cmd.c:1172 +#: print_cmd.c:1211 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: ‘%c’: invalid format character" @@ -1269,11 +1264,11 @@ msgstr "/tmp must be a valid directory name" msgid "%c%c: invalid option" msgstr "%c%c: invalid option" -#: shell.c:1590 +#: shell.c:1591 msgid "I have no name!" msgstr "I have no name!" -#: shell.c:1725 +#: shell.c:1726 #, c-format msgid "" "Usage:\t%s [GNU long option] [option] ...\n" @@ -1282,113 +1277,113 @@ msgstr "" "Usage:\t%s [GNU long option] [option] ...\n" "\t%s [GNU long option] [option] script-file ...\n" -#: shell.c:1727 +#: shell.c:1728 msgid "GNU long options:\n" msgstr "GNU long options:\n" -#: shell.c:1731 +#: shell.c:1732 msgid "Shell options:\n" msgstr "Shell options:\n" -#: shell.c:1732 +#: shell.c:1733 msgid "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n" msgstr "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n" -#: shell.c:1747 +#: shell.c:1748 #, c-format msgid "\t-%s or -o option\n" msgstr "\t-%s or -o option\n" -#: shell.c:1753 +#: shell.c:1754 #, c-format msgid "Type `%s -c \"help set\"' for more information about shell options.\n" msgstr "Type ‘%s -c “help set”’ for more information about shell options.\n" -#: shell.c:1754 +#: shell.c:1755 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" msgstr "Type ‘%s -c help’ for more information about shell builtin commands.\n" -#: shell.c:1755 +#: shell.c:1756 msgid "Use the `bashbug' command to report bugs.\n" msgstr "Use the ‘bashbug’ command to report bugs.\n" -#: sig.c:485 +#: sig.c:490 #, c-format msgid "sigprocmask: %d: invalid operation" msgstr "sigprocmask: %d: invalid operation" -#: subst.c:1011 +#: subst.c:1046 #, c-format msgid "bad substitution: no closing `%s' in %s" msgstr "bad substitution: no closing ‘%s’ in %s" -#: subst.c:2020 +#: subst.c:2053 #, c-format msgid "%s: cannot assign list to array member" msgstr "%s: cannot assign list to array member" -#: subst.c:3516 subst.c:3532 +#: subst.c:3880 subst.c:3896 msgid "cannot make pipe for process substitution" msgstr "cannot make pipe for process substitution" -#: subst.c:3563 +#: subst.c:3927 msgid "cannot make child for process substitution" msgstr "cannot make child for process substitution" -#: subst.c:3608 +#: subst.c:3972 #, c-format msgid "cannot open named pipe %s for reading" msgstr "cannot open named pipe %s for reading" -#: subst.c:3610 +#: subst.c:3974 #, c-format msgid "cannot open named pipe %s for writing" msgstr "cannot open named pipe %s for writing" -#: subst.c:3618 +#: subst.c:3982 #, c-format msgid "cannout reset nodelay mode for fd %d" msgstr "cannout reset nodelay mode for fd %d" -#: subst.c:3628 +#: subst.c:3992 #, c-format msgid "cannot duplicate named pipe %s as fd %d" msgstr "cannot duplicate named pipe %s as fd %d" -#: subst.c:3803 +#: subst.c:4167 msgid "cannot make pipe for command substitution" msgstr "cannot make pipe for command substitution" -#: subst.c:3832 +#: subst.c:4196 msgid "cannot make child for command substitution" msgstr "cannot make child for command substitution" -#: subst.c:3849 +#: subst.c:4213 msgid "command_substitute: cannot duplicate pipe as fd 1" msgstr "command_substitute: cannot duplicate pipe as fd 1" -#: subst.c:4284 +#: subst.c:4671 #, c-format msgid "%s: parameter null or not set" msgstr "%s: parameter null or not set" -#: subst.c:4529 +#: subst.c:4937 #, c-format msgid "%s: substring expression < 0" msgstr "%s: substring expression < 0" -#: subst.c:5209 +#: subst.c:5667 #, c-format msgid "%s: bad substitution" msgstr "%s: bad substitution" -#: subst.c:5283 +#: subst.c:5741 #, c-format msgid "$%s: cannot assign in this way" msgstr "$%s: cannot assign in this way" -#: subst.c:6652 +#: subst.c:7110 #, c-format msgid "no match: %s" msgstr "no match: %s" @@ -1446,43 +1441,43 @@ msgstr "" msgid "trap_handler: bad signal %d" msgstr "trap_handler: bad signal %d" -#: variables.c:310 +#: variables.c:314 #, c-format msgid "error importing function definition for `%s'" msgstr "error importing function definition for ‘%s’" -#: variables.c:670 +#: variables.c:674 #, c-format msgid "shell level (%d) too high, resetting to 1" msgstr "shell level (%d) too high, resetting to 1" -#: variables.c:1610 +#: variables.c:1617 msgid "make_local_variable: no function context at current scope" msgstr "make_local_variable: no function context at current scope" -#: variables.c:2709 +#: variables.c:2724 msgid "all_local_variables: no function context at current scope" msgstr "all_local_variables: no function context at current scope" -#: variables.c:2923 variables.c:2932 +#: variables.c:2938 variables.c:2947 #, c-format msgid "invalid character %d in exportstr for %s" msgstr "invalid character %d in exportstr for %s" -#: variables.c:2938 +#: variables.c:2953 #, c-format msgid "no `=' in exportstr for %s" msgstr "no ‘=’ in exportstr for %s" -#: variables.c:3363 +#: variables.c:3378 msgid "pop_var_context: head of shell_variables not a function context" msgstr "pop_var_context: head of shell_variables not a function context" -#: variables.c:3376 +#: variables.c:3391 msgid "pop_var_context: no global_variables context" msgstr "pop_var_context: no global_variables context" -#: variables.c:3442 +#: variables.c:3457 msgid "pop_scope: head of shell_variables not a temporary environment scope" msgstr "pop_scope: head of shell_variables not a temporary environment scope" @@ -3359,478 +3354,483 @@ msgid "The command ARG is to be read and executed when the shell receives" msgstr "The command ARG is to be read and executed when the shell receives" #: builtins.c:1000 -msgid "signal(s) SIGNAL_SPEC. If ARG is absent all specified signals are" +#, fuzzy +msgid "signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC" msgstr "signal(s) SIGNAL_SPEC. If ARG is absent all specified signals are" #: builtins.c:1001 -msgid "reset to their original values. If ARG is the null string each" -msgstr "reset to their original values. If ARG is the null string each" +msgid "is supplied) or `-', each specified signal is reset to its original" +msgstr "" #: builtins.c:1002 -msgid "SIGNAL_SPEC is ignored by the shell and by the commands it invokes." -msgstr "SIGNAL_SPEC is ignored by the shell and by the commands it invokes." +msgid "value. If ARG is the null string each SIGNAL_SPEC is ignored by the" +msgstr "" #: builtins.c:1003 -msgid "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from" -msgstr "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from" +msgid "shell and by the commands it invokes. If a SIGNAL_SPEC is EXIT (0)" +msgstr "" #: builtins.c:1004 -msgid "the shell. If a SIGNAL_SPEC is DEBUG, ARG is executed after every" -msgstr "the shell. If a SIGNAL_SPEC is DEBUG, ARG is executed after every" +msgid "the command ARG is executed on exit from the shell. If a SIGNAL_SPEC" +msgstr "" #: builtins.c:1005 -msgid "command. If ARG is `-p' then the trap commands associated with" -msgstr "command. If ARG is ‘-p’ then the trap commands associated with" +msgid "" +"is DEBUG, ARG is executed after every simple command. If the`-p' option" +msgstr "" #: builtins.c:1006 -msgid "each SIGNAL_SPEC are displayed. If no arguments are supplied or if" -msgstr "each SIGNAL_SPEC are displayed. If no arguments are supplied or if" +#, fuzzy +msgid "is supplied then the trap commands associated with each SIGNAL_SPEC are" +msgstr "command. If ARG is ‘-p’ then the trap commands associated with" #: builtins.c:1007 -msgid "only `-p' is given, trap prints the list of commands associated with" -msgstr "only ‘-p’ is given, trap prints the list of commands associated with" +#, fuzzy +msgid "displayed. If no arguments are supplied or if only `-p' is given, trap" +msgstr "each SIGNAL_SPEC are displayed. If no arguments are supplied or if" #: builtins.c:1008 +#, fuzzy msgid "" -"each signal number. Each SIGNAL_SPEC is either a signal name in " -msgstr "" -"each signal number. Each SIGNAL_SPEC is either a signal name in " +"prints the list of commands associated with each signal. Each SIGNAL_SPEC" +msgstr "only ‘-p’ is given, trap prints the list of commands associated with" #: builtins.c:1009 -msgid "or a signal number. `trap -l' prints a list of signal names and their" -msgstr "or a signal number. ‘trap -l’ prints a list of signal names and their" +msgid "is either a signal name in or a signal number. Signal names" +msgstr "" #: builtins.c:1010 -msgid "corresponding numbers. Note that a signal can be sent to the shell" -msgstr "corresponding numbers. Note that a signal can be sent to the shell" +msgid "are case insensitive and the SIG prefix is optional. `trap -l' prints" +msgstr "" #: builtins.c:1011 -msgid "with \"kill -signal $$\"." -msgstr "with “kill -signal $$”." +msgid "a list of signal names and their corresponding numbers. Note that a" +msgstr "" + +#: builtins.c:1012 +msgid "signal can be sent to the shell with \"kill -signal $$\"." +msgstr "" -#: builtins.c:1017 +#: builtins.c:1018 msgid "For each NAME, indicate how it would be interpreted if used as a" msgstr "For each NAME, indicate how it would be interpreted if used as a" -#: builtins.c:1018 +#: builtins.c:1019 msgid "command name." msgstr "command name." -#: builtins.c:1020 +#: builtins.c:1021 msgid "If the -t option is used, `type' outputs a single word which is one of" msgstr "If the -t option is used, ‘type’ outputs a single word which is one of" -#: builtins.c:1021 +#: builtins.c:1022 msgid "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an" msgstr "‘alias’, ‘keyword’, ‘function’, ‘builtin’, ‘file’ or ‘’, if NAME is an" -#: builtins.c:1022 +#: builtins.c:1023 msgid "alias, shell reserved word, shell function, shell builtin, disk file," msgstr "alias, shell reserved word, shell function, shell builtin, disk file," -#: builtins.c:1023 +#: builtins.c:1024 msgid "or unfound, respectively." msgstr "or unfound, respectively." -#: builtins.c:1025 +#: builtins.c:1026 msgid "If the -p flag is used, `type' either returns the name of the disk" msgstr "If the -p flag is used, ‘type’ either returns the name of the disk" -#: builtins.c:1026 +#: builtins.c:1027 msgid "file that would be executed, or nothing if `type -t NAME' would not" msgstr "file that would be executed, or nothing if ‘type -t NAME’ would not" -#: builtins.c:1027 +#: builtins.c:1028 msgid "return `file'." msgstr "return ‘file’." -#: builtins.c:1029 +#: builtins.c:1030 msgid "If the -a flag is used, `type' displays all of the places that contain" msgstr "If the -a flag is used, ‘type’ displays all of the places that contain" -#: builtins.c:1030 +#: builtins.c:1031 msgid "an executable named `file'. This includes aliases, builtins, and" msgstr "an executable named ‘file’. This includes aliases, builtins, and" -#: builtins.c:1031 +#: builtins.c:1032 msgid "functions, if and only if the -p flag is not also used." msgstr "functions, if and only if the -p flag is not also used." -#: builtins.c:1033 +#: builtins.c:1034 msgid "The -f flag suppresses shell function lookup." msgstr "The -f flag suppresses shell function lookup." -#: builtins.c:1035 +#: builtins.c:1036 msgid "The -P flag forces a PATH search for each NAME, even if it is an alias," msgstr "" "The -P flag forces a PATH search for each NAME, even if it is an alias," -#: builtins.c:1036 +#: builtins.c:1037 msgid "builtin, or function, and returns the name of the disk file that would" msgstr "builtin, or function, and returns the name of the disk file that would" -#: builtins.c:1037 +#: builtins.c:1038 msgid "be executed." msgstr "be executed." -#: builtins.c:1044 +#: builtins.c:1045 msgid "Ulimit provides control over the resources available to processes" msgstr "Ulimit provides control over the resources available to processes" -#: builtins.c:1045 +#: builtins.c:1046 msgid "started by the shell, on systems that allow such control. If an" msgstr "started by the shell, on systems that allow such control. If an" -#: builtins.c:1046 +#: builtins.c:1047 msgid "option is given, it is interpreted as follows:" msgstr "option is given, it is interpreted as follows:" -#: builtins.c:1048 +#: builtins.c:1049 msgid " -S\tuse the `soft' resource limit" msgstr " -S\tuse the ‘soft’ resource limit" -#: builtins.c:1049 +#: builtins.c:1050 msgid " -H\tuse the `hard' resource limit" msgstr " -H\tuse the ‘hard’ resource limit" -#: builtins.c:1050 +#: builtins.c:1051 msgid " -a\tall current limits are reported" msgstr " -a\tall current limits are reported" -#: builtins.c:1051 +#: builtins.c:1052 msgid " -c\tthe maximum size of core files created" msgstr " -c\tthe maximum size of core files created" -#: builtins.c:1052 +#: builtins.c:1053 msgid " -d\tthe maximum size of a process's data segment" msgstr " -d\tthe maximum size of a process's data segment" -#: builtins.c:1053 +#: builtins.c:1054 msgid " -f\tthe maximum size of files created by the shell" msgstr " -f\tthe maximum size of files created by the shell" -#: builtins.c:1054 +#: builtins.c:1055 msgid " -l\tthe maximum size a process may lock into memory" msgstr " -l\tthe maximum size a process may lock into memory" -#: builtins.c:1055 +#: builtins.c:1056 msgid " -m\tthe maximum resident set size" msgstr " -m\tthe maximum resident set size" -#: builtins.c:1056 +#: builtins.c:1057 msgid " -n\tthe maximum number of open file descriptors" msgstr " -n\tthe maximum number of open file descriptors" -#: builtins.c:1057 +#: builtins.c:1058 msgid " -p\tthe pipe buffer size" msgstr " -p\tthe pipe buffer size" -#: builtins.c:1058 +#: builtins.c:1059 msgid " -s\tthe maximum stack size" msgstr " -s\tthe maximum stack size" -#: builtins.c:1059 +#: builtins.c:1060 msgid " -t\tthe maximum amount of cpu time in seconds" msgstr " -t\tthe maximum amount of cpu time in seconds" -#: builtins.c:1060 +#: builtins.c:1061 msgid " -u\tthe maximum number of user processes" msgstr " -u\tthe maximum number of user processes" -#: builtins.c:1061 +#: builtins.c:1062 msgid " -v\tthe size of virtual memory" msgstr " -v\tthe size of virtual memory" -#: builtins.c:1063 +#: builtins.c:1064 msgid "If LIMIT is given, it is the new value of the specified resource;" msgstr "If LIMIT is given, it is the new value of the specified resource;" -#: builtins.c:1064 +#: builtins.c:1065 msgid "the special LIMIT values `soft', `hard', and `unlimited' stand for" msgstr "the special LIMIT values ‘soft’, ‘hard’, and ‘unlimited’ stand for" -#: builtins.c:1065 +#: builtins.c:1066 msgid "" "the current soft limit, the current hard limit, and no limit, respectively." msgstr "" "the current soft limit, the current hard limit, and no limit, respectively." -#: builtins.c:1066 +#: builtins.c:1067 msgid "Otherwise, the current value of the specified resource is printed." msgstr "Otherwise, the current value of the specified resource is printed." -#: builtins.c:1067 +#: builtins.c:1068 msgid "If no option is given, then -f is assumed. Values are in 1024-byte" msgstr "If no option is given, then -f is assumed. Values are in 1024-byte" -#: builtins.c:1068 +#: builtins.c:1069 msgid "increments, except for -t, which is in seconds, -p, which is in" msgstr "increments, except for -t, which is in seconds, -p, which is in" -#: builtins.c:1069 +#: builtins.c:1070 msgid "increments of 512 bytes, and -u, which is an unscaled number of" msgstr "increments of 512 bytes, and -u, which is an unscaled number of" -#: builtins.c:1070 +#: builtins.c:1071 msgid "processes." msgstr "processes." -#: builtins.c:1077 +#: builtins.c:1078 msgid "The user file-creation mask is set to MODE. If MODE is omitted, or if" msgstr "The user file-creation mask is set to MODE. If MODE is omitted, or if" -#: builtins.c:1078 +#: builtins.c:1079 msgid "`-S' is supplied, the current value of the mask is printed. The `-S'" msgstr "‘-S’ is supplied, the current value of the mask is printed. The ‘-S’" -#: builtins.c:1079 +#: builtins.c:1080 msgid "option makes the output symbolic; otherwise an octal number is output." msgstr "option makes the output symbolic; otherwise an octal number is output." -#: builtins.c:1080 +#: builtins.c:1081 msgid "If `-p' is supplied, and MODE is omitted, the output is in a form" msgstr "If ‘-p’ is supplied, and MODE is omitted, the output is in a form" -#: builtins.c:1081 +#: builtins.c:1082 msgid "that may be used as input. If MODE begins with a digit, it is" msgstr "that may be used as input. If MODE begins with a digit, it is" -#: builtins.c:1082 +#: builtins.c:1083 msgid "interpreted as an octal number, otherwise it is a symbolic mode string" msgstr "interpreted as an octal number, otherwise it is a symbolic mode string" -#: builtins.c:1083 +#: builtins.c:1084 msgid "like that accepted by chmod(1)." msgstr "like that accepted by chmod(1)." -#: builtins.c:1090 builtins.c:1102 +#: builtins.c:1091 builtins.c:1103 msgid "Wait for the specified process and report its termination status. If" msgstr "Wait for the specified process and report its termination status. If" -#: builtins.c:1091 builtins.c:1103 +#: builtins.c:1092 builtins.c:1104 msgid "N is not given, all currently active child processes are waited for," msgstr "N is not given, all currently active child processes are waited for," -#: builtins.c:1092 +#: builtins.c:1093 msgid "and the return code is zero. N may be a process ID or a job" msgstr "and the return code is zero. N may be a process ID or a job" -#: builtins.c:1093 +#: builtins.c:1094 msgid "specification; if a job spec is given, all processes in the job's" msgstr "specification; if a job spec is given, all processes in the job's" -#: builtins.c:1094 +#: builtins.c:1095 msgid "pipeline are waited for." msgstr "pipeline are waited for." -#: builtins.c:1104 +#: builtins.c:1105 msgid "and the return code is zero. N is a process ID; if it is not given," msgstr "and the return code is zero. N is a process ID; if it is not given," -#: builtins.c:1105 +#: builtins.c:1106 msgid "all child processes of the shell are waited for." msgstr "all child processes of the shell are waited for." -#: builtins.c:1112 +#: builtins.c:1113 msgid "The `for' loop executes a sequence of commands for each member in a" msgstr "The ‘for’ loop executes a sequence of commands for each member in a" -#: builtins.c:1113 +#: builtins.c:1114 msgid "list of items. If `in WORDS ...;' is not present, then `in \"$@\"' is" msgstr "list of items. If ‘in WORDS ...;’ is not present, then ‘in “$@”’ is" -#: builtins.c:1114 +#: builtins.c:1115 msgid "assumed. For each element in WORDS, NAME is set to that element, and" msgstr "assumed. For each element in WORDS, NAME is set to that element, and" -#: builtins.c:1115 +#: builtins.c:1116 msgid "the COMMANDS are executed." msgstr "the COMMANDS are executed." -#: builtins.c:1121 +#: builtins.c:1122 msgid "Equivalent to" msgstr "Equivalent to" -#: builtins.c:1122 +#: builtins.c:1123 msgid "\t(( EXP1 ))" msgstr "\t(( EXP1 ))" -#: builtins.c:1123 +#: builtins.c:1124 msgid "\twhile (( EXP2 )); do" msgstr "\twhile (( EXP2 )); do" -#: builtins.c:1124 +#: builtins.c:1125 msgid "\t\tCOMMANDS" msgstr "\t\tCOMMANDS" -#: builtins.c:1125 +#: builtins.c:1126 msgid "\t\t(( EXP3 ))" msgstr "\t\t(( EXP3 ))" -#: builtins.c:1126 +#: builtins.c:1127 msgid "\tdone" msgstr "\tdone" -#: builtins.c:1127 +#: builtins.c:1128 msgid "EXP1, EXP2, and EXP3 are arithmetic expressions. If any expression is" msgstr "EXP1, EXP2, and EXP3 are arithmetic expressions. If any expression is" -#: builtins.c:1128 +#: builtins.c:1129 msgid "omitted, it behaves as if it evaluates to 1." msgstr "omitted, it behaves as if it evaluates to 1." -#: builtins.c:1134 +#: builtins.c:1135 msgid "The WORDS are expanded, generating a list of words. The" msgstr "The WORDS are expanded, generating a list of words. The" -#: builtins.c:1135 +#: builtins.c:1136 msgid "set of expanded words is printed on the standard error, each" msgstr "set of expanded words is printed on the standard error, each" -#: builtins.c:1136 +#: builtins.c:1137 msgid "preceded by a number. If `in WORDS' is not present, `in \"$@\"'" msgstr "preceded by a number. If ‘in WORDS’ is not present, ‘in “$@”’" -#: builtins.c:1137 +#: builtins.c:1138 msgid "is assumed. The PS3 prompt is then displayed and a line read" msgstr "is assumed. The PS3 prompt is then displayed and a line read" -#: builtins.c:1138 +#: builtins.c:1139 msgid "from the standard input. If the line consists of the number" msgstr "from the standard input. If the line consists of the number" -#: builtins.c:1139 +#: builtins.c:1140 msgid "corresponding to one of the displayed words, then NAME is set" msgstr "corresponding to one of the displayed words, then NAME is set" -#: builtins.c:1140 +#: builtins.c:1141 msgid "to that word. If the line is empty, WORDS and the prompt are" msgstr "to that word. If the line is empty, WORDS and the prompt are" -#: builtins.c:1141 +#: builtins.c:1142 msgid "redisplayed. If EOF is read, the command completes. Any other" msgstr "redisplayed. If EOF is read, the command completes. Any other" -#: builtins.c:1142 +#: builtins.c:1143 msgid "value read causes NAME to be set to null. The line read is saved" msgstr "value read causes NAME to be set to null. The line read is saved" -#: builtins.c:1143 +#: builtins.c:1144 msgid "in the variable REPLY. COMMANDS are executed after each selection" msgstr "in the variable REPLY. COMMANDS are executed after each selection" -#: builtins.c:1144 +#: builtins.c:1145 msgid "until a break command is executed." msgstr "until a break command is executed." -#: builtins.c:1150 +#: builtins.c:1151 msgid "Execute PIPELINE and print a summary of the real time, user CPU time," msgstr "Execute PIPELINE and print a summary of the real time, user CPU time," -#: builtins.c:1151 +#: builtins.c:1152 msgid "and system CPU time spent executing PIPELINE when it terminates." msgstr "and system CPU time spent executing PIPELINE when it terminates." -#: builtins.c:1152 +#: builtins.c:1153 msgid "The return status is the return status of PIPELINE. The `-p' option" msgstr "The return status is the return status of PIPELINE. The ‘-p’ option" -#: builtins.c:1153 +#: builtins.c:1154 msgid "prints the timing summary in a slightly different format. This uses" msgstr "prints the timing summary in a slightly different format. This uses" -#: builtins.c:1154 +#: builtins.c:1155 msgid "the value of the TIMEFORMAT variable as the output format." msgstr "the value of the TIMEFORMAT variable as the output format." -#: builtins.c:1160 +#: builtins.c:1161 msgid "Selectively execute COMMANDS based upon WORD matching PATTERN. The" msgstr "Selectively execute COMMANDS based upon WORD matching PATTERN. The" -#: builtins.c:1161 +#: builtins.c:1162 msgid "`|' is used to separate multiple patterns." msgstr "‘|’ is used to separate multiple patterns." -#: builtins.c:1167 +#: builtins.c:1168 msgid "" "The if COMMANDS are executed. If the exit status is zero, then the then" msgstr "" "The if COMMANDS are executed. If the exit status is zero, then the then" -#: builtins.c:1168 +#: builtins.c:1169 msgid "" "COMMANDS are executed. Otherwise, each of the elif COMMANDS are executed" msgstr "" "COMMANDS are executed. Otherwise, each of the elif COMMANDS are executed" -#: builtins.c:1169 +#: builtins.c:1170 msgid "" "in turn, and if the exit status is zero, the corresponding then COMMANDS" msgstr "" "in turn, and if the exit status is zero, the corresponding then COMMANDS" -#: builtins.c:1170 +#: builtins.c:1171 msgid "" "are executed and the if command completes. Otherwise, the else COMMANDS" msgstr "" "are executed and the if command completes. Otherwise, the else COMMANDS" -#: builtins.c:1171 +#: builtins.c:1172 msgid "" "are executed, if present. The exit status is the exit status of the last" msgstr "" "are executed, if present. The exit status is the exit status of the last" -#: builtins.c:1172 +#: builtins.c:1173 msgid "command executed, or zero if no condition tested true." msgstr "command executed, or zero if no condition tested true." -#: builtins.c:1178 builtins.c:1185 +#: builtins.c:1179 builtins.c:1186 msgid "Expand and execute COMMANDS as long as the final command in the" msgstr "Expand and execute COMMANDS as long as the final command in the" -#: builtins.c:1179 +#: builtins.c:1180 msgid "`while' COMMANDS has an exit status of zero." msgstr "‘while’ COMMANDS has an exit status of zero." -#: builtins.c:1186 +#: builtins.c:1187 msgid "`until' COMMANDS has an exit status which is not zero." msgstr "‘until’ COMMANDS has an exit status which is not zero." -#: builtins.c:1192 +#: builtins.c:1193 msgid "Create a simple command invoked by NAME which runs COMMANDS." msgstr "Create a simple command invoked by NAME which runs COMMANDS." -#: builtins.c:1193 +#: builtins.c:1194 msgid "Arguments on the command line along with NAME are passed to the" msgstr "Arguments on the command line along with NAME are passed to the" -#: builtins.c:1194 +#: builtins.c:1195 msgid "function as $0 .. $n." msgstr "function as $0 .. $n." -#: builtins.c:1200 +#: builtins.c:1201 msgid "Run a set of commands in a group. This is one way to redirect an" msgstr "Run a set of commands in a group. This is one way to redirect an" -#: builtins.c:1201 +#: builtins.c:1202 msgid "entire set of commands." msgstr "entire set of commands." -#: builtins.c:1207 +#: builtins.c:1208 msgid "This is similar to the `fg' command. Resume a stopped or background" msgstr "This is similar to the ‘fg’ command. Resume a stopped or background" -#: builtins.c:1208 -msgid "job. If you specifiy DIGITS, then that job is used. If you specify" -msgstr "job. If you specifiy DIGITS, then that job is used. If you specify" - #: builtins.c:1209 -msgid "WORD, then the job whose name begins with WORD is used. Following the" -msgstr "WORD, then the job whose name begins with WORD is used. Following the" +msgid "job specified by %JOBSPEC. Following the job specification with a `&'" +msgstr "" #: builtins.c:1210 -msgid "job specification with a `&' places the job in the background." +#, fuzzy +msgid "places the job in the background." msgstr "job specification with a ‘&’ places the job in the background." #: builtins.c:1216 @@ -3898,386 +3898,433 @@ msgid "BASH_VERSION Version information for this Bash." msgstr "BASH_VERSION Version information for this Bash." #: builtins.c:1242 -msgid "CDPATH A colon separated list of directories to search" +#, fuzzy +msgid "CDPATH A colon-separated list of directories to search" msgstr "CDPATH A colon separated list of directories to search" #: builtins.c:1243 -msgid "\t\twhen the argument to `cd' is not found in the current" -msgstr "\t\twhen the argument to ‘cd’ is not found in the current" +msgid "\t\tfor directries given as arguments to `cd'." +msgstr "" #: builtins.c:1244 -msgid "\t\tdirectory." -msgstr "\t\tdirectory." - -#: builtins.c:1245 msgid "GLOBIGNORE\tA colon-separated list of patterns describing filenames to" msgstr "GLOBIGNORE\tA colon-separated list of patterns describing filenames to" -#: builtins.c:1246 +#: builtins.c:1245 msgid "\t\tbe ignored by pathname expansion." msgstr "\t\tbe ignored by pathname expansion." -#: builtins.c:1248 +#: builtins.c:1247 msgid "" "HISTFILE The name of the file where your command history is stored." msgstr "" "HISTFILE The name of the file where your command history is stored." -#: builtins.c:1249 +#: builtins.c:1248 msgid "HISTFILESIZE The maximum number of lines this file can contain." msgstr "HISTFILESIZE The maximum number of lines this file can contain." -#: builtins.c:1250 +#: builtins.c:1249 msgid "HISTSIZE The maximum number of history lines that a running" msgstr "HISTSIZE The maximum number of history lines that a running" -#: builtins.c:1251 +#: builtins.c:1250 msgid "\t\tshell can access." msgstr "\t\tshell can access." -#: builtins.c:1253 +#: builtins.c:1252 msgid "HOME The complete pathname to your login directory." msgstr "HOME The complete pathname to your login directory." -#: builtins.c:1254 +#: builtins.c:1253 msgid "HOSTNAME\tThe name of the current host." msgstr "HOSTNAME\tThe name of the current host." -#: builtins.c:1255 +#: builtins.c:1254 msgid "HOSTTYPE The type of CPU this version of Bash is running under." msgstr "HOSTTYPE The type of CPU this version of Bash is running under." -#: builtins.c:1256 +#: builtins.c:1255 msgid "IGNOREEOF Controls the action of the shell on receipt of an EOF" msgstr "IGNOREEOF Controls the action of the shell on receipt of an EOF" -#: builtins.c:1257 +#: builtins.c:1256 msgid "\t\tcharacter as the sole input. If set, then the value" msgstr "\t\tcharacter as the sole input. If set, then the value" -#: builtins.c:1258 +#: builtins.c:1257 msgid "\t\tof it is the number of EOF characters that can be seen" msgstr "\t\tof it is the number of EOF characters that can be seen" -#: builtins.c:1259 +#: builtins.c:1258 msgid "\t\tin a row on an empty line before the shell will exit" msgstr "\t\tin a row on an empty line before the shell will exit" -#: builtins.c:1260 +#: builtins.c:1259 msgid "\t\t(default 10). When unset, EOF signifies the end of input." msgstr "\t\t(default 10). When unset, EOF signifies the end of input." -#: builtins.c:1261 +#: builtins.c:1260 msgid "MACHTYPE\tA string describing the current system Bash is running on." msgstr "MACHTYPE\tA string describing the current system Bash is running on." -#: builtins.c:1262 +#: builtins.c:1261 msgid "MAILCHECK\tHow often, in seconds, Bash checks for new mail." msgstr "MAILCHECK\tHow often, in seconds, Bash checks for new mail." -#: builtins.c:1263 +#: builtins.c:1262 msgid "MAILPATH\tA colon-separated list of filenames which Bash checks" msgstr "MAILPATH\tA colon-separated list of filenames which Bash checks" -#: builtins.c:1264 +#: builtins.c:1263 msgid "\t\tfor new mail." msgstr "\t\tfor new mail." -#: builtins.c:1265 +#: builtins.c:1264 msgid "OSTYPE\t\tThe version of Unix this version of Bash is running on." msgstr "OSTYPE\t\tThe version of Unix this version of Bash is running on." -#: builtins.c:1266 +#: builtins.c:1265 msgid "PATH A colon-separated list of directories to search when" msgstr "PATH A colon-separated list of directories to search when" -#: builtins.c:1267 +#: builtins.c:1266 msgid "\t\tlooking for commands." msgstr "\t\tlooking for commands." -#: builtins.c:1268 +#: builtins.c:1267 msgid "PROMPT_COMMAND A command to be executed before the printing of each" msgstr "PROMPT_COMMAND A command to be executed before the printing of each" -#: builtins.c:1269 +#: builtins.c:1268 msgid "\t\tprimary prompt." msgstr "\t\tprimary prompt." -#: builtins.c:1270 +#: builtins.c:1269 msgid "PS1 The primary prompt string." msgstr "PS1 The primary prompt string." -#: builtins.c:1271 +#: builtins.c:1270 msgid "PS2 The secondary prompt string." msgstr "PS2 The secondary prompt string." -#: builtins.c:1272 +#: builtins.c:1271 msgid "PWD\t\tThe full pathname of the current directory." msgstr "PWD\t\tThe full pathname of the current directory." -#: builtins.c:1273 +#: builtins.c:1272 msgid "SHELLOPTS\tA colon-separated list of enabled shell options." msgstr "SHELLOPTS\tA colon-separated list of enabled shell options." -#: builtins.c:1274 +#: builtins.c:1273 msgid "TERM The name of the current terminal type." msgstr "TERM The name of the current terminal type." -#: builtins.c:1275 +#: builtins.c:1274 msgid "TIMEFORMAT\tThe output format for timing statistics displayed by the" msgstr "TIMEFORMAT\tThe output format for timing statistics displayed by the" -#: builtins.c:1276 +#: builtins.c:1275 msgid "\t\t`time' reserved word." msgstr "\t\t‘time’ reserved word." -#: builtins.c:1277 +#: builtins.c:1276 msgid "auto_resume Non-null means a command word appearing on a line by" msgstr "auto_resume Non-null means a command word appearing on a line by" -#: builtins.c:1278 +#: builtins.c:1277 msgid "\t\titself is first looked for in the list of currently" msgstr "\t\titself is first looked for in the list of currently" -#: builtins.c:1279 +#: builtins.c:1278 msgid "\t\tstopped jobs. If found there, that job is foregrounded." msgstr "\t\tstopped jobs. If found there, that job is foregrounded." -#: builtins.c:1280 +#: builtins.c:1279 msgid "\t\tA value of `exact' means that the command word must" msgstr "\t\tA value of ‘exact’ means that the command word must" -#: builtins.c:1281 +#: builtins.c:1280 msgid "\t\texactly match a command in the list of stopped jobs. A" msgstr "\t\texactly match a command in the list of stopped jobs. A" -#: builtins.c:1282 +#: builtins.c:1281 msgid "\t\tvalue of `substring' means that the command word must" msgstr "\t\tvalue of ‘substring’ means that the command word must" -#: builtins.c:1283 +#: builtins.c:1282 msgid "\t\tmatch a substring of the job. Any other value means that" msgstr "\t\tmatch a substring of the job. Any other value means that" -#: builtins.c:1284 +#: builtins.c:1283 msgid "\t\tthe command must be a prefix of a stopped job." msgstr "\t\tthe command must be a prefix of a stopped job." -#: builtins.c:1287 +#: builtins.c:1286 msgid "histchars Characters controlling history expansion and quick" msgstr "histchars Characters controlling history expansion and quick" -#: builtins.c:1288 +#: builtins.c:1287 msgid "\t\tsubstitution. The first character is the history" msgstr "\t\tsubstitution. The first character is the history" -#: builtins.c:1289 +#: builtins.c:1288 msgid "\t\tsubstitution character, usually `!'. The second is" msgstr "\t\tsubstitution character, usually ‘!’. The second is" -#: builtins.c:1290 +#: builtins.c:1289 msgid "\t\tthe `quick substitution' character, usually `^'. The" msgstr "\t\tthe ‘quick substitution’ character, usually ‘^’. The" -#: builtins.c:1291 +#: builtins.c:1290 msgid "\t\tthird is the `history comment' character, usually `#'." msgstr "\t\tthird is the ‘history comment’ character, usually ‘#’." -#: builtins.c:1293 +#: builtins.c:1292 msgid "HISTIGNORE\tA colon-separated list of patterns used to decide which" msgstr "HISTIGNORE\tA colon-separated list of patterns used to decide which" -#: builtins.c:1294 +#: builtins.c:1293 msgid "\t\tcommands should be saved on the history list." msgstr "\t\tcommands should be saved on the history list." -#: builtins.c:1306 +#: builtins.c:1305 msgid "+N\tRotates the stack so that the Nth directory (counting" msgstr "+N\tRotates the stack so that the Nth directory (counting" -#: builtins.c:1307 +#: builtins.c:1306 msgid "\tfrom the left of the list shown by `dirs', starting with" msgstr "\tfrom the left of the list shown by ‘dirs’, starting with" -#: builtins.c:1308 builtins.c:1312 +#: builtins.c:1307 builtins.c:1311 msgid "\tzero) is at the top." msgstr "\tzero) is at the top." -#: builtins.c:1310 +#: builtins.c:1309 msgid "-N\tRotates the stack so that the Nth directory (counting" msgstr "-N\tRotates the stack so that the Nth directory (counting" -#: builtins.c:1311 +#: builtins.c:1310 msgid "\tfrom the right of the list shown by `dirs', starting with" msgstr "\tfrom the right of the list shown by ‘dirs’, starting with" -#: builtins.c:1314 +#: builtins.c:1313 msgid "-n\tsuppress the normal change of directory when adding directories" msgstr "-n\tsuppress the normal change of directory when adding directories" -#: builtins.c:1315 +#: builtins.c:1314 msgid "\tto the stack, so only the stack is manipulated." msgstr "\tto the stack, so only the stack is manipulated." -#: builtins.c:1317 +#: builtins.c:1316 msgid "dir\tadds DIR to the directory stack at the top, making it the" msgstr "dir\tadds DIR to the directory stack at the top, making it the" -#: builtins.c:1318 +#: builtins.c:1317 msgid "\tnew current working directory." msgstr "\tnew current working directory." -#: builtins.c:1332 +#: builtins.c:1331 msgid "+N\tremoves the Nth entry counting from the left of the list" msgstr "+N\tremoves the Nth entry counting from the left of the list" -#: builtins.c:1333 +#: builtins.c:1332 msgid "\tshown by `dirs', starting with zero. For example: `popd +0'" msgstr "\tshown by ‘dirs’, starting with zero. For example: ‘popd +0’" -#: builtins.c:1334 +#: builtins.c:1333 msgid "\tremoves the first directory, `popd +1' the second." msgstr "\tremoves the first directory, ‘popd +1’ the second." -#: builtins.c:1336 +#: builtins.c:1335 msgid "-N\tremoves the Nth entry counting from the right of the list" msgstr "-N\tremoves the Nth entry counting from the right of the list" -#: builtins.c:1337 +#: builtins.c:1336 msgid "\tshown by `dirs', starting with zero. For example: `popd -0'" msgstr "\tshown by ‘dirs’, starting with zero. For example: ‘popd -0’" -#: builtins.c:1338 +#: builtins.c:1337 msgid "\tremoves the last directory, `popd -1' the next to last." msgstr "\tremoves the last directory, ‘popd -1’ the next to last." -#: builtins.c:1340 +#: builtins.c:1339 msgid "-n\tsuppress the normal change of directory when removing directories" msgstr "-n\tsuppress the normal change of directory when removing directories" -#: builtins.c:1341 +#: builtins.c:1340 msgid "\tfrom the stack, so only the stack is manipulated." msgstr "\tfrom the stack, so only the stack is manipulated." -#: builtins.c:1363 +#: builtins.c:1362 msgid "+N\tdisplays the Nth entry counting from the left of the list shown by" msgstr "+N\tdisplays the Nth entry counting from the left of the list shown by" -#: builtins.c:1364 builtins.c:1367 +#: builtins.c:1363 builtins.c:1366 msgid "\tdirs when invoked without options, starting with zero." msgstr "\tdirs when invoked without options, starting with zero." -#: builtins.c:1366 +#: builtins.c:1365 msgid "-N\tdisplays the Nth entry counting from the right of the list shown by" msgstr "" "-N\tdisplays the Nth entry counting from the right of the list shown by" -#: builtins.c:1374 +#: builtins.c:1373 msgid "Toggle the values of variables controlling optional behavior." msgstr "Toggle the values of variables controlling optional behavior." -#: builtins.c:1375 +#: builtins.c:1374 msgid "The -s flag means to enable (set) each OPTNAME; the -u flag" msgstr "The -s flag means to enable (set) each OPTNAME; the -u flag" -#: builtins.c:1376 +#: builtins.c:1375 msgid "unsets each OPTNAME. The -q flag suppresses output; the exit" msgstr "unsets each OPTNAME. The -q flag suppresses output; the exit" -#: builtins.c:1377 +#: builtins.c:1376 msgid "status indicates whether each OPTNAME is set or unset. The -o" msgstr "status indicates whether each OPTNAME is set or unset. The -o" -#: builtins.c:1378 +#: builtins.c:1377 msgid "option restricts the OPTNAMEs to those defined for use with" msgstr "option restricts the OPTNAMEs to those defined for use with" -#: builtins.c:1379 +#: builtins.c:1378 msgid "`set -o'. With no options, or with the -p option, a list of all" msgstr "‘set -o’. With no options, or with the -p option, a list of all" -#: builtins.c:1380 +#: builtins.c:1379 msgid "settable options is displayed, with an indication of whether or" msgstr "settable options is displayed, with an indication of whether or" -#: builtins.c:1381 +#: builtins.c:1380 msgid "not each is set." msgstr "not each is set." -#: builtins.c:1387 +#: builtins.c:1386 msgid "printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT" msgstr "" "printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT" -#: builtins.c:1388 +#: builtins.c:1387 msgid "is a character string which contains three types of objects: plain" msgstr "is a character string which contains three types of objects: plain" -#: builtins.c:1389 +#: builtins.c:1388 msgid "" "characters, which are simply copied to standard output, character escape" msgstr "" "characters, which are simply copied to standard output, character escape" -#: builtins.c:1390 +#: builtins.c:1389 msgid "sequences which are converted and copied to the standard output, and" msgstr "sequences which are converted and copied to the standard output, and" -#: builtins.c:1391 +#: builtins.c:1390 msgid "" "format specifications, each of which causes printing of the next successive" msgstr "" "format specifications, each of which causes printing of the next successive" -#: builtins.c:1392 +#: builtins.c:1391 msgid "argument. In addition to the standard printf(1) formats, %b means to" msgstr "argument. In addition to the standard printf(1) formats, %b means to" -#: builtins.c:1393 +#: builtins.c:1392 msgid "expand backslash escape sequences in the corresponding argument, and %q" msgstr "" "expand backslash escape sequences in the corresponding argument, and %q" -#: builtins.c:1394 +#: builtins.c:1393 msgid "means to quote the argument in a way that can be reused as shell input." msgstr "" "means to quote the argument in a way that can be reused as shell input." -#: builtins.c:1401 +#: builtins.c:1400 msgid "For each NAME, specify how arguments are to be completed." msgstr "For each NAME, specify how arguments are to be completed." -#: builtins.c:1402 +#: builtins.c:1401 msgid "If the -p option is supplied, or if no options are supplied, existing" msgstr "If the -p option is supplied, or if no options are supplied, existing" -#: builtins.c:1403 +#: builtins.c:1402 msgid "completion specifications are printed in a way that allows them to be" msgstr "completion specifications are printed in a way that allows them to be" -#: builtins.c:1404 +#: builtins.c:1403 msgid "reused as input. The -r option removes a completion specification for" msgstr "reused as input. The -r option removes a completion specification for" -#: builtins.c:1405 +#: builtins.c:1404 msgid "each NAME, or, if no NAMEs are supplied, all completion specifications." msgstr "" "each NAME, or, if no NAMEs are supplied, all completion specifications." -#: builtins.c:1413 +#: builtins.c:1412 msgid "Display the possible completions depending on the options. Intended" msgstr "Display the possible completions depending on the options. Intended" -#: builtins.c:1414 +#: builtins.c:1413 msgid "" "to be used from within a shell function generating possible completions." msgstr "" "to be used from within a shell function generating possible completions." -#: builtins.c:1415 +#: builtins.c:1414 msgid "If the optional WORD argument is supplied, matches against WORD are" msgstr "If the optional WORD argument is supplied, matches against WORD are" -#: builtins.c:1416 +#: builtins.c:1415 msgid "generated." msgstr "generated." + +#~ msgid "`%s': invalid alias name" +#~ msgstr "‘%s’: invalid alias name" + +#~ msgid "reset to their original values. If ARG is the null string each" +#~ msgstr "reset to their original values. If ARG is the null string each" + +#~ msgid "SIGNAL_SPEC is ignored by the shell and by the commands it invokes." +#~ msgstr "SIGNAL_SPEC is ignored by the shell and by the commands it invokes." + +#~ msgid "" +#~ "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from" +#~ msgstr "" +#~ "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from" + +#~ msgid "the shell. If a SIGNAL_SPEC is DEBUG, ARG is executed after every" +#~ msgstr "the shell. If a SIGNAL_SPEC is DEBUG, ARG is executed after every" + +#~ msgid "" +#~ "each signal number. Each SIGNAL_SPEC is either a signal name in " +#~ msgstr "" +#~ "each signal number. Each SIGNAL_SPEC is either a signal name in " + +#~ msgid "" +#~ "or a signal number. `trap -l' prints a list of signal names and their" +#~ msgstr "" +#~ "or a signal number. ‘trap -l’ prints a list of signal names and their" + +#~ msgid "corresponding numbers. Note that a signal can be sent to the shell" +#~ msgstr "corresponding numbers. Note that a signal can be sent to the shell" + +#~ msgid "with \"kill -signal $$\"." +#~ msgstr "with “kill -signal $$”." + +#~ msgid "job. If you specifiy DIGITS, then that job is used. If you specify" +#~ msgstr "" +#~ "job. If you specifiy DIGITS, then that job is used. If you specify" + +#~ msgid "" +#~ "WORD, then the job whose name begins with WORD is used. Following the" +#~ msgstr "" +#~ "WORD, then the job whose name begins with WORD is used. Following the" + +#~ msgid "\t\twhen the argument to `cd' is not found in the current" +#~ msgstr "\t\twhen the argument to ‘cd’ is not found in the current" + +#~ msgid "\t\tdirectory." +#~ msgstr "\t\tdirectory." diff --git a/po/en@quot.po~ b/po/en@quot.po~ new file mode 100644 index 000000000..a560bf6ca --- /dev/null +++ b/po/en@quot.po~ @@ -0,0 +1,4283 @@ +# English translations for GNU bash package. +# Copyright (C) 2004 Free Software Foundation, Inc. +# This file is distributed under the same license as the GNU bash package. +# Automatically generated, 2004. +# +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# +#: builtins/caller.def:128 builtins/caller.def:132 builtins/pushd.def:655 +#: builtins/pushd.def:663 builtins/pushd.def:666 builtins/pushd.def:676 +#: builtins/pushd.def:680 builtins/pushd.def:684 builtins/pushd.def:687 +#: builtins/pushd.def:690 builtins/pushd.def:699 builtins/pushd.def:703 +#: builtins/pushd.def:707 builtins/pushd.def:710 builtins.c:321 builtins.c:325 +#: builtins.c:390 builtins.c:392 builtins.c:401 builtins.c:404 builtins.c:408 +#: builtins.c:445 builtins.c:487 builtins.c:491 builtins.c:498 builtins.c:509 +#: builtins.c:513 builtins.c:552 builtins.c:555 builtins.c:559 builtins.c:562 +#: builtins.c:630 builtins.c:637 builtins.c:692 builtins.c:713 builtins.c:718 +#: builtins.c:722 builtins.c:745 builtins.c:835 builtins.c:919 builtins.c:921 +#: builtins.c:943 builtins.c:946 builtins.c:948 builtins.c:950 builtins.c:952 +#: builtins.c:954 builtins.c:957 builtins.c:966 builtins.c:968 builtins.c:973 +#: builtins.c:976 builtins.c:1019 builtins.c:1024 builtins.c:1028 +#: builtins.c:1032 builtins.c:1034 builtins.c:1047 builtins.c:1062 +#: builtins.c:1226 builtins.c:1231 builtins.c:1305 builtins.c:1309 +#: builtins.c:1313 builtins.c:1316 builtins.c:1319 builtins.c:1331 +#: builtins.c:1335 builtins.c:1339 builtins.c:1342 builtins.c:1354 +#: builtins.c:1362 builtins.c:1365 +msgid "" +msgstr "" +"Project-Id-Version: GNU bash 3.0-rc1\n" +"POT-Creation-Date: 2003-12-22 15:34-0500\n" +"PO-Revision-Date: 2003-12-22 15:34-0500\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Report-Msgid-Bugs-To: bug-bash@gnu.org\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: arrayfunc.c:45 +msgid "bad array subscript" +msgstr "bad array subscript" + +#: arrayfunc.c:306 +#, c-format +msgid "%s: cannot assign to non-numeric index" +msgstr "%s: cannot assign to non-numeric index" + +#: bashhist.c:321 +#, c-format +msgid "%s: cannot create: %s" +msgstr "%s: cannot create: %s" + +#: bashline.c:2791 +msgid "bash_execute_unix_command: cannot find keymap for command" +msgstr "bash_execute_unix_command: cannot find keymap for command" + +#: bashline.c:2840 +#, c-format +msgid "%s: first non-whitespace character is not `\"'" +msgstr "%s: first non-whitespace character is not ‘\"’" + +#: bashline.c:2869 +#, c-format +msgid "no closing `%c' in %s" +msgstr "no closing ‘%c’ in %s" + +#: bashline.c:2903 +#, c-format +msgid "%s: missing colon separator" +msgstr "%s: missing colon separator" + +#: builtins/alias.def:123 +#, c-format +msgid "`%s': invalid alias name" +msgstr "‘%s’: invalid alias name" + +#: builtins/bind.def:194 +#, c-format +msgid "`%s': invalid keymap name" +msgstr "‘%s’: invalid keymap name" + +#: builtins/bind.def:233 +#, c-format +msgid "%s: cannot read: %s" +msgstr "%s: cannot read: %s" + +#: builtins/bind.def:248 +#, c-format +msgid "`%s': cannot unbind" +msgstr "‘%s’: cannot unbind" + +#: builtins/bind.def:283 +#, c-format +msgid "`%s': unknown function name" +msgstr "‘%s’: unknown function name" + +#: builtins/bind.def:291 +#, c-format +msgid "%s is not bound to any keys.\n" +msgstr "%s is not bound to any keys.\n" + +#: builtins/bind.def:295 +#, c-format +msgid "%s can be invoked via " +msgstr "%s can be invoked via " + +#: builtins/break.def:128 +msgid "only meaningful in a `for', `while', or `until' loop" +msgstr "only meaningful in a ‘for’, ‘while’, or ‘until’ loop" + +#: builtins/caller.def:127 builtins.c:320 +msgid "Returns the context of the current subroutine call." +msgstr "Returns the context of the current subroutine call." + +#: builtins/caller.def:129 builtins.c:322 +msgid "Without EXPR, returns returns \"$line $filename\". With EXPR," +msgstr "Without EXPR, returns returns “$line $filename”. With EXPR," + +#: builtins/caller.def:130 builtins.c:323 +msgid "returns \"$line $subroutine $filename\"; this extra information" +msgstr "returns “$line $subroutine $filename”; this extra information" + +#: builtins/caller.def:131 builtins.c:324 +msgid "can be used used to provide a stack trace." +msgstr "can be used used to provide a stack trace." + +#: builtins/caller.def:133 builtins.c:326 +msgid "The value of EXPR indicates how many call frames to go back before the" +msgstr "The value of EXPR indicates how many call frames to go back before the" + +#: builtins/caller.def:134 builtins.c:327 +msgid "current one; the top frame is frame 0." +msgstr "current one; the top frame is frame 0." + +#: builtins/cd.def:188 +msgid "HOME not set" +msgstr "HOME not set" + +#: builtins/cd.def:200 +msgid "OLDPWD not set" +msgstr "OLDPWD not set" + +#: builtins/cd.def:357 +#, c-format +msgid "write error: %s" +msgstr "write error: %s" + +#: builtins/common.c:133 test.c:921 +msgid "too many arguments" +msgstr "too many arguments" + +#: builtins/common.c:157 shell.c:465 shell.c:737 +#, c-format +msgid "%s: option requires an argument" +msgstr "%s: option requires an argument" + +#: builtins/common.c:164 +#, c-format +msgid "%s: numeric argument required" +msgstr "%s: numeric argument required" + +#: builtins/common.c:171 +#, c-format +msgid "%s: not found" +msgstr "%s: not found" + +#: builtins/common.c:180 shell.c:750 +#, c-format +msgid "%s: invalid option" +msgstr "%s: invalid option" + +#: builtins/common.c:187 +#, c-format +msgid "%s: invalid option name" +msgstr "%s: invalid option name" + +#: builtins/common.c:194 general.c:229 general.c:234 +#, c-format +msgid "`%s': not a valid identifier" +msgstr "‘%s’: not a valid identifier" + +#: builtins/common.c:201 +#, c-format +msgid "%s: invalid number" +msgstr "%s: invalid number" + +#: builtins/common.c:208 +#, c-format +msgid "%s: invalid signal specification" +msgstr "%s: invalid signal specification" + +#: builtins/common.c:215 +#, c-format +msgid "`%s': not a pid or valid job spec" +msgstr "‘%s’: not a pid or valid job spec" + +#: builtins/common.c:222 error.c:453 +#, c-format +msgid "%s: readonly variable" +msgstr "%s: readonly variable" + +#: builtins/common.c:230 +#, c-format +msgid "%s: %s out of range" +msgstr "%s: %s out of range" + +#: builtins/common.c:230 builtins/common.c:232 +msgid "argument" +msgstr "argument" + +#: builtins/common.c:232 +#, c-format +msgid "%s out of range" +msgstr "%s out of range" + +#: builtins/common.c:240 +#, c-format +msgid "%s: no such job" +msgstr "%s: no such job" + +#: builtins/common.c:248 +#, c-format +msgid "%s: no job control" +msgstr "%s: no job control" + +#: builtins/common.c:250 +msgid "no job control" +msgstr "no job control" + +#: builtins/common.c:260 +#, c-format +msgid "%s: restricted" +msgstr "%s: restricted" + +#: builtins/common.c:262 +msgid "restricted" +msgstr "restricted" + +#: builtins/common.c:270 +#, c-format +msgid "%s: not a shell builtin" +msgstr "%s: not a shell builtin" + +#: builtins/common.c:486 +#, c-format +msgid "%s: error retrieving current directory: %s: %s\n" +msgstr "%s: error retrieving current directory: %s: %s\n" + +#: builtins/common.c:553 builtins/common.c:555 +#, c-format +msgid "%s: ambiguous job spec" +msgstr "%s: ambiguous job spec" + +#: builtins/complete.def:251 +#, c-format +msgid "%s: invalid action name" +msgstr "%s: invalid action name" + +#: builtins/complete.def:381 builtins/complete.def:524 +#, c-format +msgid "%s: no completion specification" +msgstr "%s: no completion specification" + +#: builtins/complete.def:571 +msgid "warning: -F option may not work as you expect" +msgstr "warning: -F option may not work as you expect" + +#: builtins/complete.def:573 +msgid "warning: -C option may not work as you expect" +msgstr "warning: -C option may not work as you expect" + +#: builtins/declare.def:105 +msgid "can only be used in a function" +msgstr "can only be used in a function" + +#: builtins/declare.def:295 +msgid "cannot use `-f' to make functions" +msgstr "cannot use ‘-f’ to make functions" + +#: builtins/declare.def:307 execute_cmd.c:3949 +#, c-format +msgid "%s: readonly function" +msgstr "%s: readonly function" + +#: builtins/declare.def:389 +#, c-format +msgid "%s: cannot destroy array variables in this way" +msgstr "%s: cannot destroy array variables in this way" + +#: builtins/enable.def:128 builtins/enable.def:136 +msgid "dynamic loading not available" +msgstr "dynamic loading not available" + +#: builtins/enable.def:303 +#, c-format +msgid "cannot open shared object %s: %s" +msgstr "cannot open shared object %s: %s" + +#: builtins/enable.def:326 +#, c-format +msgid "cannot find %s in shared object %s: %s" +msgstr "cannot find %s in shared object %s: %s" + +#: builtins/enable.def:450 +#, c-format +msgid "%s: not dynamically loaded" +msgstr "%s: not dynamically loaded" + +#: builtins/enable.def:465 +#, c-format +msgid "%s: cannot delete: %s" +msgstr "%s: cannot delete: %s" + +#: builtins/evalfile.c:128 execute_cmd.c:3821 shell.c:1395 +#, c-format +msgid "%s: is a directory" +msgstr "%s: is a directory" + +#: builtins/evalfile.c:133 +#, c-format +msgid "%s: not a regular file" +msgstr "%s: not a regular file" + +#: builtins/evalfile.c:141 +#, c-format +msgid "%s: file is too large" +msgstr "%s: file is too large" + +#: builtins/exec.def:205 +#, c-format +msgid "%s: cannot execute: %s" +msgstr "%s: cannot execute: %s" + +#: builtins/exit.def:83 +msgid "not login shell: use `exit'" +msgstr "not login shell: use ‘exit’" + +#: builtins/exit.def:111 +msgid "There are stopped jobs.\n" +msgstr "There are stopped jobs.\n" + +#: builtins/fc.def:252 +msgid "no command found" +msgstr "no command found" + +#: builtins/fc.def:317 +msgid "history specification" +msgstr "history specification" + +#: builtins/fc.def:338 +#, c-format +msgid "%s: cannot open temp file: %s" +msgstr "%s: cannot open temp file: %s" + +#: builtins/fg_bg.def:133 +#, c-format +msgid "job %d started without job control" +msgstr "job %d started without job control" + +#: builtins/getopt.c:109 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: illegal option -- %c\n" + +#: builtins/getopt.c:110 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: option requires an argument -- %c\n" + +#: builtins/hash.def:83 +msgid "hashing disabled" +msgstr "hashing disabled" + +#: builtins/hash.def:128 +#, c-format +msgid "%s: hash table empty\n" +msgstr "%s: hash table empty\n" + +#: builtins/help.def:108 +msgid "Shell commands matching keywords `" +msgstr "Shell commands matching keywords `" + +#: builtins/help.def:110 +msgid "Shell commands matching keyword `" +msgstr "Shell commands matching keyword `" + +#: builtins/help.def:138 +#, c-format +msgid "" +"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgstr "" +"no help topics match ‘%s’. Try ‘help help’ or ‘man -k %s’ or ‘info %s’." + +#: builtins/help.def:164 +#, c-format +msgid "%s: cannot open: %s" +msgstr "%s: cannot open: %s" + +#: builtins/help.def:182 +msgid "" +"These shell commands are defined internally. Type `help' to see this list.\n" +"Type `help name' to find out more about the function `name'.\n" +"Use `info bash' to find out more about the shell in general.\n" +"Use `man -k' or `info' to find out more about commands not in this list.\n" +"\n" +"A star (*) next to a name means that the command is disabled.\n" +"\n" +msgstr "" +"These shell commands are defined internally. Type ‘help’ to see this list.\n" +"Type ‘help name’ to find out more about the function ‘name’.\n" +"Use ‘info bash’ to find out more about the shell in general.\n" +"Use ‘man -k’ or ‘info’ to find out more about commands not in this list.\n" +"\n" +"A star (*) next to a name means that the command is disabled.\n" +"\n" + +#: builtins/history.def:148 +msgid "cannot use more than one of -anrw" +msgstr "cannot use more than one of -anrw" + +#: builtins/history.def:180 +msgid "history position" +msgstr "history position" + +#: builtins/history.def:390 +#, c-format +msgid "%s: history expansion failed" +msgstr "%s: history expansion failed" + +#: builtins/jobs.def:99 +msgid "no other options allowed with `-x'" +msgstr "no other options allowed with ‘-x’" + +#: builtins/kill.def:187 +#, c-format +msgid "%s: arguments must be process or job IDs" +msgstr "%s: arguments must be process or job IDs" + +#: builtins/kill.def:248 +msgid "Unknown error" +msgstr "Unknown error" + +#: builtins/let.def:94 builtins/let.def:119 expr.c:496 expr.c:511 +msgid "expression expected" +msgstr "expression expected" + +#: builtins/printf.def:249 +#, c-format +msgid "`%s': missing format character" +msgstr "‘%s’: missing format character" + +#: builtins/printf.def:408 +#, c-format +msgid "`%c': invalid format character" +msgstr "‘%c’: invalid format character" + +#: builtins/printf.def:601 +msgid "missing hex digit for \\x" +msgstr "missing hex digit for \\x" + +#: builtins/pushd.def:168 +msgid "no other directory" +msgstr "no other directory" + +#: builtins/pushd.def:435 +msgid "" +msgstr "" + +#: builtins/pushd.def:652 builtins.c:1351 +msgid "Display the list of currently remembered directories. Directories" +msgstr "Display the list of currently remembered directories. Directories" + +#: builtins/pushd.def:653 builtins.c:1352 +msgid "find their way onto the list with the `pushd' command; you can get" +msgstr "find their way onto the list with the ‘pushd’ command; you can get" + +#: builtins/pushd.def:654 builtins.c:1353 +msgid "back up through the list with the `popd' command." +msgstr "back up through the list with the ‘popd’ command." + +#: builtins/pushd.def:656 builtins.c:1355 +msgid "The -l flag specifies that `dirs' should not print shorthand versions" +msgstr "The -l flag specifies that ‘dirs’ should not print shorthand versions" + +#: builtins/pushd.def:657 builtins.c:1356 +msgid "of directories which are relative to your home directory. This means" +msgstr "of directories which are relative to your home directory. This means" + +#: builtins/pushd.def:658 builtins.c:1357 +msgid "that `~/bin' might be displayed as `/homes/bfox/bin'. The -v flag" +msgstr "that ‘~/bin’ might be displayed as ‘/homes/bfox/bin’. The -v flag" + +#: builtins/pushd.def:659 builtins.c:1358 +msgid "causes `dirs' to print the directory stack with one entry per line," +msgstr "causes ‘dirs’ to print the directory stack with one entry per line," + +#: builtins/pushd.def:660 builtins.c:1359 +msgid "prepending the directory name with its position in the stack. The -p" +msgstr "prepending the directory name with its position in the stack. The -p" + +#: builtins/pushd.def:661 builtins.c:1360 +msgid "flag does the same thing, but the stack position is not prepended." +msgstr "flag does the same thing, but the stack position is not prepended." + +#: builtins/pushd.def:662 builtins.c:1361 +msgid "The -c flag clears the directory stack by deleting all of the elements." +msgstr "" +"The -c flag clears the directory stack by deleting all of the elements." + +#: builtins/pushd.def:664 +msgid "+N displays the Nth entry counting from the left of the list shown by" +msgstr "" +"+N displays the Nth entry counting from the left of the list shown by" + +#: builtins/pushd.def:665 builtins/pushd.def:668 +msgid " dirs when invoked without options, starting with zero." +msgstr " dirs when invoked without options, starting with zero." + +#: builtins/pushd.def:667 +msgid "" +"-N displays the Nth entry counting from the right of the list shown by" +msgstr "" +"-N displays the Nth entry counting from the right of the list shown by" + +#: builtins/pushd.def:673 builtins.c:1302 +msgid "Adds a directory to the top of the directory stack, or rotates" +msgstr "Adds a directory to the top of the directory stack, or rotates" + +#: builtins/pushd.def:674 builtins.c:1303 +msgid "the stack, making the new top of the stack the current working" +msgstr "the stack, making the new top of the stack the current working" + +#: builtins/pushd.def:675 builtins.c:1304 +msgid "directory. With no arguments, exchanges the top two directories." +msgstr "directory. With no arguments, exchanges the top two directories." + +#: builtins/pushd.def:677 +msgid "+N Rotates the stack so that the Nth directory (counting" +msgstr "+N Rotates the stack so that the Nth directory (counting" + +#: builtins/pushd.def:678 +msgid " from the left of the list shown by `dirs', starting with" +msgstr " from the left of the list shown by ‘dirs’, starting with" + +#: builtins/pushd.def:679 builtins/pushd.def:683 +msgid " zero) is at the top." +msgstr " zero) is at the top." + +#: builtins/pushd.def:681 +msgid "-N Rotates the stack so that the Nth directory (counting" +msgstr "-N Rotates the stack so that the Nth directory (counting" + +#: builtins/pushd.def:682 +msgid " from the right of the list shown by `dirs', starting with" +msgstr " from the right of the list shown by ‘dirs’, starting with" + +#: builtins/pushd.def:685 +msgid "-n suppress the normal change of directory when adding directories" +msgstr "-n suppress the normal change of directory when adding directories" + +#: builtins/pushd.def:686 +msgid " to the stack, so only the stack is manipulated." +msgstr " to the stack, so only the stack is manipulated." + +#: builtins/pushd.def:688 +msgid "dir adds DIR to the directory stack at the top, making it the" +msgstr "dir adds DIR to the directory stack at the top, making it the" + +#: builtins/pushd.def:689 +msgid " new current working directory." +msgstr " new current working directory." + +#: builtins/pushd.def:691 builtins/pushd.def:711 builtins.c:1320 +#: builtins.c:1343 +msgid "You can see the directory stack with the `dirs' command." +msgstr "You can see the directory stack with the ‘dirs’ command." + +#: builtins/pushd.def:696 builtins.c:1328 +msgid "Removes entries from the directory stack. With no arguments," +msgstr "Removes entries from the directory stack. With no arguments," + +#: builtins/pushd.def:697 builtins.c:1329 +msgid "removes the top directory from the stack, and cd's to the new" +msgstr "removes the top directory from the stack, and cd's to the new" + +#: builtins/pushd.def:698 builtins.c:1330 +msgid "top directory." +msgstr "top directory." + +#: builtins/pushd.def:700 +msgid "+N removes the Nth entry counting from the left of the list" +msgstr "+N removes the Nth entry counting from the left of the list" + +#: builtins/pushd.def:701 +msgid " shown by `dirs', starting with zero. For example: `popd +0'" +msgstr " shown by ‘dirs’, starting with zero. For example: ‘popd +0’" + +#: builtins/pushd.def:702 +msgid " removes the first directory, `popd +1' the second." +msgstr " removes the first directory, ‘popd +1’ the second." + +#: builtins/pushd.def:704 +msgid "-N removes the Nth entry counting from the right of the list" +msgstr "-N removes the Nth entry counting from the right of the list" + +#: builtins/pushd.def:705 +msgid " shown by `dirs', starting with zero. For example: `popd -0'" +msgstr " shown by ‘dirs’, starting with zero. For example: ‘popd -0’" + +#: builtins/pushd.def:706 +msgid " removes the last directory, `popd -1' the next to last." +msgstr " removes the last directory, ‘popd -1’ the next to last." + +#: builtins/pushd.def:708 +msgid "-n suppress the normal change of directory when removing directories" +msgstr "-n suppress the normal change of directory when removing directories" + +#: builtins/pushd.def:709 +msgid " from the stack, so only the stack is manipulated." +msgstr " from the stack, so only the stack is manipulated." + +#: builtins/read.def:207 +#, c-format +msgid "%s: invalid timeout specification" +msgstr "%s: invalid timeout specification" + +#: builtins/read.def:230 +#, c-format +msgid "%s: invalid file descriptor specification" +msgstr "%s: invalid file descriptor specification" + +#: builtins/read.def:237 +#, c-format +msgid "%d: invalid file descriptor: %s" +msgstr "%d: invalid file descriptor: %s" + +#: builtins/read.def:463 +#, c-format +msgid "read error: %d: %s" +msgstr "read error: %d: %s" + +#: builtins/return.def:63 +msgid "can only `return' from a function or sourced script" +msgstr "can only ‘return’ from a function or sourced script" + +#: builtins/set.def:743 +msgid "cannot simultaneously unset a function and a variable" +msgstr "cannot simultaneously unset a function and a variable" + +#: builtins/set.def:780 +#, c-format +msgid "%s: cannot unset" +msgstr "%s: cannot unset" + +#: builtins/set.def:787 +#, c-format +msgid "%s: cannot unset: readonly %s" +msgstr "%s: cannot unset: readonly %s" + +#: builtins/set.def:798 +#, c-format +msgid "%s: not an array variable" +msgstr "%s: not an array variable" + +#: builtins/setattr.def:165 +#, c-format +msgid "%s: not a function" +msgstr "%s: not a function" + +#: builtins/shift.def:66 builtins/shift.def:72 +msgid "shift count" +msgstr "shift count" + +#: builtins/shopt.def:226 +msgid "cannot set and unset shell options simultaneously" +msgstr "cannot set and unset shell options simultaneously" + +#: builtins/shopt.def:291 +#, c-format +msgid "%s: invalid shell option name" +msgstr "%s: invalid shell option name" + +#: builtins/source.def:117 +msgid "filename argument required" +msgstr "filename argument required" + +#: builtins/source.def:137 +#, c-format +msgid "%s: file not found" +msgstr "%s: file not found" + +#: builtins/suspend.def:93 +msgid "cannot suspend" +msgstr "cannot suspend" + +#: builtins/suspend.def:103 +msgid "cannot suspend a login shell" +msgstr "cannot suspend a login shell" + +#: builtins/type.def:231 +#, c-format +msgid "%s is aliased to `%s'\n" +msgstr "%s is aliased to ‘%s’\n" + +#: builtins/type.def:252 +#, c-format +msgid "%s is a shell keyword\n" +msgstr "%s is a shell keyword\n" + +#: builtins/type.def:272 +#, c-format +msgid "%s is a function\n" +msgstr "%s is a function\n" + +#: builtins/type.def:297 +#, c-format +msgid "%s is a shell builtin\n" +msgstr "%s is a shell builtin\n" + +#: builtins/type.def:318 +#, c-format +msgid "%s is %s\n" +msgstr "%s is %s\n" + +#: builtins/type.def:338 +#, c-format +msgid "%s is hashed (%s)\n" +msgstr "%s is hashed (%s)\n" + +#: builtins/ulimit.def:332 +#, c-format +msgid "%s: invalid limit argument" +msgstr "%s: invalid limit argument" + +#: builtins/ulimit.def:358 +#, c-format +msgid "`%c': bad command" +msgstr "‘%c’: bad command" + +#: builtins/ulimit.def:387 +#, c-format +msgid "%s: cannot get limit: %s" +msgstr "%s: cannot get limit: %s" + +#: builtins/ulimit.def:425 +#, c-format +msgid "%s: cannot modify limit: %s" +msgstr "%s: cannot modify limit: %s" + +#: builtins/umask.def:112 +msgid "octal number" +msgstr "octal number" + +#: builtins/umask.def:226 +#, c-format +msgid "`%c': invalid symbolic mode operator" +msgstr "‘%c’: invalid symbolic mode operator" + +#: builtins/umask.def:279 +#, c-format +msgid "`%c': invalid symbolic mode character" +msgstr "‘%c’: invalid symbolic mode character" + +#: error.c:165 +#, c-format +msgid "last command: %s\n" +msgstr "last command: %s\n" + +#: error.c:173 +msgid "Aborting..." +msgstr "Aborting..." + +#: error.c:260 +#, c-format +msgid "%s: warning: " +msgstr "%s: warning: " + +#: error.c:405 +msgid "unknown command error" +msgstr "unknown command error" + +#: error.c:406 +msgid "bad command type" +msgstr "bad command type" + +#: error.c:407 +msgid "bad connector" +msgstr "bad connector" + +#: error.c:408 +msgid "bad jump" +msgstr "bad jump" + +#: error.c:446 +#, c-format +msgid "%s: unbound variable" +msgstr "%s: unbound variable" + +#: eval.c:175 +msgid "timed out waiting for input: auto-logout\n" +msgstr "timed out waiting for input: auto-logout\n" + +#: execute_cmd.c:466 +#, c-format +msgid "cannot redirect standard input from /dev/null: %s" +msgstr "cannot redirect standard input from /dev/null: %s" + +#: execute_cmd.c:1036 +#, c-format +msgid "TIMEFORMAT: `%c': invalid format character" +msgstr "TIMEFORMAT: ‘%c’: invalid format character" + +#: execute_cmd.c:3521 +#, c-format +msgid "%s: restricted: cannot specify `/' in command names" +msgstr "%s: restricted: cannot specify ‘/’ in command names" + +#: execute_cmd.c:3609 +#, c-format +msgid "%s: command not found" +msgstr "%s: command not found" + +#: execute_cmd.c:3839 +#, c-format +msgid "%s: %s: bad interpreter" +msgstr "%s: %s: bad interpreter" + +#: execute_cmd.c:3876 +#, c-format +msgid "%s: cannot execute binary file" +msgstr "%s: cannot execute binary file" + +#: execute_cmd.c:3988 +#, c-format +msgid "cannot duplicate fd %d to fd %d" +msgstr "cannot duplicate fd %d to fd %d" + +#: expr.c:239 +msgid "expression recursion level exceeded" +msgstr "expression recursion level exceeded" + +#: expr.c:263 +msgid "recursion stack underflow" +msgstr "recursion stack underflow" + +#: expr.c:374 +msgid "syntax error in expression" +msgstr "syntax error in expression" + +#: expr.c:414 +msgid "attempted assignment to non-variable" +msgstr "attempted assignment to non-variable" + +#: expr.c:435 expr.c:440 expr.c:750 +msgid "division by 0" +msgstr "division by 0" + +#: expr.c:466 +msgid "bug: bad expassign token" +msgstr "bug: bad expassign token" + +#: expr.c:508 +msgid "`:' expected for conditional expression" +msgstr "‘:’ expected for conditional expression" + +#: expr.c:775 +msgid "exponent less than 0" +msgstr "exponent less than 0" + +#: expr.c:819 +msgid "identifier expected after pre-increment or pre-decrement" +msgstr "identifier expected after pre-increment or pre-decrement" + +#: expr.c:847 +msgid "missing `)'" +msgstr "missing ‘)’" + +#: expr.c:871 +msgid "syntax error: operand expected" +msgstr "syntax error: operand expected" + +#: expr.c:1146 +msgid "invalid number" +msgstr "invalid number" + +#: expr.c:1150 +msgid "invalid arithmetic base" +msgstr "invalid arithmetic base" + +#: expr.c:1170 +msgid "value too great for base" +msgstr "value too great for base" + +#: general.c:60 +msgid "getcwd: cannot access parent directories" +msgstr "getcwd: cannot access parent directories" + +#: input.c:231 +#, c-format +msgid "cannot allocate new file descriptor for bash input from fd %d" +msgstr "cannot allocate new file descriptor for bash input from fd %d" + +#: input.c:239 +#, c-format +msgid "save_bash_input: buffer already exists for new fd %d" +msgstr "save_bash_input: buffer already exists for new fd %d" + +#: jobs.c:693 +#, c-format +msgid "deleting stopped job %d with process group %ld" +msgstr "deleting stopped job %d with process group %ld" + +#: jobs.c:1001 +#, c-format +msgid "describe_pid: %ld: no such pid" +msgstr "describe_pid: %ld: no such pid" + +#: jobs.c:1632 nojobs.c:648 +#, c-format +msgid "wait: pid %ld is not a child of this shell" +msgstr "wait: pid %ld is not a child of this shell" + +#: jobs.c:1815 +#, c-format +msgid "wait_for: No record of process %ld" +msgstr "wait_for: No record of process %ld" + +#: jobs.c:2062 +#, c-format +msgid "wait_for_job: job %d is stopped" +msgstr "wait_for_job: job %d is stopped" + +#: jobs.c:2284 +#, c-format +msgid "%s: job has terminated" +msgstr "%s: job has terminated" + +#: jobs.c:2293 +#, c-format +msgid "%s: job %d already in background" +msgstr "%s: job %d already in background" + +#: jobs.c:3037 +msgid "no job control in this shell" +msgstr "no job control in this shell" + +#: lib/malloc/malloc.c:298 +#, c-format +msgid "malloc: failed assertion: %s\n" +msgstr "malloc: failed assertion: %s\n" + +#: lib/malloc/malloc.c:314 +#, c-format +msgid "" +"\r\n" +"malloc: %s:%d: assertion botched\r\n" +msgstr "" +"\r\n" +"malloc: %s:%d: assertion botched\r\n" + +#: lib/malloc/malloc.c:740 +msgid "malloc: block on free list clobbered" +msgstr "malloc: block on free list clobbered" + +#: lib/malloc/malloc.c:817 +msgid "free: called with already freed block argument" +msgstr "free: called with already freed block argument" + +#: lib/malloc/malloc.c:820 +msgid "free: called with unallocated block argument" +msgstr "free: called with unallocated block argument" + +#: lib/malloc/malloc.c:839 +msgid "free: underflow detected; mh_nbytes out of range" +msgstr "free: underflow detected; mh_nbytes out of range" + +#: lib/malloc/malloc.c:845 +msgid "free: start and end chunk sizes differ" +msgstr "free: start and end chunk sizes differ" + +#: lib/malloc/malloc.c:942 +msgid "realloc: called with unallocated block argument" +msgstr "realloc: called with unallocated block argument" + +#: lib/malloc/malloc.c:957 +msgid "realloc: underflow detected; mh_nbytes out of range" +msgstr "realloc: underflow detected; mh_nbytes out of range" + +#: lib/malloc/malloc.c:963 +msgid "realloc: start and end chunk sizes differ" +msgstr "realloc: start and end chunk sizes differ" + +#: lib/malloc/table.c:175 +msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" +msgstr "register_alloc: alloc table is full with FIND_ALLOC?\n" + +#: lib/malloc/table.c:182 +#, c-format +msgid "register_alloc: %p already in table as allocated?\n" +msgstr "register_alloc: %p already in table as allocated?\n" + +#: lib/malloc/table.c:218 +#, c-format +msgid "register_free: %p already in table as free?\n" +msgstr "register_free: %p already in table as free?\n" + +#: lib/malloc/watch.c:46 +msgid "allocated" +msgstr "allocated" + +#: lib/malloc/watch.c:48 +msgid "freed" +msgstr "freed" + +#: lib/malloc/watch.c:50 +msgid "requesting resize" +msgstr "requesting resize" + +#: lib/malloc/watch.c:52 +msgid "just resized" +msgstr "just resized" + +#: lib/malloc/watch.c:54 +msgid "bug: unknown operation" +msgstr "bug: unknown operation" + +#: lib/malloc/watch.c:56 +#, c-format +msgid "malloc: watch alert: %p %s " +msgstr "malloc: watch alert: %p %s " + +#: lib/sh/fmtulong.c:101 +msgid "invalid base" +msgstr "invalid base" + +#: lib/sh/netopen.c:158 +#, c-format +msgid "%s: host unknown" +msgstr "%s: host unknown" + +#: lib/sh/netopen.c:165 +#, c-format +msgid "%s: invalid service" +msgstr "%s: invalid service" + +#: lib/sh/netopen.c:296 +#, c-format +msgid "%s: bad network path specification" +msgstr "%s: bad network path specification" + +#: lib/sh/netopen.c:336 +msgid "network operations not supported" +msgstr "network operations not supported" + +#: mailcheck.c:382 +msgid "You have mail in $_" +msgstr "You have mail in $_" + +#: mailcheck.c:407 +msgid "You have new mail in $_" +msgstr "You have new mail in $_" + +#: mailcheck.c:423 +#, c-format +msgid "The mail in %s has been read\n" +msgstr "The mail in %s has been read\n" + +#: make_cmd.c:318 +msgid "syntax error: arithmetic expression required" +msgstr "syntax error: arithmetic expression required" + +#: make_cmd.c:320 +msgid "syntax error: `;' unexpected" +msgstr "syntax error: ‘;’ unexpected" + +#: make_cmd.c:321 +#, c-format +msgid "syntax error: `((%s))'" +msgstr "syntax error: ‘((%s))’" + +#: make_cmd.c:560 +#, c-format +msgid "make_here_document: bad instruction type %d" +msgstr "make_here_document: bad instruction type %d" + +#: make_cmd.c:730 +#, c-format +msgid "make_redirection: redirection instruction `%d' out of range" +msgstr "make_redirection: redirection instruction ‘%d’ out of range" + +#: parse.y:2726 +#, c-format +msgid "unexpected EOF while looking for matching `%c'" +msgstr "unexpected EOF while looking for matching ‘%c’" + +#: parse.y:3011 +msgid "unexpected EOF while looking for `]]'" +msgstr "unexpected EOF while looking for ‘]]’" + +#: parse.y:3016 +#, c-format +msgid "syntax error in conditional expression: unexpected token `%s'" +msgstr "syntax error in conditional expression: unexpected token ‘%s’" + +#: parse.y:3020 +msgid "syntax error in conditional expression" +msgstr "syntax error in conditional expression" + +#: parse.y:3098 +#, c-format +msgid "unexpected token `%s', expected `)'" +msgstr "unexpected token ‘%s’, expected ‘)’" + +#: parse.y:3102 +msgid "expected `)'" +msgstr "expected ‘)’" + +#: parse.y:3130 +#, c-format +msgid "unexpected argument `%s' to conditional unary operator" +msgstr "unexpected argument ‘%s’ to conditional unary operator" + +#: parse.y:3134 +msgid "unexpected argument to conditional unary operator" +msgstr "unexpected argument to conditional unary operator" + +#: parse.y:3171 +#, c-format +msgid "unexpected token `%s', conditional binary operator expected" +msgstr "unexpected token ‘%s’, conditional binary operator expected" + +#: parse.y:3175 +msgid "conditional binary operator expected" +msgstr "conditional binary operator expected" + +#: parse.y:3191 +#, c-format +msgid "unexpected argument `%s' to conditional binary operator" +msgstr "unexpected argument ‘%s’ to conditional binary operator" + +#: parse.y:3195 +msgid "unexpected argument to conditional binary operator" +msgstr "unexpected argument to conditional binary operator" + +#: parse.y:3206 +#, c-format +msgid "unexpected token `%c' in conditional command" +msgstr "unexpected token ‘%c’ in conditional command" + +#: parse.y:3209 +#, c-format +msgid "unexpected token `%s' in conditional command" +msgstr "unexpected token ‘%s’ in conditional command" + +#: parse.y:3213 +#, c-format +msgid "unexpected token %d in conditional command" +msgstr "unexpected token %d in conditional command" + +#: parse.y:4400 +#, c-format +msgid "syntax error near unexpected token `%s'" +msgstr "syntax error near unexpected token ‘%s’" + +#: parse.y:4418 +#, c-format +msgid "syntax error near `%s'" +msgstr "syntax error near ‘%s’" + +#: parse.y:4428 +msgid "syntax error: unexpected end of file" +msgstr "syntax error: unexpected end of file" + +#: parse.y:4428 +msgid "syntax error" +msgstr "syntax error" + +#: parse.y:4490 +#, c-format +msgid "Use \"%s\" to leave the shell.\n" +msgstr "Use “%s” to leave the shell.\n" + +#: parse.y:4649 +msgid "unexpected EOF while looking for matching `)'" +msgstr "unexpected EOF while looking for matching ‘)’" + +#: pcomplete.c:988 +#, c-format +msgid "completion: function `%s' not found" +msgstr "completion: function ‘%s’ not found" + +#: pcomplib.c:179 +#, c-format +msgid "progcomp_insert: %s: NULL COMPSPEC" +msgstr "progcomp_insert: %s: NULL COMPSPEC" + +#: print_cmd.c:260 +#, c-format +msgid "print_command: bad connector `%d'" +msgstr "print_command: bad connector ‘%d’" + +#: print_cmd.c:1172 +#, c-format +msgid "cprintf: `%c': invalid format character" +msgstr "cprintf: ‘%c’: invalid format character" + +#: redir.c:99 +msgid "file descriptor out of range" +msgstr "file descriptor out of range" + +#: redir.c:141 +#, c-format +msgid "%s: ambiguous redirect" +msgstr "%s: ambiguous redirect" + +#: redir.c:145 +#, c-format +msgid "%s: cannot overwrite existing file" +msgstr "%s: cannot overwrite existing file" + +#: redir.c:150 +#, c-format +msgid "%s: restricted: cannot redirect output" +msgstr "%s: restricted: cannot redirect output" + +#: redir.c:155 +#, c-format +msgid "cannot create temp file for here document: %s" +msgstr "cannot create temp file for here document: %s" + +#: redir.c:509 +msgid "/dev/(tcp|udp)/host/port not supported without networking" +msgstr "/dev/(tcp|udp)/host/port not supported without networking" + +#: redir.c:949 +msgid "redirection error: cannot duplicate fd" +msgstr "redirection error: cannot duplicate fd" + +#: shell.c:302 +msgid "could not find /tmp, please create!" +msgstr "could not find /tmp, please create!" + +#: shell.c:306 +msgid "/tmp must be a valid directory name" +msgstr "/tmp must be a valid directory name" + +#: shell.c:839 +#, c-format +msgid "%c%c: invalid option" +msgstr "%c%c: invalid option" + +#: shell.c:1590 +msgid "I have no name!" +msgstr "I have no name!" + +#: shell.c:1725 +#, c-format +msgid "" +"Usage:\t%s [GNU long option] [option] ...\n" +"\t%s [GNU long option] [option] script-file ...\n" +msgstr "" +"Usage:\t%s [GNU long option] [option] ...\n" +"\t%s [GNU long option] [option] script-file ...\n" + +#: shell.c:1727 +msgid "GNU long options:\n" +msgstr "GNU long options:\n" + +#: shell.c:1731 +msgid "Shell options:\n" +msgstr "Shell options:\n" + +#: shell.c:1732 +msgid "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n" +msgstr "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n" + +#: shell.c:1747 +#, c-format +msgid "\t-%s or -o option\n" +msgstr "\t-%s or -o option\n" + +#: shell.c:1753 +#, c-format +msgid "Type `%s -c \"help set\"' for more information about shell options.\n" +msgstr "Type ‘%s -c “help set”’ for more information about shell options.\n" + +#: shell.c:1754 +#, c-format +msgid "Type `%s -c help' for more information about shell builtin commands.\n" +msgstr "Type ‘%s -c help’ for more information about shell builtin commands.\n" + +#: shell.c:1755 +msgid "Use the `bashbug' command to report bugs.\n" +msgstr "Use the ‘bashbug’ command to report bugs.\n" + +#: sig.c:485 +#, c-format +msgid "sigprocmask: %d: invalid operation" +msgstr "sigprocmask: %d: invalid operation" + +#: subst.c:1011 +#, c-format +msgid "bad substitution: no closing `%s' in %s" +msgstr "bad substitution: no closing ‘%s’ in %s" + +#: subst.c:2020 +#, c-format +msgid "%s: cannot assign list to array member" +msgstr "%s: cannot assign list to array member" + +#: subst.c:3516 subst.c:3532 +msgid "cannot make pipe for process substitution" +msgstr "cannot make pipe for process substitution" + +#: subst.c:3563 +msgid "cannot make child for process substitution" +msgstr "cannot make child for process substitution" + +#: subst.c:3608 +#, c-format +msgid "cannot open named pipe %s for reading" +msgstr "cannot open named pipe %s for reading" + +#: subst.c:3610 +#, c-format +msgid "cannot open named pipe %s for writing" +msgstr "cannot open named pipe %s for writing" + +#: subst.c:3618 +#, c-format +msgid "cannout reset nodelay mode for fd %d" +msgstr "cannout reset nodelay mode for fd %d" + +#: subst.c:3628 +#, c-format +msgid "cannot duplicate named pipe %s as fd %d" +msgstr "cannot duplicate named pipe %s as fd %d" + +#: subst.c:3803 +msgid "cannot make pipe for command substitution" +msgstr "cannot make pipe for command substitution" + +#: subst.c:3832 +msgid "cannot make child for command substitution" +msgstr "cannot make child for command substitution" + +#: subst.c:3849 +msgid "command_substitute: cannot duplicate pipe as fd 1" +msgstr "command_substitute: cannot duplicate pipe as fd 1" + +#: subst.c:4284 +#, c-format +msgid "%s: parameter null or not set" +msgstr "%s: parameter null or not set" + +#: subst.c:4529 +#, c-format +msgid "%s: substring expression < 0" +msgstr "%s: substring expression < 0" + +#: subst.c:5209 +#, c-format +msgid "%s: bad substitution" +msgstr "%s: bad substitution" + +#: subst.c:5283 +#, c-format +msgid "$%s: cannot assign in this way" +msgstr "$%s: cannot assign in this way" + +#: subst.c:6652 +#, c-format +msgid "no match: %s" +msgstr "no match: %s" + +#: test.c:154 +msgid "argument expected" +msgstr "argument expected" + +#: test.c:163 +#, c-format +msgid "%s: integer expression expected" +msgstr "%s: integer expression expected" + +#: test.c:361 +msgid "`)' expected" +msgstr "‘)’ expected" + +#: test.c:363 +#, c-format +msgid "`)' expected, found %s" +msgstr "‘)’ expected, found %s" + +#: test.c:378 test.c:787 test.c:790 +#, c-format +msgid "%s: unary operator expected" +msgstr "%s: unary operator expected" + +#: test.c:543 test.c:830 +#, c-format +msgid "%s: binary operator expected" +msgstr "%s: binary operator expected" + +#: test.c:905 +msgid "missing `]'" +msgstr "missing ‘]’" + +#: trap.c:194 +msgid "invalid signal number" +msgstr "invalid signal number" + +#: trap.c:309 +#, c-format +msgid "run_pending_traps: bad value in trap_list[%d]: %p" +msgstr "run_pending_traps: bad value in trap_list[%d]: %p" + +#: trap.c:313 +#, c-format +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgstr "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" + +#: trap.c:349 +#, c-format +msgid "trap_handler: bad signal %d" +msgstr "trap_handler: bad signal %d" + +#: variables.c:310 +#, c-format +msgid "error importing function definition for `%s'" +msgstr "error importing function definition for ‘%s’" + +#: variables.c:670 +#, c-format +msgid "shell level (%d) too high, resetting to 1" +msgstr "shell level (%d) too high, resetting to 1" + +#: variables.c:1610 +msgid "make_local_variable: no function context at current scope" +msgstr "make_local_variable: no function context at current scope" + +#: variables.c:2709 +msgid "all_local_variables: no function context at current scope" +msgstr "all_local_variables: no function context at current scope" + +#: variables.c:2923 variables.c:2932 +#, c-format +msgid "invalid character %d in exportstr for %s" +msgstr "invalid character %d in exportstr for %s" + +#: variables.c:2938 +#, c-format +msgid "no `=' in exportstr for %s" +msgstr "no ‘=’ in exportstr for %s" + +#: variables.c:3363 +msgid "pop_var_context: head of shell_variables not a function context" +msgstr "pop_var_context: head of shell_variables not a function context" + +#: variables.c:3376 +msgid "pop_var_context: no global_variables context" +msgstr "pop_var_context: no global_variables context" + +#: variables.c:3442 +msgid "pop_scope: head of shell_variables not a temporary environment scope" +msgstr "pop_scope: head of shell_variables not a temporary environment scope" + +#: version.c:82 +msgid "Copyright (C) 2004 Free Software Foundation, Inc.\n" +msgstr "Copyright (C) 2004 Free Software Foundation, Inc.\n" + +#: xmalloc.c:93 +#, c-format +msgid "xmalloc: cannot allocate %lu bytes (%lu bytes allocated)" +msgstr "xmalloc: cannot allocate %lu bytes (%lu bytes allocated)" + +#: xmalloc.c:95 +#, c-format +msgid "xmalloc: cannot allocate %lu bytes" +msgstr "xmalloc: cannot allocate %lu bytes" + +#: xmalloc.c:115 +#, c-format +msgid "xrealloc: cannot reallocate %lu bytes (%lu bytes allocated)" +msgstr "xrealloc: cannot reallocate %lu bytes (%lu bytes allocated)" + +#: xmalloc.c:117 +#, c-format +msgid "xrealloc: cannot allocate %lu bytes" +msgstr "xrealloc: cannot allocate %lu bytes" + +#: xmalloc.c:151 +#, c-format +msgid "xmalloc: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" +msgstr "xmalloc: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" + +#: xmalloc.c:153 +#, c-format +msgid "xmalloc: %s:%d: cannot allocate %lu bytes" +msgstr "xmalloc: %s:%d: cannot allocate %lu bytes" + +#: xmalloc.c:175 +#, c-format +msgid "xrealloc: %s:%d: cannot reallocate %lu bytes (%lu bytes allocated)" +msgstr "xrealloc: %s:%d: cannot reallocate %lu bytes (%lu bytes allocated)" + +#: xmalloc.c:177 +#, c-format +msgid "xrealloc: %s:%d: cannot allocate %lu bytes" +msgstr "xrealloc: %s:%d: cannot allocate %lu bytes" + +#: builtins.c:244 +msgid "`alias' with no arguments or with the -p option prints the list" +msgstr "‘alias’ with no arguments or with the -p option prints the list" + +#: builtins.c:245 +msgid "of aliases in the form alias NAME=VALUE on standard output." +msgstr "of aliases in the form alias NAME=VALUE on standard output." + +#: builtins.c:246 +msgid "Otherwise, an alias is defined for each NAME whose VALUE is given." +msgstr "Otherwise, an alias is defined for each NAME whose VALUE is given." + +#: builtins.c:247 +msgid "A trailing space in VALUE causes the next word to be checked for" +msgstr "A trailing space in VALUE causes the next word to be checked for" + +#: builtins.c:248 +msgid "alias substitution when the alias is expanded. Alias returns" +msgstr "alias substitution when the alias is expanded. Alias returns" + +#: builtins.c:249 +msgid "true unless a NAME is given for which no alias has been defined." +msgstr "true unless a NAME is given for which no alias has been defined." + +#: builtins.c:257 +msgid "" +"Remove NAMEs from the list of defined aliases. If the -a option is given," +msgstr "" +"Remove NAMEs from the list of defined aliases. If the -a option is given," + +#: builtins.c:258 +msgid "then remove all alias definitions." +msgstr "then remove all alias definitions." + +#: builtins.c:266 +msgid "Bind a key sequence to a Readline function or a macro, or set" +msgstr "Bind a key sequence to a Readline function or a macro, or set" + +#: builtins.c:267 +msgid "a Readline variable. The non-option argument syntax is equivalent" +msgstr "a Readline variable. The non-option argument syntax is equivalent" + +#: builtins.c:268 +msgid "to that found in ~/.inputrc, but must be passed as a single argument:" +msgstr "to that found in ~/.inputrc, but must be passed as a single argument:" + +#: builtins.c:269 +msgid "bind '\"\\C-x\\C-r\": re-read-init-file'." +msgstr "bind '“\\C-x\\C-r”: re-read-init-file'." + +#: builtins.c:270 +msgid "bind accepts the following options:" +msgstr "bind accepts the following options:" + +#: builtins.c:271 +msgid "" +" -m keymap Use `keymap' as the keymap for the duration of this" +msgstr "" +" -m keymap Use ‘keymap’ as the keymap for the duration of this" + +#: builtins.c:272 +msgid " command. Acceptable keymap names are emacs," +msgstr " command. Acceptable keymap names are emacs," + +#: builtins.c:273 +msgid "" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move," +msgstr "" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move," + +#: builtins.c:274 +msgid " vi-command, and vi-insert." +msgstr " vi-command, and vi-insert." + +#: builtins.c:275 +msgid " -l List names of functions." +msgstr " -l List names of functions." + +#: builtins.c:276 +msgid " -P List function names and bindings." +msgstr " -P List function names and bindings." + +#: builtins.c:277 +msgid " -p List functions and bindings in a form that can be" +msgstr " -p List functions and bindings in a form that can be" + +#: builtins.c:278 +msgid " reused as input." +msgstr " reused as input." + +#: builtins.c:279 +msgid " -r keyseq Remove the binding for KEYSEQ." +msgstr " -r keyseq Remove the binding for KEYSEQ." + +#: builtins.c:280 +msgid " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when" +msgstr " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when" + +#: builtins.c:281 +msgid "\t\t\t\tKEYSEQ is entered." +msgstr "\t\t\t\tKEYSEQ is entered." + +#: builtins.c:282 +msgid " -f filename Read key bindings from FILENAME." +msgstr " -f filename Read key bindings from FILENAME." + +#: builtins.c:283 +msgid " -q function-name Query about which keys invoke the named function." +msgstr " -q function-name Query about which keys invoke the named function." + +#: builtins.c:284 +msgid "" +" -u function-name Unbind all keys which are bound to the named function." +msgstr "" +" -u function-name Unbind all keys which are bound to the named function." + +#: builtins.c:285 +msgid " -V List variable names and values" +msgstr " -V List variable names and values" + +#: builtins.c:286 +msgid " -v List variable names and values in a form that can" +msgstr " -v List variable names and values in a form that can" + +#: builtins.c:287 +msgid " be reused as input." +msgstr " be reused as input." + +#: builtins.c:288 +msgid "" +" -S List key sequences that invoke macros and their values" +msgstr "" +" -S List key sequences that invoke macros and their values" + +#: builtins.c:289 +msgid "" +" -s List key sequences that invoke macros and their values" +msgstr "" +" -s List key sequences that invoke macros and their values" + +#: builtins.c:290 +msgid " in a form that can be reused as input." +msgstr " in a form that can be reused as input." + +#: builtins.c:297 +msgid "Exit from within a FOR, WHILE or UNTIL loop. If N is specified," +msgstr "Exit from within a FOR, WHILE or UNTIL loop. If N is specified," + +#: builtins.c:298 +msgid "break N levels." +msgstr "break N levels." + +#: builtins.c:304 +msgid "Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop." +msgstr "Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop." + +#: builtins.c:305 +msgid "If N is specified, resume at the N-th enclosing loop." +msgstr "If N is specified, resume at the N-th enclosing loop." + +#: builtins.c:311 +msgid "Run a shell builtin. This is useful when you wish to rename a" +msgstr "Run a shell builtin. This is useful when you wish to rename a" + +#: builtins.c:312 +msgid "shell builtin to be a function, but need the functionality of the" +msgstr "shell builtin to be a function, but need the functionality of the" + +#: builtins.c:313 +msgid "builtin within the function itself." +msgstr "builtin within the function itself." + +#: builtins.c:334 +msgid "Change the current directory to DIR. The variable $HOME is the" +msgstr "Change the current directory to DIR. The variable $HOME is the" + +#: builtins.c:335 +msgid "default DIR. The variable CDPATH defines the search path for" +msgstr "default DIR. The variable CDPATH defines the search path for" + +#: builtins.c:336 +msgid "the directory containing DIR. Alternative directory names in CDPATH" +msgstr "the directory containing DIR. Alternative directory names in CDPATH" + +#: builtins.c:337 +msgid "are separated by a colon (:). A null directory name is the same as" +msgstr "are separated by a colon (:). A null directory name is the same as" + +#: builtins.c:338 +msgid "the current directory, i.e. `.'. If DIR begins with a slash (/)," +msgstr "the current directory, i.e. ‘.’. If DIR begins with a slash (/)," + +#: builtins.c:339 +msgid "then CDPATH is not used. If the directory is not found, and the" +msgstr "then CDPATH is not used. If the directory is not found, and the" + +#: builtins.c:340 +msgid "shell option `cdable_vars' is set, then try the word as a variable" +msgstr "shell option ‘cdable_vars’ is set, then try the word as a variable" + +#: builtins.c:341 +msgid "name. If that variable has a value, then cd to the value of that" +msgstr "name. If that variable has a value, then cd to the value of that" + +#: builtins.c:342 +msgid "variable. The -P option says to use the physical directory structure" +msgstr "variable. The -P option says to use the physical directory structure" + +#: builtins.c:343 +msgid "" +"instead of following symbolic links; the -L option forces symbolic links" +msgstr "" +"instead of following symbolic links; the -L option forces symbolic links" + +#: builtins.c:344 +msgid "to be followed." +msgstr "to be followed." + +#: builtins.c:350 +msgid "Print the current working directory. With the -P option, pwd prints" +msgstr "Print the current working directory. With the -P option, pwd prints" + +#: builtins.c:351 +msgid "the physical directory, without any symbolic links; the -L option" +msgstr "the physical directory, without any symbolic links; the -L option" + +#: builtins.c:352 +msgid "makes pwd follow symbolic links." +msgstr "makes pwd follow symbolic links." + +#: builtins.c:358 +msgid "No effect; the command does nothing. A zero exit code is returned." +msgstr "No effect; the command does nothing. A zero exit code is returned." + +#: builtins.c:364 +msgid "Return a successful result." +msgstr "Return a successful result." + +#: builtins.c:370 +msgid "Return an unsuccessful result." +msgstr "Return an unsuccessful result." + +#: builtins.c:376 +msgid "Runs COMMAND with ARGS ignoring shell functions. If you have a shell" +msgstr "Runs COMMAND with ARGS ignoring shell functions. If you have a shell" + +#: builtins.c:377 +msgid "function called `ls', and you wish to call the command `ls', you can" +msgstr "function called ‘ls’, and you wish to call the command ‘ls’, you can" + +#: builtins.c:378 +msgid "say \"command ls\". If the -p option is given, a default value is used" +msgstr "say “command ls”. If the -p option is given, a default value is used" + +#: builtins.c:379 +msgid "for PATH that is guaranteed to find all of the standard utilities. If" +msgstr "for PATH that is guaranteed to find all of the standard utilities. If" + +#: builtins.c:380 +msgid "the -V or -v option is given, a string is printed describing COMMAND." +msgstr "the -V or -v option is given, a string is printed describing COMMAND." + +#: builtins.c:381 +msgid "The -V option produces a more verbose description." +msgstr "The -V option produces a more verbose description." + +#: builtins.c:387 +msgid "Declare variables and/or give them attributes. If no NAMEs are" +msgstr "Declare variables and/or give them attributes. If no NAMEs are" + +#: builtins.c:388 +msgid "given, then display the values of variables instead. The -p option" +msgstr "given, then display the values of variables instead. The -p option" + +#: builtins.c:389 +msgid "will display the attributes and values of each NAME." +msgstr "will display the attributes and values of each NAME." + +#: builtins.c:391 +msgid "The flags are:" +msgstr "The flags are:" + +#: builtins.c:393 +msgid " -a\tto make NAMEs arrays (if supported)" +msgstr " -a\tto make NAMEs arrays (if supported)" + +#: builtins.c:394 +msgid " -f\tto select from among function names only" +msgstr " -f\tto select from among function names only" + +#: builtins.c:395 +msgid "" +" -F\tto display function names (and line number and source file name if" +msgstr "" +" -F\tto display function names (and line number and source file name if" + +#: builtins.c:396 +msgid "\tdebugging) without definitions" +msgstr "\tdebugging) without definitions" + +#: builtins.c:397 +msgid " -i\tto make NAMEs have the `integer' attribute" +msgstr " -i\tto make NAMEs have the ‘integer’ attribute" + +#: builtins.c:398 +msgid " -r\tto make NAMEs readonly" +msgstr " -r\tto make NAMEs readonly" + +#: builtins.c:399 +msgid " -t\tto make NAMEs have the `trace' attribute" +msgstr " -t\tto make NAMEs have the ‘trace’ attribute" + +#: builtins.c:400 +msgid " -x\tto make NAMEs export" +msgstr " -x\tto make NAMEs export" + +#: builtins.c:402 +msgid "Variables with the integer attribute have arithmetic evaluation (see" +msgstr "Variables with the integer attribute have arithmetic evaluation (see" + +#: builtins.c:403 +msgid "`let') done when the variable is assigned to." +msgstr "‘let’) done when the variable is assigned to." + +#: builtins.c:405 +msgid "When displaying values of variables, -f displays a function's name" +msgstr "When displaying values of variables, -f displays a function's name" + +#: builtins.c:406 +msgid "and definition. The -F option restricts the display to function" +msgstr "and definition. The -F option restricts the display to function" + +#: builtins.c:407 +msgid "name only." +msgstr "name only." + +#: builtins.c:409 +msgid "Using `+' instead of `-' turns off the given attribute instead. When" +msgstr "Using ‘+’ instead of ‘-’ turns off the given attribute instead. When" + +#: builtins.c:410 +msgid "used in a function, makes NAMEs local, as with the `local' command." +msgstr "used in a function, makes NAMEs local, as with the ‘local’ command." + +#: builtins.c:416 +msgid "Obsolete. See `declare'." +msgstr "Obsolete. See ‘declare’." + +#: builtins.c:422 +msgid "Create a local variable called NAME, and give it VALUE. LOCAL" +msgstr "Create a local variable called NAME, and give it VALUE. LOCAL" + +#: builtins.c:423 +msgid "can only be used within a function; it makes the variable NAME" +msgstr "can only be used within a function; it makes the variable NAME" + +#: builtins.c:424 +msgid "have a visible scope restricted to that function and its children." +msgstr "have a visible scope restricted to that function and its children." + +#: builtins.c:431 +msgid "Output the ARGs. If -n is specified, the trailing newline is" +msgstr "Output the ARGs. If -n is specified, the trailing newline is" + +#: builtins.c:432 +msgid "suppressed. If the -e option is given, interpretation of the" +msgstr "suppressed. If the -e option is given, interpretation of the" + +#: builtins.c:433 +msgid "following backslash-escaped characters is turned on:" +msgstr "following backslash-escaped characters is turned on:" + +#: builtins.c:434 +msgid "\t\\a\talert (bell)" +msgstr "\t\\a\talert (bell)" + +#: builtins.c:435 +msgid "\t\\b\tbackspace" +msgstr "\t\\b\tbackspace" + +#: builtins.c:436 +msgid "\t\\c\tsuppress trailing newline" +msgstr "\t\\c\tsuppress trailing newline" + +#: builtins.c:437 +msgid "\t\\E\tescape character" +msgstr "\t\\E\tescape character" + +#: builtins.c:438 +msgid "\t\\f\tform feed" +msgstr "\t\\f\tform feed" + +#: builtins.c:439 +msgid "\t\\n\tnew line" +msgstr "\t\\n\tnew line" + +#: builtins.c:440 +msgid "\t\\r\tcarriage return" +msgstr "\t\\r\tcarriage return" + +#: builtins.c:441 +msgid "\t\\t\thorizontal tab" +msgstr "\t\\t\thorizontal tab" + +#: builtins.c:442 +msgid "\t\\v\tvertical tab" +msgstr "\t\\v\tvertical tab" + +#: builtins.c:443 +msgid "\t\\\\\tbackslash" +msgstr "\t\\\\\tbackslash" + +#: builtins.c:444 +msgid "\t\\num\tthe character whose ASCII code is NUM (octal)." +msgstr "\t\\num\tthe character whose ASCII code is NUM (octal)." + +#: builtins.c:446 +msgid "You can explicitly turn off the interpretation of the above characters" +msgstr "You can explicitly turn off the interpretation of the above characters" + +#: builtins.c:447 +msgid "with the -E option." +msgstr "with the -E option." + +#: builtins.c:455 +msgid "" +"Output the ARGs. If -n is specified, the trailing newline is suppressed." +msgstr "" +"Output the ARGs. If -n is specified, the trailing newline is suppressed." + +#: builtins.c:462 +msgid "Enable and disable builtin shell commands. This allows" +msgstr "Enable and disable builtin shell commands. This allows" + +#: builtins.c:463 +msgid "you to use a disk command which has the same name as a shell" +msgstr "you to use a disk command which has the same name as a shell" + +#: builtins.c:464 +msgid "builtin without specifying a full pathname. If -n is used, the" +msgstr "builtin without specifying a full pathname. If -n is used, the" + +#: builtins.c:465 +msgid "NAMEs become disabled; otherwise NAMEs are enabled. For example," +msgstr "NAMEs become disabled; otherwise NAMEs are enabled. For example," + +#: builtins.c:466 +msgid "to use the `test' found in $PATH instead of the shell builtin" +msgstr "to use the ‘test’ found in $PATH instead of the shell builtin" + +#: builtins.c:467 +msgid "version, type `enable -n test'. On systems supporting dynamic" +msgstr "version, type ‘enable -n test’. On systems supporting dynamic" + +#: builtins.c:468 +msgid "loading, the -f option may be used to load new builtins from the" +msgstr "loading, the -f option may be used to load new builtins from the" + +#: builtins.c:469 +msgid "shared object FILENAME. The -d option will delete a builtin" +msgstr "shared object FILENAME. The -d option will delete a builtin" + +#: builtins.c:470 +msgid "previously loaded with -f. If no non-option names are given, or" +msgstr "previously loaded with -f. If no non-option names are given, or" + +#: builtins.c:471 +msgid "the -p option is supplied, a list of builtins is printed. The" +msgstr "the -p option is supplied, a list of builtins is printed. The" + +#: builtins.c:472 +msgid "-a option means to print every builtin with an indication of whether" +msgstr "-a option means to print every builtin with an indication of whether" + +#: builtins.c:473 +msgid "" +"or not it is enabled. The -s option restricts the output to the POSIX.2" +msgstr "" +"or not it is enabled. The -s option restricts the output to the POSIX.2" + +#: builtins.c:474 +msgid "" +"`special' builtins. The -n option displays a list of all disabled builtins." +msgstr "" +"‘special’ builtins. The -n option displays a list of all disabled builtins." + +#: builtins.c:480 +msgid "Read ARGs as input to the shell and execute the resulting command(s)." +msgstr "Read ARGs as input to the shell and execute the resulting command(s)." + +#: builtins.c:486 +msgid "Getopts is used by shell procedures to parse positional parameters." +msgstr "Getopts is used by shell procedures to parse positional parameters." + +#: builtins.c:488 +msgid "OPTSTRING contains the option letters to be recognized; if a letter" +msgstr "OPTSTRING contains the option letters to be recognized; if a letter" + +#: builtins.c:489 +msgid "is followed by a colon, the option is expected to have an argument," +msgstr "is followed by a colon, the option is expected to have an argument," + +#: builtins.c:490 +msgid "which should be separated from it by white space." +msgstr "which should be separated from it by white space." + +#: builtins.c:492 +msgid "Each time it is invoked, getopts will place the next option in the" +msgstr "Each time it is invoked, getopts will place the next option in the" + +#: builtins.c:493 +msgid "shell variable $name, initializing name if it does not exist, and" +msgstr "shell variable $name, initializing name if it does not exist, and" + +#: builtins.c:494 +msgid "the index of the next argument to be processed into the shell" +msgstr "the index of the next argument to be processed into the shell" + +#: builtins.c:495 +msgid "variable OPTIND. OPTIND is initialized to 1 each time the shell or" +msgstr "variable OPTIND. OPTIND is initialized to 1 each time the shell or" + +#: builtins.c:496 +msgid "a shell script is invoked. When an option requires an argument," +msgstr "a shell script is invoked. When an option requires an argument," + +#: builtins.c:497 +msgid "getopts places that argument into the shell variable OPTARG." +msgstr "getopts places that argument into the shell variable OPTARG." + +#: builtins.c:499 +msgid "getopts reports errors in one of two ways. If the first character" +msgstr "getopts reports errors in one of two ways. If the first character" + +#: builtins.c:500 +msgid "of OPTSTRING is a colon, getopts uses silent error reporting. In" +msgstr "of OPTSTRING is a colon, getopts uses silent error reporting. In" + +#: builtins.c:501 +msgid "this mode, no error messages are printed. If an invalid option is" +msgstr "this mode, no error messages are printed. If an invalid option is" + +#: builtins.c:502 +msgid "seen, getopts places the option character found into OPTARG. If a" +msgstr "seen, getopts places the option character found into OPTARG. If a" + +#: builtins.c:503 +msgid "required argument is not found, getopts places a ':' into NAME and" +msgstr "required argument is not found, getopts places a ‘:’ into NAME and" + +#: builtins.c:504 +msgid "sets OPTARG to the option character found. If getopts is not in" +msgstr "sets OPTARG to the option character found. If getopts is not in" + +#: builtins.c:505 +msgid "silent mode, and an invalid option is seen, getopts places '?' into" +msgstr "silent mode, and an invalid option is seen, getopts places ‘?’ into" + +#: builtins.c:506 +msgid "NAME and unsets OPTARG. If a required argument is not found, a '?'" +msgstr "NAME and unsets OPTARG. If a required argument is not found, a ‘?’" + +#: builtins.c:507 +msgid "is placed in NAME, OPTARG is unset, and a diagnostic message is" +msgstr "is placed in NAME, OPTARG is unset, and a diagnostic message is" + +#: builtins.c:508 +msgid "printed." +msgstr "printed." + +#: builtins.c:510 +msgid "If the shell variable OPTERR has the value 0, getopts disables the" +msgstr "If the shell variable OPTERR has the value 0, getopts disables the" + +#: builtins.c:511 +msgid "printing of error messages, even if the first character of" +msgstr "printing of error messages, even if the first character of" + +#: builtins.c:512 +msgid "OPTSTRING is not a colon. OPTERR has the value 1 by default." +msgstr "OPTSTRING is not a colon. OPTERR has the value 1 by default." + +#: builtins.c:514 +msgid "Getopts normally parses the positional parameters ($0 - $9), but if" +msgstr "Getopts normally parses the positional parameters ($0 - $9), but if" + +#: builtins.c:515 +msgid "more arguments are given, they are parsed instead." +msgstr "more arguments are given, they are parsed instead." + +#: builtins.c:521 +msgid "Exec FILE, replacing this shell with the specified program." +msgstr "Exec FILE, replacing this shell with the specified program." + +#: builtins.c:522 +msgid "If FILE is not specified, the redirections take effect in this" +msgstr "If FILE is not specified, the redirections take effect in this" + +#: builtins.c:523 +msgid "shell. If the first argument is `-l', then place a dash in the" +msgstr "shell. If the first argument is ‘-l’, then place a dash in the" + +#: builtins.c:524 +msgid "zeroth arg passed to FILE, as login does. If the `-c' option" +msgstr "zeroth arg passed to FILE, as login does. If the ‘-c’ option" + +#: builtins.c:525 +msgid "is supplied, FILE is executed with a null environment. The `-a'" +msgstr "is supplied, FILE is executed with a null environment. The ‘-a’" + +#: builtins.c:526 +msgid "option means to make set argv[0] of the executed process to NAME." +msgstr "option means to make set argv[0] of the executed process to NAME." + +#: builtins.c:527 +msgid "If the file cannot be executed and the shell is not interactive," +msgstr "If the file cannot be executed and the shell is not interactive," + +#: builtins.c:528 +msgid "then the shell exits, unless the shell option `execfail' is set." +msgstr "then the shell exits, unless the shell option ‘execfail’ is set." + +#: builtins.c:534 +msgid "Exit the shell with a status of N. If N is omitted, the exit status" +msgstr "Exit the shell with a status of N. If N is omitted, the exit status" + +#: builtins.c:535 +msgid "is that of the last command executed." +msgstr "is that of the last command executed." + +#: builtins.c:541 +msgid "Logout of a login shell." +msgstr "Logout of a login shell." + +#: builtins.c:548 +msgid "" +"fc is used to list or edit and re-execute commands from the history list." +msgstr "" +"fc is used to list or edit and re-execute commands from the history list." + +#: builtins.c:549 +msgid "FIRST and LAST can be numbers specifying the range, or FIRST can be a" +msgstr "FIRST and LAST can be numbers specifying the range, or FIRST can be a" + +#: builtins.c:550 +msgid "string, which means the most recent command beginning with that" +msgstr "string, which means the most recent command beginning with that" + +#: builtins.c:551 +msgid "string." +msgstr "string." + +#: builtins.c:553 +msgid "" +" -e ENAME selects which editor to use. Default is FCEDIT, then EDITOR," +msgstr "" +" -e ENAME selects which editor to use. Default is FCEDIT, then EDITOR," + +#: builtins.c:554 +msgid " then vi." +msgstr " then vi." + +#: builtins.c:556 +msgid " -l means list lines instead of editing." +msgstr " -l means list lines instead of editing." + +#: builtins.c:557 +msgid " -n means no line numbers listed." +msgstr " -n means no line numbers listed." + +#: builtins.c:558 +msgid "" +" -r means reverse the order of the lines (making it newest listed first)." +msgstr "" +" -r means reverse the order of the lines (making it newest listed first)." + +#: builtins.c:560 +msgid "With the `fc -s [pat=rep ...] [command]' format, the command is" +msgstr "With the ‘fc -s [pat=rep ...] [command]’ format, the command is" + +#: builtins.c:561 +msgid "re-executed after the substitution OLD=NEW is performed." +msgstr "re-executed after the substitution OLD=NEW is performed." + +#: builtins.c:563 +msgid "A useful alias to use with this is r='fc -s', so that typing `r cc'" +msgstr "A useful alias to use with this is r='fc -s', so that typing ‘r cc’" + +#: builtins.c:564 +msgid "runs the last command beginning with `cc' and typing `r' re-executes" +msgstr "runs the last command beginning with ‘cc’ and typing ‘r’ re-executes" + +#: builtins.c:565 +msgid "the last command." +msgstr "the last command." + +#: builtins.c:573 +msgid "Place JOB_SPEC in the foreground, and make it the current job. If" +msgstr "Place JOB_SPEC in the foreground, and make it the current job. If" + +#: builtins.c:574 +msgid "JOB_SPEC is not present, the shell's notion of the current job is" +msgstr "JOB_SPEC is not present, the shell's notion of the current job is" + +#: builtins.c:575 +msgid "used." +msgstr "used." + +#: builtins.c:583 +msgid "Place JOB_SPEC in the background, as if it had been started with" +msgstr "Place JOB_SPEC in the background, as if it had been started with" + +#: builtins.c:584 +msgid "`&'. If JOB_SPEC is not present, the shell's notion of the current" +msgstr "‘&’. If JOB_SPEC is not present, the shell's notion of the current" + +#: builtins.c:585 +msgid "job is used." +msgstr "job is used." + +#: builtins.c:592 +msgid "For each NAME, the full pathname of the command is determined and" +msgstr "For each NAME, the full pathname of the command is determined and" + +#: builtins.c:593 +msgid "remembered. If the -p option is supplied, PATHNAME is used as the" +msgstr "remembered. If the -p option is supplied, PATHNAME is used as the" + +#: builtins.c:594 +msgid "full pathname of NAME, and no path search is performed. The -r" +msgstr "full pathname of NAME, and no path search is performed. The -r" + +#: builtins.c:595 +msgid "option causes the shell to forget all remembered locations. The -d" +msgstr "option causes the shell to forget all remembered locations. The -d" + +#: builtins.c:596 +msgid "option causes the shell to forget the remembered location of each NAME." +msgstr "" +"option causes the shell to forget the remembered location of each NAME." + +#: builtins.c:597 +msgid "If the -t option is supplied the full pathname to which each NAME" +msgstr "If the -t option is supplied the full pathname to which each NAME" + +#: builtins.c:598 +msgid "corresponds is printed. If multiple NAME arguments are supplied with" +msgstr "corresponds is printed. If multiple NAME arguments are supplied with" + +#: builtins.c:599 +msgid "-t, the NAME is printed before the hashed full pathname. The -l option" +msgstr "" +"-t, the NAME is printed before the hashed full pathname. The -l option" + +#: builtins.c:600 +msgid "causes output to be displayed in a format that may be reused as input." +msgstr "causes output to be displayed in a format that may be reused as input." + +#: builtins.c:601 +msgid "" +"If no arguments are given, information about remembered commands is " +"displayed." +msgstr "" +"If no arguments are given, information about remembered commands is " +"displayed." + +#: builtins.c:608 +msgid "Display helpful information about builtin commands. If PATTERN is" +msgstr "Display helpful information about builtin commands. If PATTERN is" + +#: builtins.c:609 +msgid "specified, gives detailed help on all commands matching PATTERN," +msgstr "specified, gives detailed help on all commands matching PATTERN," + +#: builtins.c:610 +msgid "otherwise a list of the builtins is printed. The -s option" +msgstr "otherwise a list of the builtins is printed. The -s option" + +#: builtins.c:611 +msgid "restricts the output for each builtin command matching PATTERN to" +msgstr "restricts the output for each builtin command matching PATTERN to" + +#: builtins.c:612 +msgid "a short usage synopsis." +msgstr "a short usage synopsis." + +#: builtins.c:620 +msgid "Display the history list with line numbers. Lines listed with" +msgstr "Display the history list with line numbers. Lines listed with" + +#: builtins.c:621 +msgid "with a `*' have been modified. Argument of N says to list only" +msgstr "with a ‘*’ have been modified. Argument of N says to list only" + +#: builtins.c:622 +msgid "the last N lines. The `-c' option causes the history list to be" +msgstr "the last N lines. The ‘-c’ option causes the history list to be" + +#: builtins.c:623 +msgid "cleared by deleting all of the entries. The `-d' option deletes" +msgstr "cleared by deleting all of the entries. The ‘-d’ option deletes" + +#: builtins.c:624 +msgid "the history entry at offset OFFSET. The `-w' option writes out the" +msgstr "the history entry at offset OFFSET. The ‘-w’ option writes out the" + +#: builtins.c:625 +msgid "current history to the history file; `-r' means to read the file and" +msgstr "current history to the history file; ‘-r’ means to read the file and" + +#: builtins.c:626 +msgid "append the contents to the history list instead. `-a' means" +msgstr "append the contents to the history list instead. ‘-a’ means" + +#: builtins.c:627 +msgid "to append history lines from this session to the history file." +msgstr "to append history lines from this session to the history file." + +#: builtins.c:628 +msgid "Argument `-n' means to read all history lines not already read" +msgstr "Argument ‘-n’ means to read all history lines not already read" + +#: builtins.c:629 +msgid "from the history file and append them to the history list." +msgstr "from the history file and append them to the history list." + +#: builtins.c:631 +msgid "If FILENAME is given, then that is used as the history file else" +msgstr "If FILENAME is given, then that is used as the history file else" + +#: builtins.c:632 +msgid "if $HISTFILE has a value, that is used, else ~/.bash_history." +msgstr "if $HISTFILE has a value, that is used, else ~/.bash_history." + +#: builtins.c:633 +msgid "If the -s option is supplied, the non-option ARGs are appended to" +msgstr "If the -s option is supplied, the non-option ARGs are appended to" + +#: builtins.c:634 +msgid "the history list as a single entry. The -p option means to perform" +msgstr "the history list as a single entry. The -p option means to perform" + +#: builtins.c:635 +msgid "history expansion on each ARG and display the result, without storing" +msgstr "history expansion on each ARG and display the result, without storing" + +#: builtins.c:636 +msgid "anything in the history list." +msgstr "anything in the history list." + +#: builtins.c:638 +msgid "If the $HISTTIMEFORMAT variable is set and not null, its value is used" +msgstr "If the $HISTTIMEFORMAT variable is set and not null, its value is used" + +#: builtins.c:639 +msgid "as a format string for strftime(3) to print the time stamp associated" +msgstr "as a format string for strftime(3) to print the time stamp associated" + +#: builtins.c:640 +msgid "" +"with each displayed history entry. No time stamps are printed otherwise." +msgstr "" +"with each displayed history entry. No time stamps are printed otherwise." + +#: builtins.c:648 +msgid "Lists the active jobs. The -l option lists process id's in addition" +msgstr "Lists the active jobs. The -l option lists process id's in addition" + +#: builtins.c:649 +msgid "to the normal information; the -p option lists process id's only." +msgstr "to the normal information; the -p option lists process id's only." + +#: builtins.c:650 +msgid "If -n is given, only processes that have changed status since the last" +msgstr "If -n is given, only processes that have changed status since the last" + +#: builtins.c:651 +msgid "notification are printed. JOBSPEC restricts output to that job. The" +msgstr "notification are printed. JOBSPEC restricts output to that job. The" + +#: builtins.c:652 +msgid "-r and -s options restrict output to running and stopped jobs only," +msgstr "-r and -s options restrict output to running and stopped jobs only," + +#: builtins.c:653 +msgid "respectively. Without options, the status of all active jobs is" +msgstr "respectively. Without options, the status of all active jobs is" + +#: builtins.c:654 +msgid "printed. If -x is given, COMMAND is run after all job specifications" +msgstr "printed. If -x is given, COMMAND is run after all job specifications" + +#: builtins.c:655 +msgid "" +"that appear in ARGS have been replaced with the process ID of that job's" +msgstr "" +"that appear in ARGS have been replaced with the process ID of that job's" + +#: builtins.c:656 +msgid "process group leader." +msgstr "process group leader." + +#: builtins.c:664 +msgid "" +"By default, removes each JOBSPEC argument from the table of active jobs." +msgstr "" +"By default, removes each JOBSPEC argument from the table of active jobs." + +#: builtins.c:665 +msgid "" +"If the -h option is given, the job is not removed from the table, but is" +msgstr "" +"If the -h option is given, the job is not removed from the table, but is" + +#: builtins.c:666 +msgid "marked so that SIGHUP is not sent to the job if the shell receives a" +msgstr "marked so that SIGHUP is not sent to the job if the shell receives a" + +#: builtins.c:667 +msgid "" +"SIGHUP. The -a option, when JOBSPEC is not supplied, means to remove all" +msgstr "" +"SIGHUP. The -a option, when JOBSPEC is not supplied, means to remove all" + +#: builtins.c:668 +msgid "" +"jobs from the job table; the -r option means to remove only running jobs." +msgstr "" +"jobs from the job table; the -r option means to remove only running jobs." + +#: builtins.c:675 +msgid "Send the processes named by PID (or JOB) the signal SIGSPEC. If" +msgstr "Send the processes named by PID (or JOB) the signal SIGSPEC. If" + +#: builtins.c:676 +msgid "SIGSPEC is not present, then SIGTERM is assumed. An argument of `-l'" +msgstr "SIGSPEC is not present, then SIGTERM is assumed. An argument of ‘-l’" + +#: builtins.c:677 +msgid "lists the signal names; if arguments follow `-l' they are assumed to" +msgstr "lists the signal names; if arguments follow ‘-l’ they are assumed to" + +#: builtins.c:678 +msgid "be signal numbers for which names should be listed. Kill is a shell" +msgstr "be signal numbers for which names should be listed. Kill is a shell" + +#: builtins.c:679 +msgid "builtin for two reasons: it allows job IDs to be used instead of" +msgstr "builtin for two reasons: it allows job IDs to be used instead of" + +#: builtins.c:680 +msgid "process IDs, and, if you have reached the limit on processes that" +msgstr "process IDs, and, if you have reached the limit on processes that" + +#: builtins.c:681 +msgid "you can create, you don't have to start a process to kill another one." +msgstr "you can create, you don't have to start a process to kill another one." + +#: builtins.c:687 +msgid "Each ARG is an arithmetic expression to be evaluated. Evaluation" +msgstr "Each ARG is an arithmetic expression to be evaluated. Evaluation" + +#: builtins.c:688 +msgid "is done in fixed-width integers with no check for overflow, though" +msgstr "is done in fixed-width integers with no check for overflow, though" + +#: builtins.c:689 +msgid "division by 0 is trapped and flagged as an error. The following" +msgstr "division by 0 is trapped and flagged as an error. The following" + +#: builtins.c:690 +msgid "list of operators is grouped into levels of equal-precedence operators." +msgstr "" +"list of operators is grouped into levels of equal-precedence operators." + +#: builtins.c:691 +msgid "The levels are listed in order of decreasing precedence." +msgstr "The levels are listed in order of decreasing precedence." + +#: builtins.c:693 +msgid "\tid++, id--\tvariable post-increment, post-decrement" +msgstr "\tid++, id--\tvariable post-increment, post-decrement" + +#: builtins.c:694 +msgid "\t++id, --id\tvariable pre-increment, pre-decrement" +msgstr "\t++id, --id\tvariable pre-increment, pre-decrement" + +#: builtins.c:695 +msgid "\t-, +\t\tunary minus, plus" +msgstr "\t-, +\t\tunary minus, plus" + +#: builtins.c:696 +msgid "\t!, ~\t\tlogical and bitwise negation" +msgstr "\t!, ~\t\tlogical and bitwise negation" + +#: builtins.c:697 +msgid "\t**\t\texponentiation" +msgstr "\t**\t\texponentiation" + +#: builtins.c:698 +msgid "\t*, /, %\t\tmultiplication, division, remainder" +msgstr "\t*, /, %\t\tmultiplication, division, remainder" + +#: builtins.c:699 +msgid "\t+, -\t\taddition, subtraction" +msgstr "\t+, -\t\taddition, subtraction" + +#: builtins.c:700 +msgid "\t<<, >>\t\tleft and right bitwise shifts" +msgstr "\t<<, >>\t\tleft and right bitwise shifts" + +#: builtins.c:701 +msgid "\t<=, >=, <, >\tcomparison" +msgstr "\t<=, >=, <, >\tcomparison" + +#: builtins.c:702 +msgid "\t==, !=\t\tequality, inequality" +msgstr "\t==, !=\t\tequality, inequality" + +#: builtins.c:703 +msgid "\t&\t\tbitwise AND" +msgstr "\t&\t\tbitwise AND" + +#: builtins.c:704 +msgid "\t^\t\tbitwise XOR" +msgstr "\t^\t\tbitwise XOR" + +#: builtins.c:705 +msgid "\t|\t\tbitwise OR" +msgstr "\t|\t\tbitwise OR" + +#: builtins.c:706 +msgid "\t&&\t\tlogical AND" +msgstr "\t&&\t\tlogical AND" + +#: builtins.c:707 +msgid "\t||\t\tlogical OR" +msgstr "\t||\t\tlogical OR" + +#: builtins.c:708 +msgid "\texpr ? expr : expr" +msgstr "\texpr ? expr : expr" + +#: builtins.c:709 +msgid "\t\t\tconditional operator" +msgstr "\t\t\tconditional operator" + +#: builtins.c:710 +msgid "\t=, *=, /=, %=," +msgstr "\t=, *=, /=, %=," + +#: builtins.c:711 +msgid "\t+=, -=, <<=, >>=," +msgstr "\t+=, -=, <<=, >>=," + +#: builtins.c:712 +msgid "\t&=, ^=, |=\tassignment" +msgstr "\t&=, ^=, |=\tassignment" + +#: builtins.c:714 +msgid "Shell variables are allowed as operands. The name of the variable" +msgstr "Shell variables are allowed as operands. The name of the variable" + +#: builtins.c:715 +msgid "is replaced by its value (coerced to a fixed-width integer) within" +msgstr "is replaced by its value (coerced to a fixed-width integer) within" + +#: builtins.c:716 +msgid "an expression. The variable need not have its integer attribute" +msgstr "an expression. The variable need not have its integer attribute" + +#: builtins.c:717 +msgid "turned on to be used in an expression." +msgstr "turned on to be used in an expression." + +#: builtins.c:719 +msgid "Operators are evaluated in order of precedence. Sub-expressions in" +msgstr "Operators are evaluated in order of precedence. Sub-expressions in" + +#: builtins.c:720 +msgid "parentheses are evaluated first and may override the precedence" +msgstr "parentheses are evaluated first and may override the precedence" + +#: builtins.c:721 +msgid "rules above." +msgstr "rules above." + +#: builtins.c:723 +msgid "If the last ARG evaluates to 0, let returns 1; 0 is returned" +msgstr "If the last ARG evaluates to 0, let returns 1; 0 is returned" + +#: builtins.c:724 +msgid "otherwise." +msgstr "otherwise." + +#: builtins.c:730 +msgid "" +"One line is read from the standard input, or from file descriptor FD if the" +msgstr "" +"One line is read from the standard input, or from file descriptor FD if the" + +#: builtins.c:731 +msgid "" +"-u option is supplied, and the first word is assigned to the first NAME," +msgstr "" +"-u option is supplied, and the first word is assigned to the first NAME," + +#: builtins.c:732 +msgid "" +"the second word to the second NAME, and so on, with leftover words assigned" +msgstr "" +"the second word to the second NAME, and so on, with leftover words assigned" + +#: builtins.c:733 +msgid "" +"to the last NAME. Only the characters found in $IFS are recognized as word" +msgstr "" +"to the last NAME. Only the characters found in $IFS are recognized as word" + +#: builtins.c:734 +msgid "" +"delimiters. If no NAMEs are supplied, the line read is stored in the REPLY" +msgstr "" +"delimiters. If no NAMEs are supplied, the line read is stored in the REPLY" + +#: builtins.c:735 +msgid "variable. If the -r option is given, this signifies `raw' input, and" +msgstr "variable. If the -r option is given, this signifies ‘raw’ input, and" + +#: builtins.c:736 +msgid "backslash escaping is disabled. The -d option causes read to continue" +msgstr "backslash escaping is disabled. The -d option causes read to continue" + +#: builtins.c:737 +msgid "" +"until the first character of DELIM is read, rather than newline. If the -p" +msgstr "" +"until the first character of DELIM is read, rather than newline. If the -p" + +#: builtins.c:738 +msgid "" +"option is supplied, the string PROMPT is output without a trailing newline" +msgstr "" +"option is supplied, the string PROMPT is output without a trailing newline" + +#: builtins.c:739 +msgid "" +"before attempting to read. If -a is supplied, the words read are assigned" +msgstr "" +"before attempting to read. If -a is supplied, the words read are assigned" + +#: builtins.c:740 +msgid "" +"to sequential indices of ARRAY, starting at zero. If -e is supplied and" +msgstr "" +"to sequential indices of ARRAY, starting at zero. If -e is supplied and" + +#: builtins.c:741 +msgid "" +"the shell is interactive, readline is used to obtain the line. If -n is" +msgstr "" +"the shell is interactive, readline is used to obtain the line. If -n is" + +#: builtins.c:742 +msgid "supplied with a non-zero NCHARS argument, read returns after NCHARS" +msgstr "supplied with a non-zero NCHARS argument, read returns after NCHARS" + +#: builtins.c:743 +msgid "characters have been read. The -s option causes input coming from a" +msgstr "characters have been read. The -s option causes input coming from a" + +#: builtins.c:744 +msgid "terminal to not be echoed." +msgstr "terminal to not be echoed." + +#: builtins.c:746 +msgid "" +"The -t option causes read to time out and return failure if a complete line" +msgstr "" +"The -t option causes read to time out and return failure if a complete line" + +#: builtins.c:747 +msgid "" +"of input is not read within TIMEOUT seconds. If the TMOUT variable is set," +msgstr "" +"of input is not read within TIMEOUT seconds. If the TMOUT variable is set," + +#: builtins.c:748 +msgid "" +"its value is the default timeout. The return code is zero, unless end-of-" +"file" +msgstr "" +"its value is the default timeout. The return code is zero, unless end-of-" +"file" + +#: builtins.c:749 +msgid "" +"is encountered, read times out, or an invalid file descriptor is supplied as" +msgstr "" +"is encountered, read times out, or an invalid file descriptor is supplied as" + +#: builtins.c:750 +msgid "the argument to -u." +msgstr "the argument to -u." + +#: builtins.c:756 +msgid "Causes a function to exit with the return value specified by N. If N" +msgstr "Causes a function to exit with the return value specified by N. If N" + +#: builtins.c:757 +msgid "is omitted, the return status is that of the last command." +msgstr "is omitted, the return status is that of the last command." + +#: builtins.c:763 +msgid " -a Mark variables which are modified or created for export." +msgstr " -a Mark variables which are modified or created for export." + +#: builtins.c:764 +msgid " -b Notify of job termination immediately." +msgstr " -b Notify of job termination immediately." + +#: builtins.c:765 +msgid " -e Exit immediately if a command exits with a non-zero status." +msgstr " -e Exit immediately if a command exits with a non-zero status." + +#: builtins.c:766 +msgid " -f Disable file name generation (globbing)." +msgstr " -f Disable file name generation (globbing)." + +#: builtins.c:767 +msgid " -h Remember the location of commands as they are looked up." +msgstr " -h Remember the location of commands as they are looked up." + +#: builtins.c:768 +msgid " -k All assignment arguments are placed in the environment for a" +msgstr " -k All assignment arguments are placed in the environment for a" + +#: builtins.c:769 +msgid " command, not just those that precede the command name." +msgstr " command, not just those that precede the command name." + +#: builtins.c:770 +msgid " -m Job control is enabled." +msgstr " -m Job control is enabled." + +#: builtins.c:771 +msgid " -n Read commands but do not execute them." +msgstr " -n Read commands but do not execute them." + +#: builtins.c:772 +msgid " -o option-name" +msgstr " -o option-name" + +#: builtins.c:773 +msgid " Set the variable corresponding to option-name:" +msgstr " Set the variable corresponding to option-name:" + +#: builtins.c:774 +msgid " allexport same as -a" +msgstr " allexport same as -a" + +#: builtins.c:775 +msgid " braceexpand same as -B" +msgstr " braceexpand same as -B" + +#: builtins.c:777 +msgid " emacs use an emacs-style line editing interface" +msgstr " emacs use an emacs-style line editing interface" + +#: builtins.c:779 +msgid " errexit same as -e" +msgstr " errexit same as -e" + +#: builtins.c:780 +msgid " errtrace same as -E" +msgstr " errtrace same as -E" + +#: builtins.c:781 +msgid " functrace same as -T" +msgstr " functrace same as -T" + +#: builtins.c:782 +msgid " hashall same as -h" +msgstr " hashall same as -h" + +#: builtins.c:784 +msgid " histexpand same as -H" +msgstr " histexpand same as -H" + +#: builtins.c:787 +msgid " history enable command history" +msgstr " history enable command history" + +#: builtins.c:789 +msgid " ignoreeof the shell will not exit upon reading EOF" +msgstr " ignoreeof the shell will not exit upon reading EOF" + +#: builtins.c:790 +msgid " interactive-comments" +msgstr " interactive-comments" + +#: builtins.c:791 +msgid "" +" allow comments to appear in interactive commands" +msgstr "" +" allow comments to appear in interactive commands" + +#: builtins.c:792 +msgid " keyword same as -k" +msgstr " keyword same as -k" + +#: builtins.c:793 +msgid " monitor same as -m" +msgstr " monitor same as -m" + +#: builtins.c:794 +msgid " noclobber same as -C" +msgstr " noclobber same as -C" + +#: builtins.c:795 +msgid " noexec same as -n" +msgstr " noexec same as -n" + +#: builtins.c:796 +msgid " noglob same as -f" +msgstr " noglob same as -f" + +#: builtins.c:797 +msgid " nolog currently accepted but ignored" +msgstr " nolog currently accepted but ignored" + +#: builtins.c:798 +msgid " notify same as -b" +msgstr " notify same as -b" + +#: builtins.c:799 +msgid " nounset same as -u" +msgstr " nounset same as -u" + +#: builtins.c:800 +msgid " onecmd same as -t" +msgstr " onecmd same as -t" + +#: builtins.c:801 +msgid " physical same as -P" +msgstr " physical same as -P" + +#: builtins.c:802 +msgid "" +" pipefail the return value of a pipeline is the status of" +msgstr "" +" pipefail the return value of a pipeline is the status of" + +#: builtins.c:803 +msgid "" +" the last command to exit with a non-zero status," +msgstr "" +" the last command to exit with a non-zero status," + +#: builtins.c:804 +msgid "" +" or zero if no command exited with a non-zero status" +msgstr "" +" or zero if no command exited with a non-zero status" + +#: builtins.c:805 +msgid " posix change the behavior of bash where the default" +msgstr " posix change the behavior of bash where the default" + +#: builtins.c:806 +msgid " operation differs from the 1003.2 standard to" +msgstr " operation differs from the 1003.2 standard to" + +#: builtins.c:807 +msgid " match the standard" +msgstr " match the standard" + +#: builtins.c:808 +msgid " privileged same as -p" +msgstr " privileged same as -p" + +#: builtins.c:809 +msgid " verbose same as -v" +msgstr " verbose same as -v" + +#: builtins.c:811 +msgid " vi use a vi-style line editing interface" +msgstr " vi use a vi-style line editing interface" + +#: builtins.c:813 +msgid " xtrace same as -x" +msgstr " xtrace same as -x" + +#: builtins.c:814 +msgid "" +" -p Turned on whenever the real and effective user ids do not match." +msgstr "" +" -p Turned on whenever the real and effective user ids do not match." + +#: builtins.c:815 +msgid " Disables processing of the $ENV file and importing of shell" +msgstr " Disables processing of the $ENV file and importing of shell" + +#: builtins.c:816 +msgid "" +" functions. Turning this option off causes the effective uid and" +msgstr "" +" functions. Turning this option off causes the effective uid and" + +#: builtins.c:817 +msgid " gid to be set to the real uid and gid." +msgstr " gid to be set to the real uid and gid." + +#: builtins.c:818 +msgid " -t Exit after reading and executing one command." +msgstr " -t Exit after reading and executing one command." + +#: builtins.c:819 +msgid " -u Treat unset variables as an error when substituting." +msgstr " -u Treat unset variables as an error when substituting." + +#: builtins.c:820 +msgid " -v Print shell input lines as they are read." +msgstr " -v Print shell input lines as they are read." + +#: builtins.c:821 +msgid " -x Print commands and their arguments as they are executed." +msgstr " -x Print commands and their arguments as they are executed." + +#: builtins.c:823 +msgid " -B the shell will perform brace expansion" +msgstr " -B the shell will perform brace expansion" + +#: builtins.c:825 +msgid " -C If set, disallow existing regular files to be overwritten" +msgstr " -C If set, disallow existing regular files to be overwritten" + +#: builtins.c:826 +msgid " by redirection of output." +msgstr " by redirection of output." + +#: builtins.c:827 +msgid " -E If set, the ERR trap is inherited by shell functions." +msgstr " -E If set, the ERR trap is inherited by shell functions." + +#: builtins.c:829 +msgid " -H Enable ! style history substitution. This flag is on" +msgstr " -H Enable ! style history substitution. This flag is on" + +#: builtins.c:830 +msgid " by default." +msgstr " by default." + +#: builtins.c:832 +msgid " -P If set, do not follow symbolic links when executing commands" +msgstr " -P If set, do not follow symbolic links when executing commands" + +#: builtins.c:833 +msgid " such as cd which change the current directory." +msgstr " such as cd which change the current directory." + +#: builtins.c:834 +msgid " -T If set, the DEBUG trap is inherited by shell functions." +msgstr " -T If set, the DEBUG trap is inherited by shell functions." + +#: builtins.c:836 +msgid "Using + rather than - causes these flags to be turned off. The" +msgstr "Using + rather than - causes these flags to be turned off. The" + +#: builtins.c:837 +msgid "flags can also be used upon invocation of the shell. The current" +msgstr "flags can also be used upon invocation of the shell. The current" + +#: builtins.c:838 +msgid "set of flags may be found in $-. The remaining n ARGs are positional" +msgstr "set of flags may be found in $-. The remaining n ARGs are positional" + +#: builtins.c:839 +msgid "parameters and are assigned, in order, to $1, $2, .. $n. If no" +msgstr "parameters and are assigned, in order, to $1, $2, .. $n. If no" + +#: builtins.c:840 +msgid "ARGs are given, all shell variables are printed." +msgstr "ARGs are given, all shell variables are printed." + +#: builtins.c:846 +msgid "For each NAME, remove the corresponding variable or function. Given" +msgstr "For each NAME, remove the corresponding variable or function. Given" + +#: builtins.c:847 +msgid "the `-v', unset will only act on variables. Given the `-f' flag," +msgstr "the ‘-v’, unset will only act on variables. Given the ‘-f’ flag," + +#: builtins.c:848 +msgid "unset will only act on functions. With neither flag, unset first" +msgstr "unset will only act on functions. With neither flag, unset first" + +#: builtins.c:849 +msgid "tries to unset a variable, and if that fails, then tries to unset a" +msgstr "tries to unset a variable, and if that fails, then tries to unset a" + +#: builtins.c:850 +msgid "function. Some variables cannot be unset; also see readonly." +msgstr "function. Some variables cannot be unset; also see readonly." + +#: builtins.c:856 +msgid "NAMEs are marked for automatic export to the environment of" +msgstr "NAMEs are marked for automatic export to the environment of" + +#: builtins.c:857 +msgid "subsequently executed commands. If the -f option is given," +msgstr "subsequently executed commands. If the -f option is given," + +#: builtins.c:858 +msgid "the NAMEs refer to functions. If no NAMEs are given, or if `-p'" +msgstr "the NAMEs refer to functions. If no NAMEs are given, or if ‘-p’" + +#: builtins.c:859 +msgid "is given, a list of all names that are exported in this shell is" +msgstr "is given, a list of all names that are exported in this shell is" + +#: builtins.c:860 +msgid "printed. An argument of `-n' says to remove the export property" +msgstr "printed. An argument of ‘-n’ says to remove the export property" + +#: builtins.c:861 +msgid "from subsequent NAMEs. An argument of `--' disables further option" +msgstr "from subsequent NAMEs. An argument of ‘--’ disables further option" + +#: builtins.c:862 builtins.c:874 +msgid "processing." +msgstr "processing." + +#: builtins.c:868 +msgid "The given NAMEs are marked readonly and the values of these NAMEs may" +msgstr "The given NAMEs are marked readonly and the values of these NAMEs may" + +#: builtins.c:869 +msgid "not be changed by subsequent assignment. If the -f option is given," +msgstr "not be changed by subsequent assignment. If the -f option is given," + +#: builtins.c:870 +msgid "then functions corresponding to the NAMEs are so marked. If no" +msgstr "then functions corresponding to the NAMEs are so marked. If no" + +#: builtins.c:871 +msgid "arguments are given, or if `-p' is given, a list of all readonly names" +msgstr "arguments are given, or if ‘-p’ is given, a list of all readonly names" + +#: builtins.c:872 +msgid "is printed. The `-a' option means to treat each NAME as" +msgstr "is printed. The ‘-a’ option means to treat each NAME as" + +#: builtins.c:873 +msgid "an array variable. An argument of `--' disables further option" +msgstr "an array variable. An argument of ‘--’ disables further option" + +#: builtins.c:880 +msgid "The positional parameters from $N+1 ... are renamed to $1 ... If N is" +msgstr "The positional parameters from $N+1 ... are renamed to $1 ... If N is" + +#: builtins.c:881 +msgid "not given, it is assumed to be 1." +msgstr "not given, it is assumed to be 1." + +#: builtins.c:887 builtins.c:896 +msgid "Read and execute commands from FILENAME and return. The pathnames" +msgstr "Read and execute commands from FILENAME and return. The pathnames" + +#: builtins.c:888 builtins.c:897 +msgid "in $PATH are used to find the directory containing FILENAME. If any" +msgstr "in $PATH are used to find the directory containing FILENAME. If any" + +#: builtins.c:889 builtins.c:898 +msgid "ARGUMENTS are supplied, they become the positional parameters when" +msgstr "ARGUMENTS are supplied, they become the positional parameters when" + +#: builtins.c:890 builtins.c:899 +msgid "FILENAME is executed." +msgstr "FILENAME is executed." + +#: builtins.c:906 +msgid "Suspend the execution of this shell until it receives a SIGCONT" +msgstr "Suspend the execution of this shell until it receives a SIGCONT" + +#: builtins.c:907 +msgid "signal. The `-f' if specified says not to complain about this" +msgstr "signal. The ‘-f’ if specified says not to complain about this" + +#: builtins.c:908 +msgid "being a login shell if it is; just suspend anyway." +msgstr "being a login shell if it is; just suspend anyway." + +#: builtins.c:915 +msgid "Exits with a status of 0 (true) or 1 (false) depending on" +msgstr "Exits with a status of 0 (true) or 1 (false) depending on" + +#: builtins.c:916 +msgid "the evaluation of EXPR. Expressions may be unary or binary. Unary" +msgstr "the evaluation of EXPR. Expressions may be unary or binary. Unary" + +#: builtins.c:917 +msgid "expressions are often used to examine the status of a file. There" +msgstr "expressions are often used to examine the status of a file. There" + +#: builtins.c:918 +msgid "are string operators as well, and numeric comparison operators." +msgstr "are string operators as well, and numeric comparison operators." + +#: builtins.c:920 +msgid "File operators:" +msgstr "File operators:" + +#: builtins.c:922 +msgid " -a FILE True if file exists." +msgstr " -a FILE True if file exists." + +#: builtins.c:923 +msgid " -b FILE True if file is block special." +msgstr " -b FILE True if file is block special." + +#: builtins.c:924 +msgid " -c FILE True if file is character special." +msgstr " -c FILE True if file is character special." + +#: builtins.c:925 +msgid " -d FILE True if file is a directory." +msgstr " -d FILE True if file is a directory." + +#: builtins.c:926 +msgid " -e FILE True if file exists." +msgstr " -e FILE True if file exists." + +#: builtins.c:927 +msgid " -f FILE True if file exists and is a regular file." +msgstr " -f FILE True if file exists and is a regular file." + +#: builtins.c:928 +msgid " -g FILE True if file is set-group-id." +msgstr " -g FILE True if file is set-group-id." + +#: builtins.c:929 +msgid " -h FILE True if file is a symbolic link." +msgstr " -h FILE True if file is a symbolic link." + +#: builtins.c:930 +msgid " -L FILE True if file is a symbolic link." +msgstr " -L FILE True if file is a symbolic link." + +#: builtins.c:931 +msgid " -k FILE True if file has its `sticky' bit set." +msgstr " -k FILE True if file has its ‘sticky’ bit set." + +#: builtins.c:932 +msgid " -p FILE True if file is a named pipe." +msgstr " -p FILE True if file is a named pipe." + +#: builtins.c:933 +msgid " -r FILE True if file is readable by you." +msgstr " -r FILE True if file is readable by you." + +#: builtins.c:934 +msgid " -s FILE True if file exists and is not empty." +msgstr " -s FILE True if file exists and is not empty." + +#: builtins.c:935 +msgid " -S FILE True if file is a socket." +msgstr " -S FILE True if file is a socket." + +#: builtins.c:936 +msgid " -t FD True if FD is opened on a terminal." +msgstr " -t FD True if FD is opened on a terminal." + +#: builtins.c:937 +msgid " -u FILE True if the file is set-user-id." +msgstr " -u FILE True if the file is set-user-id." + +#: builtins.c:938 +msgid " -w FILE True if the file is writable by you." +msgstr " -w FILE True if the file is writable by you." + +#: builtins.c:939 +msgid " -x FILE True if the file is executable by you." +msgstr " -x FILE True if the file is executable by you." + +#: builtins.c:940 +msgid " -O FILE True if the file is effectively owned by you." +msgstr " -O FILE True if the file is effectively owned by you." + +#: builtins.c:941 +msgid " -G FILE True if the file is effectively owned by your group." +msgstr "" +" -G FILE True if the file is effectively owned by your group." + +#: builtins.c:942 +msgid "" +" -N FILE True if the file has been modified since it was last read." +msgstr "" +" -N FILE True if the file has been modified since it was last read." + +#: builtins.c:944 +msgid " FILE1 -nt FILE2 True if file1 is newer than file2 (according to" +msgstr " FILE1 -nt FILE2 True if file1 is newer than file2 (according to" + +#: builtins.c:945 +msgid " modification date)." +msgstr " modification date)." + +#: builtins.c:947 +msgid " FILE1 -ot FILE2 True if file1 is older than file2." +msgstr " FILE1 -ot FILE2 True if file1 is older than file2." + +#: builtins.c:949 +msgid " FILE1 -ef FILE2 True if file1 is a hard link to file2." +msgstr " FILE1 -ef FILE2 True if file1 is a hard link to file2." + +#: builtins.c:951 +msgid "String operators:" +msgstr "String operators:" + +#: builtins.c:953 +msgid " -z STRING True if string is empty." +msgstr " -z STRING True if string is empty." + +#: builtins.c:955 +msgid " -n STRING" +msgstr " -n STRING" + +#: builtins.c:956 +msgid " STRING True if string is not empty." +msgstr " STRING True if string is not empty." + +#: builtins.c:958 +msgid " STRING1 = STRING2" +msgstr " STRING1 = STRING2" + +#: builtins.c:959 +msgid " True if the strings are equal." +msgstr " True if the strings are equal." + +#: builtins.c:960 +msgid " STRING1 != STRING2" +msgstr " STRING1 != STRING2" + +#: builtins.c:961 +msgid " True if the strings are not equal." +msgstr " True if the strings are not equal." + +#: builtins.c:962 +msgid " STRING1 < STRING2" +msgstr " STRING1 < STRING2" + +#: builtins.c:963 +msgid "" +" True if STRING1 sorts before STRING2 lexicographically." +msgstr "" +" True if STRING1 sorts before STRING2 lexicographically." + +#: builtins.c:964 +msgid " STRING1 > STRING2" +msgstr " STRING1 > STRING2" + +#: builtins.c:965 +msgid "" +" True if STRING1 sorts after STRING2 lexicographically." +msgstr "" +" True if STRING1 sorts after STRING2 lexicographically." + +#: builtins.c:967 +msgid "Other operators:" +msgstr "Other operators:" + +#: builtins.c:969 +msgid " -o OPTION True if the shell option OPTION is enabled." +msgstr " -o OPTION True if the shell option OPTION is enabled." + +#: builtins.c:970 +msgid " ! EXPR True if expr is false." +msgstr " ! EXPR True if expr is false." + +#: builtins.c:971 +msgid " EXPR1 -a EXPR2 True if both expr1 AND expr2 are true." +msgstr " EXPR1 -a EXPR2 True if both expr1 AND expr2 are true." + +#: builtins.c:972 +msgid " EXPR1 -o EXPR2 True if either expr1 OR expr2 is true." +msgstr " EXPR1 -o EXPR2 True if either expr1 OR expr2 is true." + +#: builtins.c:974 +msgid " arg1 OP arg2 Arithmetic tests. OP is one of -eq, -ne," +msgstr " arg1 OP arg2 Arithmetic tests. OP is one of -eq, -ne," + +#: builtins.c:975 +msgid " -lt, -le, -gt, or -ge." +msgstr " -lt, -le, -gt, or -ge." + +#: builtins.c:977 +msgid "Arithmetic binary operators return true if ARG1 is equal, not-equal," +msgstr "Arithmetic binary operators return true if ARG1 is equal, not-equal," + +#: builtins.c:978 +msgid "less-than, less-than-or-equal, greater-than, or greater-than-or-equal" +msgstr "less-than, less-than-or-equal, greater-than, or greater-than-or-equal" + +#: builtins.c:979 +msgid "than ARG2." +msgstr "than ARG2." + +#: builtins.c:985 +msgid "This is a synonym for the \"test\" builtin, but the last" +msgstr "This is a synonym for the “test” builtin, but the last" + +#: builtins.c:986 +msgid "argument must be a literal `]', to match the opening `['." +msgstr "argument must be a literal ‘]’, to match the opening ‘[’." + +#: builtins.c:992 +msgid "Print the accumulated user and system times for processes run from" +msgstr "Print the accumulated user and system times for processes run from" + +#: builtins.c:993 +msgid "the shell." +msgstr "the shell." + +#: builtins.c:999 +msgid "The command ARG is to be read and executed when the shell receives" +msgstr "The command ARG is to be read and executed when the shell receives" + +#: builtins.c:1000 +msgid "signal(s) SIGNAL_SPEC. If ARG is absent all specified signals are" +msgstr "signal(s) SIGNAL_SPEC. If ARG is absent all specified signals are" + +#: builtins.c:1001 +msgid "reset to their original values. If ARG is the null string each" +msgstr "reset to their original values. If ARG is the null string each" + +#: builtins.c:1002 +msgid "SIGNAL_SPEC is ignored by the shell and by the commands it invokes." +msgstr "SIGNAL_SPEC is ignored by the shell and by the commands it invokes." + +#: builtins.c:1003 +msgid "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from" +msgstr "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from" + +#: builtins.c:1004 +msgid "the shell. If a SIGNAL_SPEC is DEBUG, ARG is executed after every" +msgstr "the shell. If a SIGNAL_SPEC is DEBUG, ARG is executed after every" + +#: builtins.c:1005 +msgid "command. If ARG is `-p' then the trap commands associated with" +msgstr "command. If ARG is ‘-p’ then the trap commands associated with" + +#: builtins.c:1006 +msgid "each SIGNAL_SPEC are displayed. If no arguments are supplied or if" +msgstr "each SIGNAL_SPEC are displayed. If no arguments are supplied or if" + +#: builtins.c:1007 +msgid "only `-p' is given, trap prints the list of commands associated with" +msgstr "only ‘-p’ is given, trap prints the list of commands associated with" + +#: builtins.c:1008 +msgid "" +"each signal number. Each SIGNAL_SPEC is either a signal name in " +msgstr "" +"each signal number. Each SIGNAL_SPEC is either a signal name in " + +#: builtins.c:1009 +msgid "or a signal number. `trap -l' prints a list of signal names and their" +msgstr "or a signal number. ‘trap -l’ prints a list of signal names and their" + +#: builtins.c:1010 +msgid "corresponding numbers. Note that a signal can be sent to the shell" +msgstr "corresponding numbers. Note that a signal can be sent to the shell" + +#: builtins.c:1011 +msgid "with \"kill -signal $$\"." +msgstr "with “kill -signal $$”." + +#: builtins.c:1017 +msgid "For each NAME, indicate how it would be interpreted if used as a" +msgstr "For each NAME, indicate how it would be interpreted if used as a" + +#: builtins.c:1018 +msgid "command name." +msgstr "command name." + +#: builtins.c:1020 +msgid "If the -t option is used, `type' outputs a single word which is one of" +msgstr "If the -t option is used, ‘type’ outputs a single word which is one of" + +#: builtins.c:1021 +msgid "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an" +msgstr "‘alias’, ‘keyword’, ‘function’, ‘builtin’, ‘file’ or ‘’, if NAME is an" + +#: builtins.c:1022 +msgid "alias, shell reserved word, shell function, shell builtin, disk file," +msgstr "alias, shell reserved word, shell function, shell builtin, disk file," + +#: builtins.c:1023 +msgid "or unfound, respectively." +msgstr "or unfound, respectively." + +#: builtins.c:1025 +msgid "If the -p flag is used, `type' either returns the name of the disk" +msgstr "If the -p flag is used, ‘type’ either returns the name of the disk" + +#: builtins.c:1026 +msgid "file that would be executed, or nothing if `type -t NAME' would not" +msgstr "file that would be executed, or nothing if ‘type -t NAME’ would not" + +#: builtins.c:1027 +msgid "return `file'." +msgstr "return ‘file’." + +#: builtins.c:1029 +msgid "If the -a flag is used, `type' displays all of the places that contain" +msgstr "If the -a flag is used, ‘type’ displays all of the places that contain" + +#: builtins.c:1030 +msgid "an executable named `file'. This includes aliases, builtins, and" +msgstr "an executable named ‘file’. This includes aliases, builtins, and" + +#: builtins.c:1031 +msgid "functions, if and only if the -p flag is not also used." +msgstr "functions, if and only if the -p flag is not also used." + +#: builtins.c:1033 +msgid "The -f flag suppresses shell function lookup." +msgstr "The -f flag suppresses shell function lookup." + +#: builtins.c:1035 +msgid "The -P flag forces a PATH search for each NAME, even if it is an alias," +msgstr "" +"The -P flag forces a PATH search for each NAME, even if it is an alias," + +#: builtins.c:1036 +msgid "builtin, or function, and returns the name of the disk file that would" +msgstr "builtin, or function, and returns the name of the disk file that would" + +#: builtins.c:1037 +msgid "be executed." +msgstr "be executed." + +#: builtins.c:1044 +msgid "Ulimit provides control over the resources available to processes" +msgstr "Ulimit provides control over the resources available to processes" + +#: builtins.c:1045 +msgid "started by the shell, on systems that allow such control. If an" +msgstr "started by the shell, on systems that allow such control. If an" + +#: builtins.c:1046 +msgid "option is given, it is interpreted as follows:" +msgstr "option is given, it is interpreted as follows:" + +#: builtins.c:1048 +msgid " -S\tuse the `soft' resource limit" +msgstr " -S\tuse the ‘soft’ resource limit" + +#: builtins.c:1049 +msgid " -H\tuse the `hard' resource limit" +msgstr " -H\tuse the ‘hard’ resource limit" + +#: builtins.c:1050 +msgid " -a\tall current limits are reported" +msgstr " -a\tall current limits are reported" + +#: builtins.c:1051 +msgid " -c\tthe maximum size of core files created" +msgstr " -c\tthe maximum size of core files created" + +#: builtins.c:1052 +msgid " -d\tthe maximum size of a process's data segment" +msgstr " -d\tthe maximum size of a process's data segment" + +#: builtins.c:1053 +msgid " -f\tthe maximum size of files created by the shell" +msgstr " -f\tthe maximum size of files created by the shell" + +#: builtins.c:1054 +msgid " -l\tthe maximum size a process may lock into memory" +msgstr " -l\tthe maximum size a process may lock into memory" + +#: builtins.c:1055 +msgid " -m\tthe maximum resident set size" +msgstr " -m\tthe maximum resident set size" + +#: builtins.c:1056 +msgid " -n\tthe maximum number of open file descriptors" +msgstr " -n\tthe maximum number of open file descriptors" + +#: builtins.c:1057 +msgid " -p\tthe pipe buffer size" +msgstr " -p\tthe pipe buffer size" + +#: builtins.c:1058 +msgid " -s\tthe maximum stack size" +msgstr " -s\tthe maximum stack size" + +#: builtins.c:1059 +msgid " -t\tthe maximum amount of cpu time in seconds" +msgstr " -t\tthe maximum amount of cpu time in seconds" + +#: builtins.c:1060 +msgid " -u\tthe maximum number of user processes" +msgstr " -u\tthe maximum number of user processes" + +#: builtins.c:1061 +msgid " -v\tthe size of virtual memory" +msgstr " -v\tthe size of virtual memory" + +#: builtins.c:1063 +msgid "If LIMIT is given, it is the new value of the specified resource;" +msgstr "If LIMIT is given, it is the new value of the specified resource;" + +#: builtins.c:1064 +msgid "the special LIMIT values `soft', `hard', and `unlimited' stand for" +msgstr "the special LIMIT values ‘soft’, ‘hard’, and ‘unlimited’ stand for" + +#: builtins.c:1065 +msgid "" +"the current soft limit, the current hard limit, and no limit, respectively." +msgstr "" +"the current soft limit, the current hard limit, and no limit, respectively." + +#: builtins.c:1066 +msgid "Otherwise, the current value of the specified resource is printed." +msgstr "Otherwise, the current value of the specified resource is printed." + +#: builtins.c:1067 +msgid "If no option is given, then -f is assumed. Values are in 1024-byte" +msgstr "If no option is given, then -f is assumed. Values are in 1024-byte" + +#: builtins.c:1068 +msgid "increments, except for -t, which is in seconds, -p, which is in" +msgstr "increments, except for -t, which is in seconds, -p, which is in" + +#: builtins.c:1069 +msgid "increments of 512 bytes, and -u, which is an unscaled number of" +msgstr "increments of 512 bytes, and -u, which is an unscaled number of" + +#: builtins.c:1070 +msgid "processes." +msgstr "processes." + +#: builtins.c:1077 +msgid "The user file-creation mask is set to MODE. If MODE is omitted, or if" +msgstr "The user file-creation mask is set to MODE. If MODE is omitted, or if" + +#: builtins.c:1078 +msgid "`-S' is supplied, the current value of the mask is printed. The `-S'" +msgstr "‘-S’ is supplied, the current value of the mask is printed. The ‘-S’" + +#: builtins.c:1079 +msgid "option makes the output symbolic; otherwise an octal number is output." +msgstr "option makes the output symbolic; otherwise an octal number is output." + +#: builtins.c:1080 +msgid "If `-p' is supplied, and MODE is omitted, the output is in a form" +msgstr "If ‘-p’ is supplied, and MODE is omitted, the output is in a form" + +#: builtins.c:1081 +msgid "that may be used as input. If MODE begins with a digit, it is" +msgstr "that may be used as input. If MODE begins with a digit, it is" + +#: builtins.c:1082 +msgid "interpreted as an octal number, otherwise it is a symbolic mode string" +msgstr "interpreted as an octal number, otherwise it is a symbolic mode string" + +#: builtins.c:1083 +msgid "like that accepted by chmod(1)." +msgstr "like that accepted by chmod(1)." + +#: builtins.c:1090 builtins.c:1102 +msgid "Wait for the specified process and report its termination status. If" +msgstr "Wait for the specified process and report its termination status. If" + +#: builtins.c:1091 builtins.c:1103 +msgid "N is not given, all currently active child processes are waited for," +msgstr "N is not given, all currently active child processes are waited for," + +#: builtins.c:1092 +msgid "and the return code is zero. N may be a process ID or a job" +msgstr "and the return code is zero. N may be a process ID or a job" + +#: builtins.c:1093 +msgid "specification; if a job spec is given, all processes in the job's" +msgstr "specification; if a job spec is given, all processes in the job's" + +#: builtins.c:1094 +msgid "pipeline are waited for." +msgstr "pipeline are waited for." + +#: builtins.c:1104 +msgid "and the return code is zero. N is a process ID; if it is not given," +msgstr "and the return code is zero. N is a process ID; if it is not given," + +#: builtins.c:1105 +msgid "all child processes of the shell are waited for." +msgstr "all child processes of the shell are waited for." + +#: builtins.c:1112 +msgid "The `for' loop executes a sequence of commands for each member in a" +msgstr "The ‘for’ loop executes a sequence of commands for each member in a" + +#: builtins.c:1113 +msgid "list of items. If `in WORDS ...;' is not present, then `in \"$@\"' is" +msgstr "list of items. If ‘in WORDS ...;’ is not present, then ‘in “$@”’ is" + +#: builtins.c:1114 +msgid "assumed. For each element in WORDS, NAME is set to that element, and" +msgstr "assumed. For each element in WORDS, NAME is set to that element, and" + +#: builtins.c:1115 +msgid "the COMMANDS are executed." +msgstr "the COMMANDS are executed." + +#: builtins.c:1121 +msgid "Equivalent to" +msgstr "Equivalent to" + +#: builtins.c:1122 +msgid "\t(( EXP1 ))" +msgstr "\t(( EXP1 ))" + +#: builtins.c:1123 +msgid "\twhile (( EXP2 )); do" +msgstr "\twhile (( EXP2 )); do" + +#: builtins.c:1124 +msgid "\t\tCOMMANDS" +msgstr "\t\tCOMMANDS" + +#: builtins.c:1125 +msgid "\t\t(( EXP3 ))" +msgstr "\t\t(( EXP3 ))" + +#: builtins.c:1126 +msgid "\tdone" +msgstr "\tdone" + +#: builtins.c:1127 +msgid "EXP1, EXP2, and EXP3 are arithmetic expressions. If any expression is" +msgstr "EXP1, EXP2, and EXP3 are arithmetic expressions. If any expression is" + +#: builtins.c:1128 +msgid "omitted, it behaves as if it evaluates to 1." +msgstr "omitted, it behaves as if it evaluates to 1." + +#: builtins.c:1134 +msgid "The WORDS are expanded, generating a list of words. The" +msgstr "The WORDS are expanded, generating a list of words. The" + +#: builtins.c:1135 +msgid "set of expanded words is printed on the standard error, each" +msgstr "set of expanded words is printed on the standard error, each" + +#: builtins.c:1136 +msgid "preceded by a number. If `in WORDS' is not present, `in \"$@\"'" +msgstr "preceded by a number. If ‘in WORDS’ is not present, ‘in “$@”’" + +#: builtins.c:1137 +msgid "is assumed. The PS3 prompt is then displayed and a line read" +msgstr "is assumed. The PS3 prompt is then displayed and a line read" + +#: builtins.c:1138 +msgid "from the standard input. If the line consists of the number" +msgstr "from the standard input. If the line consists of the number" + +#: builtins.c:1139 +msgid "corresponding to one of the displayed words, then NAME is set" +msgstr "corresponding to one of the displayed words, then NAME is set" + +#: builtins.c:1140 +msgid "to that word. If the line is empty, WORDS and the prompt are" +msgstr "to that word. If the line is empty, WORDS and the prompt are" + +#: builtins.c:1141 +msgid "redisplayed. If EOF is read, the command completes. Any other" +msgstr "redisplayed. If EOF is read, the command completes. Any other" + +#: builtins.c:1142 +msgid "value read causes NAME to be set to null. The line read is saved" +msgstr "value read causes NAME to be set to null. The line read is saved" + +#: builtins.c:1143 +msgid "in the variable REPLY. COMMANDS are executed after each selection" +msgstr "in the variable REPLY. COMMANDS are executed after each selection" + +#: builtins.c:1144 +msgid "until a break command is executed." +msgstr "until a break command is executed." + +#: builtins.c:1150 +msgid "Execute PIPELINE and print a summary of the real time, user CPU time," +msgstr "Execute PIPELINE and print a summary of the real time, user CPU time," + +#: builtins.c:1151 +msgid "and system CPU time spent executing PIPELINE when it terminates." +msgstr "and system CPU time spent executing PIPELINE when it terminates." + +#: builtins.c:1152 +msgid "The return status is the return status of PIPELINE. The `-p' option" +msgstr "The return status is the return status of PIPELINE. The ‘-p’ option" + +#: builtins.c:1153 +msgid "prints the timing summary in a slightly different format. This uses" +msgstr "prints the timing summary in a slightly different format. This uses" + +#: builtins.c:1154 +msgid "the value of the TIMEFORMAT variable as the output format." +msgstr "the value of the TIMEFORMAT variable as the output format." + +#: builtins.c:1160 +msgid "Selectively execute COMMANDS based upon WORD matching PATTERN. The" +msgstr "Selectively execute COMMANDS based upon WORD matching PATTERN. The" + +#: builtins.c:1161 +msgid "`|' is used to separate multiple patterns." +msgstr "‘|’ is used to separate multiple patterns." + +#: builtins.c:1167 +msgid "" +"The if COMMANDS are executed. If the exit status is zero, then the then" +msgstr "" +"The if COMMANDS are executed. If the exit status is zero, then the then" + +#: builtins.c:1168 +msgid "" +"COMMANDS are executed. Otherwise, each of the elif COMMANDS are executed" +msgstr "" +"COMMANDS are executed. Otherwise, each of the elif COMMANDS are executed" + +#: builtins.c:1169 +msgid "" +"in turn, and if the exit status is zero, the corresponding then COMMANDS" +msgstr "" +"in turn, and if the exit status is zero, the corresponding then COMMANDS" + +#: builtins.c:1170 +msgid "" +"are executed and the if command completes. Otherwise, the else COMMANDS" +msgstr "" +"are executed and the if command completes. Otherwise, the else COMMANDS" + +#: builtins.c:1171 +msgid "" +"are executed, if present. The exit status is the exit status of the last" +msgstr "" +"are executed, if present. The exit status is the exit status of the last" + +#: builtins.c:1172 +msgid "command executed, or zero if no condition tested true." +msgstr "command executed, or zero if no condition tested true." + +#: builtins.c:1178 builtins.c:1185 +msgid "Expand and execute COMMANDS as long as the final command in the" +msgstr "Expand and execute COMMANDS as long as the final command in the" + +#: builtins.c:1179 +msgid "`while' COMMANDS has an exit status of zero." +msgstr "‘while’ COMMANDS has an exit status of zero." + +#: builtins.c:1186 +msgid "`until' COMMANDS has an exit status which is not zero." +msgstr "‘until’ COMMANDS has an exit status which is not zero." + +#: builtins.c:1192 +msgid "Create a simple command invoked by NAME which runs COMMANDS." +msgstr "Create a simple command invoked by NAME which runs COMMANDS." + +#: builtins.c:1193 +msgid "Arguments on the command line along with NAME are passed to the" +msgstr "Arguments on the command line along with NAME are passed to the" + +#: builtins.c:1194 +msgid "function as $0 .. $n." +msgstr "function as $0 .. $n." + +#: builtins.c:1200 +msgid "Run a set of commands in a group. This is one way to redirect an" +msgstr "Run a set of commands in a group. This is one way to redirect an" + +#: builtins.c:1201 +msgid "entire set of commands." +msgstr "entire set of commands." + +#: builtins.c:1207 +msgid "This is similar to the `fg' command. Resume a stopped or background" +msgstr "This is similar to the ‘fg’ command. Resume a stopped or background" + +#: builtins.c:1208 +msgid "job. If you specifiy DIGITS, then that job is used. If you specify" +msgstr "job. If you specifiy DIGITS, then that job is used. If you specify" + +#: builtins.c:1209 +msgid "WORD, then the job whose name begins with WORD is used. Following the" +msgstr "WORD, then the job whose name begins with WORD is used. Following the" + +#: builtins.c:1210 +msgid "job specification with a `&' places the job in the background." +msgstr "job specification with a ‘&’ places the job in the background." + +#: builtins.c:1216 +msgid "The EXPRESSION is evaluated according to the rules for arithmetic" +msgstr "The EXPRESSION is evaluated according to the rules for arithmetic" + +#: builtins.c:1217 +msgid "evaluation. Equivalent to \"let EXPRESSION\"." +msgstr "evaluation. Equivalent to “let EXPRESSION”." + +#: builtins.c:1223 +msgid "" +"Returns a status of 0 or 1 depending on the evaluation of the conditional" +msgstr "" +"Returns a status of 0 or 1 depending on the evaluation of the conditional" + +#: builtins.c:1224 +msgid "" +"expression EXPRESSION. Expressions are composed of the same primaries used" +msgstr "" +"expression EXPRESSION. Expressions are composed of the same primaries used" + +#: builtins.c:1225 +msgid "" +"by the `test' builtin, and may be combined using the following operators" +msgstr "" +"by the ‘test’ builtin, and may be combined using the following operators" + +#: builtins.c:1227 +msgid "\t( EXPRESSION )\tReturns the value of EXPRESSION" +msgstr "\t( EXPRESSION )\tReturns the value of EXPRESSION" + +#: builtins.c:1228 +msgid "\t! EXPRESSION\tTrue if EXPRESSION is false; else false" +msgstr "\t! EXPRESSION\tTrue if EXPRESSION is false; else false" + +#: builtins.c:1229 +msgid "\tEXPR1 && EXPR2\tTrue if both EXPR1 and EXPR2 are true; else false" +msgstr "\tEXPR1 && EXPR2\tTrue if both EXPR1 and EXPR2 are true; else false" + +#: builtins.c:1230 +msgid "\tEXPR1 || EXPR2\tTrue if either EXPR1 or EXPR2 is true; else false" +msgstr "\tEXPR1 || EXPR2\tTrue if either EXPR1 or EXPR2 is true; else false" + +#: builtins.c:1232 +msgid "" +"When the `==' and `!=' operators are used, the string to the right of the" +msgstr "" +"When the ‘==’ and ‘!=’ operators are used, the string to the right of the" + +#: builtins.c:1233 +msgid "operator is used as a pattern and pattern matching is performed. The" +msgstr "operator is used as a pattern and pattern matching is performed. The" + +#: builtins.c:1234 +msgid "&& and || operators do not evaluate EXPR2 if EXPR1 is sufficient to" +msgstr "&& and || operators do not evaluate EXPR2 if EXPR1 is sufficient to" + +#: builtins.c:1235 +msgid "determine the expression's value." +msgstr "determine the expression's value." + +#: builtins.c:1241 +msgid "BASH_VERSION Version information for this Bash." +msgstr "BASH_VERSION Version information for this Bash." + +#: builtins.c:1242 +msgid "CDPATH A colon separated list of directories to search" +msgstr "CDPATH A colon separated list of directories to search" + +#: builtins.c:1243 +msgid "\t\twhen the argument to `cd' is not found in the current" +msgstr "\t\twhen the argument to ‘cd’ is not found in the current" + +#: builtins.c:1244 +msgid "\t\tdirectory." +msgstr "\t\tdirectory." + +#: builtins.c:1245 +msgid "GLOBIGNORE\tA colon-separated list of patterns describing filenames to" +msgstr "GLOBIGNORE\tA colon-separated list of patterns describing filenames to" + +#: builtins.c:1246 +msgid "\t\tbe ignored by pathname expansion." +msgstr "\t\tbe ignored by pathname expansion." + +#: builtins.c:1248 +msgid "" +"HISTFILE The name of the file where your command history is stored." +msgstr "" +"HISTFILE The name of the file where your command history is stored." + +#: builtins.c:1249 +msgid "HISTFILESIZE The maximum number of lines this file can contain." +msgstr "HISTFILESIZE The maximum number of lines this file can contain." + +#: builtins.c:1250 +msgid "HISTSIZE The maximum number of history lines that a running" +msgstr "HISTSIZE The maximum number of history lines that a running" + +#: builtins.c:1251 +msgid "\t\tshell can access." +msgstr "\t\tshell can access." + +#: builtins.c:1253 +msgid "HOME The complete pathname to your login directory." +msgstr "HOME The complete pathname to your login directory." + +#: builtins.c:1254 +msgid "HOSTNAME\tThe name of the current host." +msgstr "HOSTNAME\tThe name of the current host." + +#: builtins.c:1255 +msgid "HOSTTYPE The type of CPU this version of Bash is running under." +msgstr "HOSTTYPE The type of CPU this version of Bash is running under." + +#: builtins.c:1256 +msgid "IGNOREEOF Controls the action of the shell on receipt of an EOF" +msgstr "IGNOREEOF Controls the action of the shell on receipt of an EOF" + +#: builtins.c:1257 +msgid "\t\tcharacter as the sole input. If set, then the value" +msgstr "\t\tcharacter as the sole input. If set, then the value" + +#: builtins.c:1258 +msgid "\t\tof it is the number of EOF characters that can be seen" +msgstr "\t\tof it is the number of EOF characters that can be seen" + +#: builtins.c:1259 +msgid "\t\tin a row on an empty line before the shell will exit" +msgstr "\t\tin a row on an empty line before the shell will exit" + +#: builtins.c:1260 +msgid "\t\t(default 10). When unset, EOF signifies the end of input." +msgstr "\t\t(default 10). When unset, EOF signifies the end of input." + +#: builtins.c:1261 +msgid "MACHTYPE\tA string describing the current system Bash is running on." +msgstr "MACHTYPE\tA string describing the current system Bash is running on." + +#: builtins.c:1262 +msgid "MAILCHECK\tHow often, in seconds, Bash checks for new mail." +msgstr "MAILCHECK\tHow often, in seconds, Bash checks for new mail." + +#: builtins.c:1263 +msgid "MAILPATH\tA colon-separated list of filenames which Bash checks" +msgstr "MAILPATH\tA colon-separated list of filenames which Bash checks" + +#: builtins.c:1264 +msgid "\t\tfor new mail." +msgstr "\t\tfor new mail." + +#: builtins.c:1265 +msgid "OSTYPE\t\tThe version of Unix this version of Bash is running on." +msgstr "OSTYPE\t\tThe version of Unix this version of Bash is running on." + +#: builtins.c:1266 +msgid "PATH A colon-separated list of directories to search when" +msgstr "PATH A colon-separated list of directories to search when" + +#: builtins.c:1267 +msgid "\t\tlooking for commands." +msgstr "\t\tlooking for commands." + +#: builtins.c:1268 +msgid "PROMPT_COMMAND A command to be executed before the printing of each" +msgstr "PROMPT_COMMAND A command to be executed before the printing of each" + +#: builtins.c:1269 +msgid "\t\tprimary prompt." +msgstr "\t\tprimary prompt." + +#: builtins.c:1270 +msgid "PS1 The primary prompt string." +msgstr "PS1 The primary prompt string." + +#: builtins.c:1271 +msgid "PS2 The secondary prompt string." +msgstr "PS2 The secondary prompt string." + +#: builtins.c:1272 +msgid "PWD\t\tThe full pathname of the current directory." +msgstr "PWD\t\tThe full pathname of the current directory." + +#: builtins.c:1273 +msgid "SHELLOPTS\tA colon-separated list of enabled shell options." +msgstr "SHELLOPTS\tA colon-separated list of enabled shell options." + +#: builtins.c:1274 +msgid "TERM The name of the current terminal type." +msgstr "TERM The name of the current terminal type." + +#: builtins.c:1275 +msgid "TIMEFORMAT\tThe output format for timing statistics displayed by the" +msgstr "TIMEFORMAT\tThe output format for timing statistics displayed by the" + +#: builtins.c:1276 +msgid "\t\t`time' reserved word." +msgstr "\t\t‘time’ reserved word." + +#: builtins.c:1277 +msgid "auto_resume Non-null means a command word appearing on a line by" +msgstr "auto_resume Non-null means a command word appearing on a line by" + +#: builtins.c:1278 +msgid "\t\titself is first looked for in the list of currently" +msgstr "\t\titself is first looked for in the list of currently" + +#: builtins.c:1279 +msgid "\t\tstopped jobs. If found there, that job is foregrounded." +msgstr "\t\tstopped jobs. If found there, that job is foregrounded." + +#: builtins.c:1280 +msgid "\t\tA value of `exact' means that the command word must" +msgstr "\t\tA value of ‘exact’ means that the command word must" + +#: builtins.c:1281 +msgid "\t\texactly match a command in the list of stopped jobs. A" +msgstr "\t\texactly match a command in the list of stopped jobs. A" + +#: builtins.c:1282 +msgid "\t\tvalue of `substring' means that the command word must" +msgstr "\t\tvalue of ‘substring’ means that the command word must" + +#: builtins.c:1283 +msgid "\t\tmatch a substring of the job. Any other value means that" +msgstr "\t\tmatch a substring of the job. Any other value means that" + +#: builtins.c:1284 +msgid "\t\tthe command must be a prefix of a stopped job." +msgstr "\t\tthe command must be a prefix of a stopped job." + +#: builtins.c:1287 +msgid "histchars Characters controlling history expansion and quick" +msgstr "histchars Characters controlling history expansion and quick" + +#: builtins.c:1288 +msgid "\t\tsubstitution. The first character is the history" +msgstr "\t\tsubstitution. The first character is the history" + +#: builtins.c:1289 +msgid "\t\tsubstitution character, usually `!'. The second is" +msgstr "\t\tsubstitution character, usually ‘!’. The second is" + +#: builtins.c:1290 +msgid "\t\tthe `quick substitution' character, usually `^'. The" +msgstr "\t\tthe ‘quick substitution’ character, usually ‘^’. The" + +#: builtins.c:1291 +msgid "\t\tthird is the `history comment' character, usually `#'." +msgstr "\t\tthird is the ‘history comment’ character, usually ‘#’." + +#: builtins.c:1293 +msgid "HISTIGNORE\tA colon-separated list of patterns used to decide which" +msgstr "HISTIGNORE\tA colon-separated list of patterns used to decide which" + +#: builtins.c:1294 +msgid "\t\tcommands should be saved on the history list." +msgstr "\t\tcommands should be saved on the history list." + +#: builtins.c:1306 +msgid "+N\tRotates the stack so that the Nth directory (counting" +msgstr "+N\tRotates the stack so that the Nth directory (counting" + +#: builtins.c:1307 +msgid "\tfrom the left of the list shown by `dirs', starting with" +msgstr "\tfrom the left of the list shown by ‘dirs’, starting with" + +#: builtins.c:1308 builtins.c:1312 +msgid "\tzero) is at the top." +msgstr "\tzero) is at the top." + +#: builtins.c:1310 +msgid "-N\tRotates the stack so that the Nth directory (counting" +msgstr "-N\tRotates the stack so that the Nth directory (counting" + +#: builtins.c:1311 +msgid "\tfrom the right of the list shown by `dirs', starting with" +msgstr "\tfrom the right of the list shown by ‘dirs’, starting with" + +#: builtins.c:1314 +msgid "-n\tsuppress the normal change of directory when adding directories" +msgstr "-n\tsuppress the normal change of directory when adding directories" + +#: builtins.c:1315 +msgid "\tto the stack, so only the stack is manipulated." +msgstr "\tto the stack, so only the stack is manipulated." + +#: builtins.c:1317 +msgid "dir\tadds DIR to the directory stack at the top, making it the" +msgstr "dir\tadds DIR to the directory stack at the top, making it the" + +#: builtins.c:1318 +msgid "\tnew current working directory." +msgstr "\tnew current working directory." + +#: builtins.c:1332 +msgid "+N\tremoves the Nth entry counting from the left of the list" +msgstr "+N\tremoves the Nth entry counting from the left of the list" + +#: builtins.c:1333 +msgid "\tshown by `dirs', starting with zero. For example: `popd +0'" +msgstr "\tshown by ‘dirs’, starting with zero. For example: ‘popd +0’" + +#: builtins.c:1334 +msgid "\tremoves the first directory, `popd +1' the second." +msgstr "\tremoves the first directory, ‘popd +1’ the second." + +#: builtins.c:1336 +msgid "-N\tremoves the Nth entry counting from the right of the list" +msgstr "-N\tremoves the Nth entry counting from the right of the list" + +#: builtins.c:1337 +msgid "\tshown by `dirs', starting with zero. For example: `popd -0'" +msgstr "\tshown by ‘dirs’, starting with zero. For example: ‘popd -0’" + +#: builtins.c:1338 +msgid "\tremoves the last directory, `popd -1' the next to last." +msgstr "\tremoves the last directory, ‘popd -1’ the next to last." + +#: builtins.c:1340 +msgid "-n\tsuppress the normal change of directory when removing directories" +msgstr "-n\tsuppress the normal change of directory when removing directories" + +#: builtins.c:1341 +msgid "\tfrom the stack, so only the stack is manipulated." +msgstr "\tfrom the stack, so only the stack is manipulated." + +#: builtins.c:1363 +msgid "+N\tdisplays the Nth entry counting from the left of the list shown by" +msgstr "+N\tdisplays the Nth entry counting from the left of the list shown by" + +#: builtins.c:1364 builtins.c:1367 +msgid "\tdirs when invoked without options, starting with zero." +msgstr "\tdirs when invoked without options, starting with zero." + +#: builtins.c:1366 +msgid "-N\tdisplays the Nth entry counting from the right of the list shown by" +msgstr "" +"-N\tdisplays the Nth entry counting from the right of the list shown by" + +#: builtins.c:1374 +msgid "Toggle the values of variables controlling optional behavior." +msgstr "Toggle the values of variables controlling optional behavior." + +#: builtins.c:1375 +msgid "The -s flag means to enable (set) each OPTNAME; the -u flag" +msgstr "The -s flag means to enable (set) each OPTNAME; the -u flag" + +#: builtins.c:1376 +msgid "unsets each OPTNAME. The -q flag suppresses output; the exit" +msgstr "unsets each OPTNAME. The -q flag suppresses output; the exit" + +#: builtins.c:1377 +msgid "status indicates whether each OPTNAME is set or unset. The -o" +msgstr "status indicates whether each OPTNAME is set or unset. The -o" + +#: builtins.c:1378 +msgid "option restricts the OPTNAMEs to those defined for use with" +msgstr "option restricts the OPTNAMEs to those defined for use with" + +#: builtins.c:1379 +msgid "`set -o'. With no options, or with the -p option, a list of all" +msgstr "‘set -o’. With no options, or with the -p option, a list of all" + +#: builtins.c:1380 +msgid "settable options is displayed, with an indication of whether or" +msgstr "settable options is displayed, with an indication of whether or" + +#: builtins.c:1381 +msgid "not each is set." +msgstr "not each is set." + +#: builtins.c:1387 +msgid "printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT" +msgstr "" +"printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT" + +#: builtins.c:1388 +msgid "is a character string which contains three types of objects: plain" +msgstr "is a character string which contains three types of objects: plain" + +#: builtins.c:1389 +msgid "" +"characters, which are simply copied to standard output, character escape" +msgstr "" +"characters, which are simply copied to standard output, character escape" + +#: builtins.c:1390 +msgid "sequences which are converted and copied to the standard output, and" +msgstr "sequences which are converted and copied to the standard output, and" + +#: builtins.c:1391 +msgid "" +"format specifications, each of which causes printing of the next successive" +msgstr "" +"format specifications, each of which causes printing of the next successive" + +#: builtins.c:1392 +msgid "argument. In addition to the standard printf(1) formats, %b means to" +msgstr "argument. In addition to the standard printf(1) formats, %b means to" + +#: builtins.c:1393 +msgid "expand backslash escape sequences in the corresponding argument, and %q" +msgstr "" +"expand backslash escape sequences in the corresponding argument, and %q" + +#: builtins.c:1394 +msgid "means to quote the argument in a way that can be reused as shell input." +msgstr "" +"means to quote the argument in a way that can be reused as shell input." + +#: builtins.c:1401 +msgid "For each NAME, specify how arguments are to be completed." +msgstr "For each NAME, specify how arguments are to be completed." + +#: builtins.c:1402 +msgid "If the -p option is supplied, or if no options are supplied, existing" +msgstr "If the -p option is supplied, or if no options are supplied, existing" + +#: builtins.c:1403 +msgid "completion specifications are printed in a way that allows them to be" +msgstr "completion specifications are printed in a way that allows them to be" + +#: builtins.c:1404 +msgid "reused as input. The -r option removes a completion specification for" +msgstr "reused as input. The -r option removes a completion specification for" + +#: builtins.c:1405 +msgid "each NAME, or, if no NAMEs are supplied, all completion specifications." +msgstr "" +"each NAME, or, if no NAMEs are supplied, all completion specifications." + +#: builtins.c:1413 +msgid "Display the possible completions depending on the options. Intended" +msgstr "Display the possible completions depending on the options. Intended" + +#: builtins.c:1414 +msgid "" +"to be used from within a shell function generating possible completions." +msgstr "" +"to be used from within a shell function generating possible completions." + +#: builtins.c:1415 +msgid "If the optional WORD argument is supplied, matches against WORD are" +msgstr "If the optional WORD argument is supplied, matches against WORD are" + +#: builtins.c:1416 +msgid "generated." +msgstr "generated." diff --git a/subst.c b/subst.c index 63c7b4a01..9a1e0f0e4 100644 --- a/subst.c +++ b/subst.c @@ -1528,7 +1528,7 @@ split_at_delims (string, slen, delims, sentinel, nwp, cwp) mblength = MBRLEN (delims + i, slength, &state); if (MB_INVALIDCH (mblength)) state = state_bak; - else if (mblength != 1) + else if (mblength > 1) { memcpy (d2 + ts, delims + i, mblength); ts += mblength; @@ -1793,6 +1793,8 @@ string_list_dollar_at (list, quoted) sep[0] = *ifs; sep[1] = '\0'; } + else if (mblength == 0) + sep[0] = '\0'; else { memcpy (sep, ifs, mblength); @@ -2161,14 +2163,7 @@ do_assignment_internal (string, expand) /* Perform tilde expansion. */ if (expand && temp[0]) - { - temp = (xstrchr (temp, '~') && unquoted_member ('~', temp)) - ? bash_tilde_expand (temp, 1) - : savestring (temp); - - value = expand_string_if_necessary (temp, 0, expand_string_unsplit); - free (temp); - } + value = expand_string_if_necessary (temp, 0, expand_string_assignment); else value = savestring (temp); } @@ -2336,9 +2331,6 @@ pos_params (string, start, end, quoted) t->next = (WORD_LIST *)NULL; if (string[0] == '*') -#if 0 - ret = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? string_list_dollar_star (quote_list (h)) : string_list (h); -#else { if (quoted & Q_DOUBLE_QUOTES) ret = string_list_dollar_star (quote_list (h)); @@ -2347,7 +2339,6 @@ pos_params (string, start, end, quoted) else ret = string_list (h); } -#endif else ret = string_list ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? quote_list (h) : h); if (t != params) @@ -2364,9 +2355,9 @@ pos_params (string, start, end, quoted) /******************************************************************/ #if defined (PROCESS_SUBSTITUTION) -#define EXP_CHAR(s) (s == '$' || s == '`' || s == '<' || s == '>' || s == CTLESC) +#define EXP_CHAR(s) (s == '$' || s == '`' || s == '<' || s == '>' || s == CTLESC || s == '~') #else -#define EXP_CHAR(s) (s == '$' || s == '`' || s == CTLESC) +#define EXP_CHAR(s) (s == '$' || s == '`' || s == CTLESC || s == '~') #endif /* If there are any characters in STRING that require full expansion, @@ -2493,13 +2484,6 @@ cond_expand_word (w, special) if (w->word == 0 || w->word[0] == '\0') return ((char *)NULL); - if (xstrchr (w->word, '~') && unquoted_member ('~', w->word)) - { - p = bash_tilde_expand (w->word, 0); - free (w->word); - w->word = p; - } - l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0); if (l) { @@ -2599,6 +2583,36 @@ expand_string_unsplit (string, quoted) return (value); } +/* Expand the rhs of an assignment statement */ +WORD_LIST * +expand_string_assignment (string, quoted) + char *string; + int quoted; +{ + WORD_DESC td; + WORD_LIST *value; + + if (string == 0 || *string == '\0') + return ((WORD_LIST *)NULL); + + expand_no_split_dollar_star = 1; + + td.flags = W_ASSIGNRHS; + td.word = savestring (string); + value = call_expand_word_internal (&td, quoted, 0, (int *)NULL, (int *)NULL); + FREE (td.word); + + expand_no_split_dollar_star = 0; + + if (value) + { + if (value->word) + remove_quoted_nulls (value->word->word); + dequote_list (value); + } + return (value); +} + /* Expand one of the PS? prompt strings. This is a sort of combination of expand_string_unsplit and expand_string_internal, but returns the @@ -3555,8 +3569,6 @@ getpattern (value, quoted, expandpat) WORD_LIST *l; int i; - tword = xstrchr (value, '~') ? bash_tilde_expand (value, 0) : savestring (value); - /* There is a problem here: how to handle single or double quotes in the pattern string when the whole expression is between double quotes? POSIX.2 says that enclosing double quotes do not cause the pattern to @@ -3574,11 +3586,10 @@ getpattern (value, quoted, expandpat) /* expand_string_for_rhs () leaves WORD quoted and does not perform word splitting. */ - l = *tword ? expand_string_for_rhs (tword, + l = *value ? expand_string_for_rhs (value, (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? Q_PATQUOTE : quoted, (int *)NULL, (int *)NULL) : (WORD_LIST *)0; - free (tword); pat = string_list (l); dispose_words (l); if (pat) @@ -3626,11 +3637,7 @@ list_remove_pattern (list, pattern, patspec, itype, quoted) l = REVERSE_LIST (new, WORD_LIST *); if (itype == '*') -#if 0 - tword = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? string_list_dollar_star (l) : string_list (l); -#else tword = (quoted & Q_DOUBLE_QUOTES) ? string_list_dollar_star (l) : string_list (l); -#endif else tword = string_list ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? quote_list (l) : l); @@ -4707,24 +4714,16 @@ parameter_brace_expand_rhs (name, value, c, quoted, qdollaratp, hasdollarat) char *t, *t1, *temp; int hasdol; - /* XXX - Should we tilde expand in an assignment context if C is `='? */ - if (*value == '~') - temp = bash_tilde_expand (value, 0); - else if (xstrchr (value, '~') && unquoted_substring ("=~", value)) - temp = bash_tilde_expand (value, 1); - else - temp = savestring (value); - /* If the entire expression is between double quotes, we want to treat the value as a double-quoted string, with the exception that we strip embedded unescaped double quotes. */ - if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && *temp) + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && *value) { hasdol = 0; - t = string_extract_double_quoted (temp, &hasdol, 1); - free (temp); - temp = t; + temp = string_extract_double_quoted (value, &hasdol, 1); } + else + temp = value; hasdol = 0; /* XXX was 0 not quoted */ @@ -4732,7 +4731,8 @@ parameter_brace_expand_rhs (name, value, c, quoted, qdollaratp, hasdollarat) : (WORD_LIST *)0; if (hasdollarat) *hasdollarat = hasdol || (l && l->next); - free (temp); + if (temp != value) + free (temp); if (l) { /* The expansion of TEMP returned something. We need to treat things @@ -4792,15 +4792,7 @@ parameter_brace_expand_error (name, value) if (value && *value) { - if (*value == '~') - temp = bash_tilde_expand (value, 0); - else if (xstrchr (value, '~') && unquoted_substring ("=~", value)) - temp = bash_tilde_expand (value, 1); - else - temp = savestring (value); - - l = expand_string (temp, 0); - FREE (temp); + l = expand_string (value, 0); temp = string_list (l); report_error ("%s: %s", name, temp ? temp : ""); /* XXX was value not "" */ FREE (temp); @@ -5454,16 +5446,9 @@ parameter_brace_patsub (varname, value, patsub, quoted) if (rep && *rep == '\0') rep = (char *)NULL; -#if 0 - /* Expand PAT and REP for command, variable and parameter, arithmetic, - and process substitution. Also perform quote removal. Do not - perform word splitting or filename generation. */ - pat = expand_string_if_necessary (lpatsub, (quoted & ~Q_DOUBLE_QUOTES), expand_string_unsplit); -#else /* Perform the same expansions on the pattern as performed by the pattern removal expansions. */ pat = getpattern (lpatsub, quoted, 1); -#endif if (rep) { @@ -6029,11 +6014,7 @@ param_expand (string, sindex, quoted, expanded_something, quote the whole string, including the separators. If IFS is unset, the parameters are separated by ' '; if $IFS is null, the parameters are concatenated. */ -#if 0 - temp = string_list_dollar_star (list); -#else temp = (quoted & Q_DOUBLE_QUOTES) ? string_list_dollar_star (list) : string_list (list); -#endif temp1 = quote_string (temp); free (temp); temp = temp1; @@ -6319,10 +6300,13 @@ expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_somethin string (e.g., "xx"ab), or is fully quoted (e.g., "xxab"). */ int quoted_state; + /* State flags */ int had_quoted_null; int has_dollar_at; int tflag; + int assignoff; /* If assignment, offset of `=' */ + register unsigned char c; /* Current character. */ int t_index; /* For calls to string_extract_xxx. */ @@ -6343,6 +6327,8 @@ expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_somethin if (contains_dollar_at) *contains_dollar_at = 0; + assignoff = -1; + /* Begin the expansion. */ for (sindex = 0; ;) @@ -6412,6 +6398,81 @@ add_string: } #endif /* PROCESS_SUBSTITUTION */ + case '=': + /* Posix.2 section 3.6.1 says that tildes following `=' in words + which are not assignment statements are not expanded. If the + shell isn't in posix mode, though, we perform tilde expansion + on `likely candidate' unquoted assignment statements (flags + include W_ASSIGNMENT but not W_QUOTED). A likely candidate + contains an unquoted :~ or =~. Something to think about: we + now have a flag that says to perform tilde expansion on arguments + to `assignment builtins' like declare and export that look like + assignment statements. We now do tilde expansion on such words + even in POSIX mode. */ + if (word->flags & (W_ASSIGNRHS|W_NOTILDE)) + goto add_character; + /* If we're not in posix mode or forcing assignment-statement tilde + expansion, note where the `=' appears in the word and prepare to + do tilde expansion following the first `='. */ + if ((word->flags & W_ASSIGNMENT) && + (posixly_correct == 0 || (word->flags & W_TILDEEXP)) && + assignoff == -1 && sindex > 0) + assignoff = sindex; + if (sindex == assignoff && string[sindex+1] == '~') /* XXX */ + word->flags |= W_ITILDE; + else if ((word->flags & W_ASSIGNMENT) && + (posixly_correct == 0 || (word->flags & W_TILDEEXP)) && + string[sindex+1] == '~') + word->flags |= W_ITILDE; + goto add_character; + + case ':': + if (word->flags & W_NOTILDE) + goto add_character; + if ((word->flags & (W_ASSIGNMENT|W_ASSIGNRHS)) && + (posixly_correct == 0 || (word->flags & W_TILDEEXP)) && + string[sindex+1] == '~') + word->flags |= W_ITILDE; + goto add_character; + + case '~': + /* If the word isn't supposed to be tilde expanded, or we're not + at the start of a word or after an unquoted : or = in an + assignment statement, we don't do tilde expansion. */ + if ((word->flags & W_NOTILDE) || + (sindex > 0 && ((word->flags & W_ITILDE) == 0)) || + (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) + { + word->flags &= ~W_ITILDE; + goto add_character; + } + + if (word->flags & W_ASSIGNRHS) + tflag = 2; + else if ((word->flags & W_ASSIGNMENT) && + (posixly_correct == 0 || (word->flags & W_TILDEEXP))) + tflag = 1; + else + tflag = 0; + + temp = bash_tilde_find_word (string + sindex, tflag, &t_index); + + word->flags &= ~W_ITILDE; + + if (temp && *temp && t_index > 0) + { + temp1 = bash_tilde_expand (temp, tflag); + free (temp); + temp = temp1; + sindex += t_index; + goto add_string; + } + else + { + FREE (temp); + goto add_character; + } + case '$': if (expanded_something) *expanded_something = 1; @@ -6498,11 +6559,7 @@ add_twochars: break; case '"': -#if 0 - if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT|Q_PATQUOTE)) -#else if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) -#endif goto add_character; t_index = ++sindex; @@ -6644,11 +6701,7 @@ add_twochars: /* break; */ case '\'': -#if 0 - if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT|Q_PATQUOTE)) -#else if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) -#endif goto add_character; t_index = ++sindex; @@ -6968,7 +7021,7 @@ setifs (v) size_t ifs_len; ifs_len = strnlen (ifs_value, MB_CUR_MAX); ifs_firstc_len = MBLEN (ifs_value, ifs_len); - if (ifs_firstc_len == 1 || MB_INVALIDCH (ifs_firstc_len)) + if (ifs_firstc_len == 1 || ifs_firstc_len == 0 || MB_INVALIDCH (ifs_firstc_len)) { ifs_firstc[0] = ifs_value[0]; ifs_firstc[1] = '\0'; @@ -7382,29 +7435,6 @@ shell_expand_word_list (tlist, eflags) next = tlist->next; - /* Posix.2 section 3.6.1 says that tildes following `=' in words - which are not assignment statements are not expanded. If the - shell isn't in posix mode, though, we perform tilde expansion - on `likely candidate' unquoted assignment statements (flags - include W_ASSIGNMENT but not W_QUOTED). A likely candidate - contains an unquoted :~ or =~. Something to think about: we - now have a flag that says to perform tilde expansion on arguments - to `assignment builtins' like declare and export that look like - assignment statements. We now do tilde expansion on such words - even in POSIX mode. */ - if (((tlist->word->flags & (W_ASSIGNMENT|W_QUOTED)) == W_ASSIGNMENT) && - (posixly_correct == 0 || (tlist->word->flags & W_TILDEEXP)) && - (unquoted_substring ("=~", temp_string) || unquoted_substring (":~", temp_string))) - { - tlist->word->word = bash_tilde_expand (temp_string, 1); - free (temp_string); - } - else if (temp_string[0] == '~') - { - tlist->word->word = bash_tilde_expand (temp_string, 0); - free (temp_string); - } - expanded_something = 0; expanded = expand_word_internal (tlist->word, 0, 0, &has_dollar_at, &expanded_something); diff --git a/subst.c.orig b/subst.c.orig index 011930b36..3b42602e2 100644 --- a/subst.c.orig +++ b/subst.c.orig @@ -124,7 +124,13 @@ pid_t current_command_subst_pid = NO_PID; SHELL_VAR *ifs_var; char *ifs_value; unsigned char ifs_cmap[UCHAR_MAX + 1]; + +#if defined (HANDLE_MULTIBYTE) +unsigned char ifs_firstc[MB_LEN_MAX]; +size_t ifs_firstc_len; +#else unsigned char ifs_firstc; +#endif /* Extern functions and variables from different files. */ extern int last_command_exit_value, last_command_exit_signal; @@ -138,6 +144,7 @@ extern char *this_command_name; extern struct fd_bitmap *current_fds_to_close; extern int wordexp_only; extern int expanding_redir; +extern int tempenv_assign_error; /* Non-zero means to allow unmatched globbed filenames to expand to a null file. */ @@ -699,9 +706,16 @@ add_one_character: for (t = 0; ret[t]; t++, j++) temp[j] = ret[t]; - temp[j++] = string[si]; + temp[j] = string[si]; + + if (string[si]) + { + j++; + i = si + 1; + } + else + i = si; - i = si + 1; if (free_ret) free (ret); continue; @@ -777,7 +791,7 @@ skip_double_quoted (string, slen, sind) { si = i + 2; if (string[i + 1] == LPAREN) - ret = extract_delimited_string (string, &si, "$(", "(", ")", EX_NOALLOC); + ret = extract_delimited_string (string, &si, "$(", "(", ")", EX_NOALLOC); /* ) */ else ret = extract_dollar_brace_string (string, &si, 0, EX_NOALLOC); @@ -854,8 +868,14 @@ string_extract_verbatim (string, sindex, charlist) char *charlist; { register int i = *sindex; + size_t slen; +#if defined (HANDLE_MULTIBYTE) + size_t clen; + wchar_t *wcharlist; +#endif int c; char *temp; + DECLARE_MBSTATE; if (charlist[0] == '\'' && charlist[1] == '\0') { @@ -864,18 +884,62 @@ string_extract_verbatim (string, sindex, charlist) return temp; } - for (i = *sindex; c = string[i]; i++) + slen = strlen (string + *sindex) + *sindex; + i = *sindex; +#if defined (HANDLE_MULTIBYTE) + clen = strlen (charlist); + wcharlist = 0; +#endif + while (c = string[i]) { +#if defined (HANDLE_MULTIBYTE) + size_t mblength; +#endif if (c == CTLESC) { - i++; + i += 2; continue; } +#if defined (HANDLE_MULTIBYTE) + mblength = MBLEN (string + i, slen - 1); + if (mblength > 1) + { + wchar_t wc; + mblength = mbtowc (&wc, string + i, slen - i); + if (MB_INVALIDCH (mblength)) + { + if (MEMBER (c, charlist)) + break; + } + else + { + if (wcharlist == 0) + { + size_t len; + len = mbstowcs (wcharlist, charlist, 0); + if (len == -1) + len = 0; + wcharlist = xmalloc ((sizeof (wchar_t) * len) + 1); + mbstowcs (wcharlist, charlist, len); + } + + if (wcschr (wcharlist, wc)) + break; + } + } + else +#endif if (MEMBER (c, charlist)) break; + + ADVANCE_CHAR (string, slen, i); } +#if defined (HANDLE_MULTIBYTE) + FREE (wcharlist); +#endif + temp = substring (string, *sindex, i); *sindex = i; @@ -884,13 +948,13 @@ string_extract_verbatim (string, sindex, charlist) /* Extract the $( construct in STRING, and return a new string. Start extracting at (SINDEX) as if we had just seen "$(". - Make (SINDEX) get the position of the matching ")". */ + Make (SINDEX) get the position of the matching ")". ) */ char * extract_command_subst (string, sindex) char *string; int *sindex; { - return (extract_delimited_string (string, sindex, "$(", "(", ")", 0)); + return (extract_delimited_string (string, sindex, "$(", "(", ")", 0)); /*)*/ } /* Extract the $[ construct in STRING, and return a new string. (]) @@ -1448,11 +1512,36 @@ split_at_delims (string, slen, delims, sentinel, nwp, cwp) d2 = 0; if (delims) { - d2 = (char *)xmalloc (strlen (delims) + 1); - for (i = ts = 0; delims[i]; i++) + size_t slength; +#if defined (HANDLE_MULTIBYTE) + size_t mblength = 1; +#endif + DECLARE_MBSTATE; + + slength = strlen (delims); + d2 = (char *)xmalloc (slength + 1); + i = ts = 0; + while (delims[i]) { - if (whitespace(delims[i]) == 0) +#if defined (HANDLE_MULTIBYTE) + mbstate_t state_bak = state; + mblength = MBRLEN (delims + i, slength, &state); + if (MB_INVALIDCH (mblength)) + state = state_bak; + else if (mblength > 1) + { + memcpy (d2 + ts, delims + i, mblength); + ts += mblength; + i += mblength; + slength -= mblength; + continue; + } +#endif + if (whitespace (delims[i]) == 0) d2[ts++] = delims[i]; + + i++; + slength--; } d2[ts] = '\0'; } @@ -1646,10 +1735,25 @@ char * string_list_dollar_star (list) WORD_LIST *list; { +#if defined (HANDLE_MULTIBYTE) + char sep[MB_CUR_MAX + 1]; +#else char sep[2]; +#endif + +#if defined (HANDLE_MULTIBYTE) + if (ifs_firstc_len == 1) + { + sep[0] = ifs_firstc[0]; + sep[1] = '\0'; + } + else + memcpy (sep, ifs_firstc, ifs_firstc_len); +#else sep[0] = ifs_firstc; sep[1] = '\0'; +#endif return (string_list_internal (list, sep)); } @@ -1668,14 +1772,44 @@ string_list_dollar_at (list, quoted) WORD_LIST *list; int quoted; { - char *ifs, sep[2]; + char *ifs; +#if defined (HANDLE_MULTIBYTE) + char sep[MB_CUR_MAX + 1]; +#else + char sep[2]; +#endif WORD_LIST *tlist; /* XXX this could just be ifs = ifs_value; */ ifs = ifs_var ? value_cell (ifs_var) : (char *)0; +#if defined (HANDLE_MULTIBYTE) + if (ifs && *ifs) + { + size_t mblength; + mblength = MBLEN (ifs, strnlen (ifs, MB_CUR_MAX)); + if (MB_INVALIDCH (mblength) || mblength == 1) + { + sep[0] = *ifs; + sep[1] = '\0'; + } + else if (mblength == 0) + sep[0] = '\0'; + else + { + memcpy (sep, ifs, mblength); + sep[mblength] = '\0'; + } + } + else + { + sep[0] = ' '; + sep[1] = '\0'; + } +#else sep[0] = (ifs == 0 || *ifs == 0) ? ' ' : *ifs; sep[1] = '\0'; +#endif tlist = ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (ifs && *ifs == 0)) ? quote_list (list) @@ -1724,6 +1858,7 @@ list_string (string, separators, quoted) WORD_DESC *t; char *current_word, *s; int sindex, sh_style_split, whitesep; + size_t slen; if (!string || !*string) return ((WORD_LIST *)NULL); @@ -1733,6 +1868,7 @@ list_string (string, separators, quoted) separators[2] == '\n' && separators[3] == '\0'; + slen = 0; /* Remove sequences of whitespace at the beginning of STRING, as long as those characters appear in IFS. Do not do this if STRING is quoted or if there are no separator characters. */ @@ -1797,7 +1933,12 @@ list_string (string, separators, quoted) /* Move past the current separator character. */ if (string[sindex]) - sindex++; + { + DECLARE_MBSTATE; + if (slen == 0) + slen = strlen (string); + ADVANCE_CHAR (string, slen, sindex); + } /* Now skip sequences of space, tab, or newline characters if they are in the list of separators. */ @@ -1828,6 +1969,7 @@ get_word_from_string (stringp, separators, endptr) register char *s; char *current_word; int sindex, sh_style_split, whitesep; + size_t slen; if (!stringp || !*stringp || !**stringp) return ((char *)NULL); @@ -1839,6 +1981,8 @@ get_word_from_string (stringp, separators, endptr) separators[2] == '\n' && separators[3] == '\0'; + slen = 0; + /* Remove sequences of whitespace at the beginning of STRING, as long as those characters appear in IFS. */ if (sh_style_split || !separators || !*separators) @@ -1873,7 +2017,12 @@ get_word_from_string (stringp, separators, endptr) /* Move past the current separator character. */ if (s[sindex]) - sindex++; + { + DECLARE_MBSTATE; + if (slen == 0) + slen = strlen (s); + ADVANCE_CHAR (s, slen, sindex); + } /* Now skip sequences of space, tab, or newline characters if they are in the list of separators. */ @@ -4683,6 +4832,26 @@ valid_length_expression (name) legal_identifier (name + 1)); /* ${#PS1} */ } +#if defined (HANDLE_MULTIBYTE) +size_t +mbstrlen (s) + const char *s; +{ + size_t clen, nc; + mbstate_t mbs; + + nc = 0; + memset (&mbs, 0, sizeof (mbs)); + while ((clen = mbrlen(s, MB_CUR_MAX, &mbs)) != 0 && (MB_INVALIDCH(clen) == 0)) + { + s += clen; + nc++; + } + return nc; +} +#endif + + /* Handle the parameter brace expansion that requires us to return the length of a parameter. */ static intmax_t @@ -4738,14 +4907,14 @@ parameter_brace_expand_length (name) if (legal_number (name + 1, &arg_index)) /* ${#1} */ { t = get_dollar_var_value (arg_index); - number = STRLEN (t); + number = MB_STRLEN (t); FREE (t); } #if defined (ARRAY_VARS) - else if ((var = find_variable (name + 1)) && array_p (var)) + else if ((var = find_variable (name + 1)) && (invisible_p (var) == 0) && array_p (var)) { t = array_reference (array_cell (var), 0); - number = STRLEN (t); + number = MB_STRLEN (t); } #endif else /* ${#PS1} */ @@ -4758,7 +4927,7 @@ parameter_brace_expand_length (name) if (list) dispose_words (list); - number = STRLEN (t); + number = MB_STRLEN (t); FREE (t); } } @@ -4863,7 +5032,7 @@ verify_substring_values (value, substr, vtype, e1p, e2p) { case VT_VARIABLE: case VT_ARRAYMEMBER: - len = strlen (value); + len = MB_STRLEN (value); break; case VT_POSPARMS: len = number_of_args () + 1; @@ -4871,8 +5040,9 @@ verify_substring_values (value, substr, vtype, e1p, e2p) #if defined (ARRAY_VARS) case VT_ARRAYVAR: a = (ARRAY *)value; - /* For arrays, the first value deals with array indices. */ - len = array_max_index (a); /* arrays index from 0 to n - 1 */ + /* For arrays, the first value deals with array indices. Negative + offsets count from one past the array's maximum index. */ + len = array_max_index (a) + (*e1p < 0); /* arrays index from 0 to n - 1 */ break; #endif } @@ -4883,7 +5053,7 @@ verify_substring_values (value, substr, vtype, e1p, e2p) if (*e1p < 0) /* negative offsets count from end */ *e1p += len; - if (*e1p >= len || *e1p < 0) + if (*e1p > len || *e1p < 0) return (-1); #if defined (ARRAY_VARS) @@ -4974,7 +5144,7 @@ get_var_and_type (varname, value, quoted, varp, valp) else return -1; } - else if ((v = find_variable (varname)) && array_p (v)) + else if ((v = find_variable (varname)) && (invisible_p (v) == 0) && array_p (v)) { vtype = VT_ARRAYMEMBER; *varp = v; @@ -6780,7 +6950,8 @@ setifs (v) ifs_var = v; ifs_value = v ? value_cell (v) : " \t\n"; - /* Should really merge ifs_cmap with sh_syntaxtab. */ + /* Should really merge ifs_cmap with sh_syntaxtab. XXX - doesn't yet + handle multibyte chars in IFS */ memset (ifs_cmap, '\0', sizeof (ifs_cmap)); for (t = ifs_value ; t && *t; t++) { @@ -6788,7 +6959,29 @@ setifs (v) ifs_cmap[uc] = 1; } +#if defined (HANDLE_MULTIBYTE) + if (ifs_value == 0) + { + ifs_firstc[0] = '\0'; + ifs_firstc_len = 1; + } + else + { + size_t ifs_len; + ifs_len = strnlen (ifs_value, MB_CUR_MAX); + ifs_firstc_len = MBLEN (ifs_value, ifs_len); + if (ifs_firstc_len == 1 || ifs_firstc_len == 0 || MB_INVALIDCH (ifs_firstc_len)) + { + ifs_firstc[0] = ifs_value[0]; + ifs_firstc[1] = '\0'; + ifs_firstc_len = 1; + } + else + memcpy (ifs_firstc, ifs_value, ifs_firstc_len); + } +#else ifs_firstc = ifs_value ? *ifs_value : 0; +#endif } char * @@ -6826,12 +7019,23 @@ static WORD_LIST * word_list_split (list) WORD_LIST *list; { - WORD_LIST *result, *t, *tresult; + WORD_LIST *result, *t, *tresult, *e; for (t = list, result = (WORD_LIST *)NULL; t; t = t->next) { tresult = word_split (t->word, ifs_value); +#if 0 result = (WORD_LIST *) list_append (result, tresult); +#else + if (result == 0) + result = e = tresult; + else + { + e->next = tresult; + while (e->next) + e = e->next; + } +#endif } return (result); } @@ -7343,6 +7547,7 @@ expand_word_list_internal (list, eflags) that the variable and environment assignments affect the shell's environment. */ assign_func = new_list ? assign_in_env : do_assignment; + tempenv_assign_error = 0; for (temp_list = subst_assign_varlist; temp_list; temp_list = temp_list->next) { @@ -7350,13 +7555,18 @@ expand_word_list_internal (list, eflags) tint = (*assign_func) (temp_list->word->word); /* Variable assignment errors in non-interactive shells running in Posix.2 mode cause the shell to exit. */ - if (tint == 0 && assign_func == do_assignment) + if (tint == 0) { - last_command_exit_value = EXECUTION_FAILURE; - if (interactive_shell == 0 && posixly_correct) - exp_jump_to_top_level (FORCE_EOF); + if (assign_func == do_assignment) + { + last_command_exit_value = EXECUTION_FAILURE; + if (interactive_shell == 0 && posixly_correct) + exp_jump_to_top_level (FORCE_EOF); + else + exp_jump_to_top_level (DISCARD); + } else - exp_jump_to_top_level (DISCARD); + tempenv_assign_error++; } } diff --git a/subst.c.save1 b/subst.c.save1 index d69a6684d..1262d2423 100644 --- a/subst.c.save1 +++ b/subst.c.save1 @@ -124,7 +124,13 @@ pid_t current_command_subst_pid = NO_PID; SHELL_VAR *ifs_var; char *ifs_value; unsigned char ifs_cmap[UCHAR_MAX + 1]; + +#if defined (HANDLE_MULTIBYTE) +unsigned char ifs_firstc[MB_LEN_MAX]; +size_t ifs_firstc_len; +#else unsigned char ifs_firstc; +#endif /* Extern functions and variables from different files. */ extern int last_command_exit_value, last_command_exit_signal; @@ -785,7 +791,7 @@ skip_double_quoted (string, slen, sind) { si = i + 2; if (string[i + 1] == LPAREN) - ret = extract_delimited_string (string, &si, "$(", "(", ")", EX_NOALLOC); + ret = extract_delimited_string (string, &si, "$(", "(", ")", EX_NOALLOC); /* ) */ else ret = extract_dollar_brace_string (string, &si, 0, EX_NOALLOC); @@ -862,8 +868,14 @@ string_extract_verbatim (string, sindex, charlist) char *charlist; { register int i = *sindex; + size_t slen; +#if defined (HANDLE_MULTIBYTE) + size_t clen; + wchar_t *wcharlist; +#endif int c; char *temp; + DECLARE_MBSTATE; if (charlist[0] == '\'' && charlist[1] == '\0') { @@ -872,18 +884,62 @@ string_extract_verbatim (string, sindex, charlist) return temp; } - for (i = *sindex; c = string[i]; i++) + slen = strlen (string + *sindex) + *sindex; + i = *sindex; +#if defined (HANDLE_MULTIBYTE) + clen = strlen (charlist); + wcharlist = 0; +#endif + while (c = string[i]) { +#if defined (HANDLE_MULTIBYTE) + size_t mblength; +#endif if (c == CTLESC) { - i++; + i += 2; continue; } +#if defined (HANDLE_MULTIBYTE) + mblength = MBLEN (string + i, slen - 1); + if (mblength > 1) + { + wchar_t wc; + mblength = mbtowc (&wc, string + i, slen - i); + if (MB_INVALIDCH (mblength)) + { + if (MEMBER (c, charlist)) + break; + } + else + { + if (wcharlist == 0) + { + size_t len; + len = mbstowcs (wcharlist, charlist, 0); + if (len == -1) + len = 0; + wcharlist = xmalloc ((sizeof (wchar_t) * len) + 1); + mbstowcs (wcharlist, charlist, len); + } + + if (wcschr (wcharlist, wc)) + break; + } + } + else +#endif if (MEMBER (c, charlist)) break; + + ADVANCE_CHAR (string, slen, i); } +#if defined (HANDLE_MULTIBYTE) + FREE (wcharlist); +#endif + temp = substring (string, *sindex, i); *sindex = i; @@ -892,13 +948,13 @@ string_extract_verbatim (string, sindex, charlist) /* Extract the $( construct in STRING, and return a new string. Start extracting at (SINDEX) as if we had just seen "$(". - Make (SINDEX) get the position of the matching ")". */ + Make (SINDEX) get the position of the matching ")". ) */ char * extract_command_subst (string, sindex) char *string; int *sindex; { - return (extract_delimited_string (string, sindex, "$(", "(", ")", 0)); + return (extract_delimited_string (string, sindex, "$(", "(", ")", 0)); /*)*/ } /* Extract the $[ construct in STRING, and return a new string. (]) @@ -1456,11 +1512,36 @@ split_at_delims (string, slen, delims, sentinel, nwp, cwp) d2 = 0; if (delims) { - d2 = (char *)xmalloc (strlen (delims) + 1); - for (i = ts = 0; delims[i]; i++) + size_t slength; +#if defined (HANDLE_MULTIBYTE) + size_t mblength = 1; +#endif + DECLARE_MBSTATE; + + slength = strlen (delims); + d2 = (char *)xmalloc (slength + 1); + i = ts = 0; + while (delims[i]) { - if (whitespace(delims[i]) == 0) +#if defined (HANDLE_MULTIBYTE) + mbstate_t state_bak = state; + mblength = MBRLEN (delims + i, slength, &state); + if (MB_INVALIDCH (mblength)) + state = state_bak; + else if (mblength > 1) + { + memcpy (d2 + ts, delims + i, mblength); + ts += mblength; + i += mblength; + slength -= mblength; + continue; + } +#endif + if (whitespace (delims[i]) == 0) d2[ts++] = delims[i]; + + i++; + slength--; } d2[ts] = '\0'; } @@ -1654,10 +1735,25 @@ char * string_list_dollar_star (list) WORD_LIST *list; { +#if defined (HANDLE_MULTIBYTE) + char sep[MB_CUR_MAX + 1]; +#else char sep[2]; +#endif + +#if defined (HANDLE_MULTIBYTE) + if (ifs_firstc_len == 1) + { + sep[0] = ifs_firstc[0]; + sep[1] = '\0'; + } + else + memcpy (sep, ifs_firstc, ifs_firstc_len); +#else sep[0] = ifs_firstc; sep[1] = '\0'; +#endif return (string_list_internal (list, sep)); } @@ -1676,14 +1772,44 @@ string_list_dollar_at (list, quoted) WORD_LIST *list; int quoted; { - char *ifs, sep[2]; + char *ifs; +#if defined (HANDLE_MULTIBYTE) + char sep[MB_CUR_MAX + 1]; +#else + char sep[2]; +#endif WORD_LIST *tlist; /* XXX this could just be ifs = ifs_value; */ ifs = ifs_var ? value_cell (ifs_var) : (char *)0; +#if defined (HANDLE_MULTIBYTE) + if (ifs && *ifs) + { + size_t mblength; + mblength = MBLEN (ifs, strnlen (ifs, MB_CUR_MAX)); + if (MB_INVALIDCH (mblength) || mblength == 1) + { + sep[0] = *ifs; + sep[1] = '\0'; + } + else if (mblength == 0) + sep[0] = '\0'; + else + { + memcpy (sep, ifs, mblength); + sep[mblength] = '\0'; + } + } + else + { + sep[0] = ' '; + sep[1] = '\0'; + } +#else sep[0] = (ifs == 0 || *ifs == 0) ? ' ' : *ifs; sep[1] = '\0'; +#endif tlist = ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (ifs && *ifs == 0)) ? quote_list (list) @@ -1732,6 +1858,7 @@ list_string (string, separators, quoted) WORD_DESC *t; char *current_word, *s; int sindex, sh_style_split, whitesep; + size_t slen; if (!string || !*string) return ((WORD_LIST *)NULL); @@ -1741,6 +1868,7 @@ list_string (string, separators, quoted) separators[2] == '\n' && separators[3] == '\0'; + slen = 0; /* Remove sequences of whitespace at the beginning of STRING, as long as those characters appear in IFS. Do not do this if STRING is quoted or if there are no separator characters. */ @@ -1805,7 +1933,12 @@ list_string (string, separators, quoted) /* Move past the current separator character. */ if (string[sindex]) - sindex++; + { + DECLARE_MBSTATE; + if (slen == 0) + slen = strlen (string); + ADVANCE_CHAR (string, slen, sindex); + } /* Now skip sequences of space, tab, or newline characters if they are in the list of separators. */ @@ -1836,6 +1969,7 @@ get_word_from_string (stringp, separators, endptr) register char *s; char *current_word; int sindex, sh_style_split, whitesep; + size_t slen; if (!stringp || !*stringp || !**stringp) return ((char *)NULL); @@ -1847,6 +1981,8 @@ get_word_from_string (stringp, separators, endptr) separators[2] == '\n' && separators[3] == '\0'; + slen = 0; + /* Remove sequences of whitespace at the beginning of STRING, as long as those characters appear in IFS. */ if (sh_style_split || !separators || !*separators) @@ -1881,7 +2017,12 @@ get_word_from_string (stringp, separators, endptr) /* Move past the current separator character. */ if (s[sindex]) - sindex++; + { + DECLARE_MBSTATE; + if (slen == 0) + slen = strlen (s); + ADVANCE_CHAR (s, slen, sindex); + } /* Now skip sequences of space, tab, or newline characters if they are in the list of separators. */ @@ -2024,10 +2165,10 @@ do_assignment_internal (string, expand) if (expand && temp[0]) { temp = (xstrchr (temp, '~') && unquoted_member ('~', temp)) - ? bash_tilde_expand (temp, 1) + ? bash_tilde_expand (temp, 2) : savestring (temp); - value = expand_string_if_necessary (temp, 0, expand_string_unsplit); + value = expand_string_if_necessary (temp, 0, expand_string_assignment); free (temp); } else @@ -2460,6 +2601,36 @@ expand_string_unsplit (string, quoted) return (value); } +/* Expand the rhs of an assignment statement */ +WORD_LIST * +expand_string_assignment (string, quoted) + char *string; + int quoted; +{ + WORD_DESC td; + WORD_LIST *value; + + if (string == 0 || *string == '\0') + return ((WORD_LIST *)NULL); + + expand_no_split_dollar_star = 1; + + td.flags = W_ASSIGNRHS; + td.word = savestring (string); + value = call_expand_word_internal (&td, quoted, 0, (int *)NULL, (int *)NULL); + FREE (td.word); + + expand_no_split_dollar_star = 0; + + if (value) + { + if (value->word) + remove_quoted_nulls (value->word->word); + dequote_list (value); + } + return (value); +} + /* Expand one of the PS? prompt strings. This is a sort of combination of expand_string_unsplit and expand_string_internal, but returns the @@ -6180,6 +6351,7 @@ expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_somethin string (e.g., "xx"ab), or is fully quoted (e.g., "xxab"). */ int quoted_state; + /* State flags */ int had_quoted_null; int has_dollar_at; int tflag; @@ -6809,7 +6981,8 @@ setifs (v) ifs_var = v; ifs_value = v ? value_cell (v) : " \t\n"; - /* Should really merge ifs_cmap with sh_syntaxtab. */ + /* Should really merge ifs_cmap with sh_syntaxtab. XXX - doesn't yet + handle multibyte chars in IFS */ memset (ifs_cmap, '\0', sizeof (ifs_cmap)); for (t = ifs_value ; t && *t; t++) { @@ -6817,7 +6990,29 @@ setifs (v) ifs_cmap[uc] = 1; } +#if defined (HANDLE_MULTIBYTE) + if (ifs_value == 0) + { + ifs_firstc[0] = '\0'; + ifs_firstc_len = 1; + } + else + { + size_t ifs_len; + ifs_len = strnlen (ifs_value, MB_CUR_MAX); + ifs_firstc_len = MBLEN (ifs_value, ifs_len); + if (ifs_firstc_len == 1 || ifs_firstc_len == 0 || MB_INVALIDCH (ifs_firstc_len)) + { + ifs_firstc[0] = ifs_value[0]; + ifs_firstc[1] = '\0'; + ifs_firstc_len = 1; + } + else + memcpy (ifs_firstc, ifs_value, ifs_firstc_len); + } +#else ifs_firstc = ifs_value ? *ifs_value : 0; +#endif } char * diff --git a/subst.c.save2 b/subst.c.save2 new file mode 100644 index 000000000..b647dd1f8 --- /dev/null +++ b/subst.c.save2 @@ -0,0 +1,7700 @@ +/* subst.c -- The part of the shell that does parameter, command, and + globbing substitutions. */ + +/* ``Have a little faith, there's magic in the night. You ain't a + beauty, but, hey, you're alright.'' */ + +/* Copyright (C) 1987-2004 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 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. */ + +#include "config.h" + +#include "bashtypes.h" +#include +#include "chartypes.h" +#include +#include +#include + +#if defined (HAVE_UNISTD_H) +# include +#endif + +#include "bashansi.h" +#include "posixstat.h" +#include "bashintl.h" + +#include "shell.h" +#include "flags.h" +#include "jobs.h" +#include "execute_cmd.h" +#include "filecntl.h" +#include "trap.h" +#include "pathexp.h" +#include "mailcheck.h" + +#include "shmbutil.h" + +#include "builtins/getopt.h" +#include "builtins/common.h" + +#include +#include + +#if !defined (errno) +extern int errno; +#endif /* !errno */ + +/* The size that strings change by. */ +#define DEFAULT_INITIAL_ARRAY_SIZE 112 +#define DEFAULT_ARRAY_SIZE 128 + +/* Variable types. */ +#define VT_VARIABLE 0 +#define VT_POSPARMS 1 +#define VT_ARRAYVAR 2 +#define VT_ARRAYMEMBER 3 + +#define VT_STARSUB 128 /* $* or ${array[*]} -- used to split */ + +/* Flags for quoted_strchr */ +#define ST_BACKSL 0x01 +#define ST_CTLESC 0x02 +#define ST_SQUOTE 0x04 /* unused yet */ +#define ST_DQUOTE 0x08 /* unused yet */ + +/* Flags for the string extraction functions. */ +#define EX_NOALLOC 0x01 /* just skip; don't return substring */ +#define EX_VARNAME 0x02 /* variable name; for string_extract () */ + +/* Flags for the `pflags' argument to param_expand() */ +#define PF_NOCOMSUB 0x01 /* Do not perform command substitution */ + +/* These defs make it easier to use the editor. */ +#define LBRACE '{' +#define RBRACE '}' +#define LPAREN '(' +#define RPAREN ')' + +/* Evaluates to 1 if C is one of the shell's special parameters whose length + can be taken, but is also one of the special expansion characters. */ +#define VALID_SPECIAL_LENGTH_PARAM(c) \ + ((c) == '-' || (c) == '?' || (c) == '#') + +/* Evaluates to 1 if C is one of the shell's special parameters for which an + indirect variable reference may be made. */ +#define VALID_INDIR_PARAM(c) \ + ((c) == '#' || (c) == '?' || (c) == '@' || (c) == '*') + +/* Evaluates to 1 if C is one of the OP characters that follows the parameter + in ${parameter[:]OPword}. */ +#define VALID_PARAM_EXPAND_CHAR(c) (sh_syntaxtab[(unsigned char)c] & CSUBSTOP) + +/* Evaluates to 1 if this is one of the shell's special variables. */ +#define SPECIAL_VAR(name, wi) \ + ((DIGIT (*name) && all_digits (name)) || \ + (name[1] == '\0' && (sh_syntaxtab[(unsigned char)*name] & CSPECVAR)) || \ + (wi && name[2] == '\0' && VALID_INDIR_PARAM (name[1]))) + +/* An expansion function that takes a string and a quoted flag and returns + a WORD_LIST *. Used as the type of the third argument to + expand_string_if_necessary(). */ +typedef WORD_LIST *EXPFUNC __P((char *, int)); + +/* Process ID of the last command executed within command substitution. */ +pid_t last_command_subst_pid = NO_PID; +pid_t current_command_subst_pid = NO_PID; + +/* Variables used to keep track of the characters in IFS. */ +SHELL_VAR *ifs_var; +char *ifs_value; +unsigned char ifs_cmap[UCHAR_MAX + 1]; + +#if defined (HANDLE_MULTIBYTE) +unsigned char ifs_firstc[MB_LEN_MAX]; +size_t ifs_firstc_len; +#else +unsigned char ifs_firstc; +#endif + +/* Extern functions and variables from different files. */ +extern int last_command_exit_value, last_command_exit_signal; +extern int subshell_environment; +extern int subshell_level; +extern int eof_encountered; +extern int return_catch_flag, return_catch_value; +extern pid_t dollar_dollar_pid; +extern int posixly_correct; +extern char *this_command_name; +extern struct fd_bitmap *current_fds_to_close; +extern int wordexp_only; +extern int expanding_redir; +extern int tempenv_assign_error; + +/* Non-zero means to allow unmatched globbed filenames to expand to + a null file. */ +int allow_null_glob_expansion; + +/* Non-zero means to throw an error when globbing fails to match anything. */ +int fail_glob_expansion; + +#if 0 +/* Variables to keep track of which words in an expanded word list (the + output of expand_word_list_internal) are the result of globbing + expansions. GLOB_ARGV_FLAGS is used by execute_cmd.c. + (CURRENTLY UNUSED). */ +char *glob_argv_flags; +static int glob_argv_flags_size; +#endif + +static WORD_LIST expand_word_error, expand_word_fatal; +static char expand_param_error, expand_param_fatal; + +/* Tell the expansion functions to not longjmp back to top_level on fatal + errors. Enabled when doing completion and prompt string expansion. */ +static int no_longjmp_on_fatal_error = 0; + +/* Set by expand_word_unsplit; used to inhibit splitting and re-joining + $* on $IFS, primarily when doing assignment statements. */ +static int expand_no_split_dollar_star = 0; + +/* Used to hold a list of variable assignments preceding a command. Global + so the SIGCHLD handler in jobs.c can unwind-protect it when it runs a + SIGCHLD trap. */ +WORD_LIST *subst_assign_varlist = (WORD_LIST *)NULL; + +/* A WORD_LIST of words to be expanded by expand_word_list_internal, + without any leading variable assignments. */ +static WORD_LIST *garglist = (WORD_LIST *)NULL; + +static char *quoted_substring __P((char *, int, int)); +static int quoted_strlen __P((char *)); +static char *quoted_strchr __P((char *, int, int)); + +static char *expand_string_if_necessary __P((char *, int, EXPFUNC *)); +static inline char *expand_string_to_string_internal __P((char *, int, EXPFUNC *)); +static WORD_LIST *call_expand_word_internal __P((WORD_DESC *, int, int, int *, int *)); +static WORD_LIST *expand_string_internal __P((char *, int)); +static WORD_LIST *expand_string_leave_quoted __P((char *, int)); +static WORD_LIST *expand_string_for_rhs __P((char *, int, int *, int *)); + +static WORD_LIST *list_quote_escapes __P((WORD_LIST *)); +static char *dequote_escapes __P((char *)); +static char *make_quoted_char __P((int)); +static WORD_LIST *quote_list __P((WORD_LIST *)); +static WORD_LIST *dequote_list __P((WORD_LIST *)); +static char *remove_quoted_escapes __P((char *)); +static char *remove_quoted_nulls __P((char *)); + +static int unquoted_substring __P((char *, char *)); +static int unquoted_member __P((int, char *)); + +static int do_assignment_internal __P((const char *, int)); + +static char *string_extract_verbatim __P((char *, int *, char *)); +static char *string_extract __P((char *, int *, char *, int)); +static char *string_extract_double_quoted __P((char *, int *, int)); +static inline char *string_extract_single_quoted __P((char *, int *)); +static inline int skip_single_quoted __P((char *, size_t, int)); +static int skip_double_quoted __P((char *, size_t, int)); +static char *extract_delimited_string __P((char *, int *, char *, char *, char *, int)); +static char *extract_dollar_brace_string __P((char *, int *, int, int)); + +static char *pos_params __P((char *, int, int, int)); + +static unsigned char *mb_getcharlens __P((char *, int)); + +static char *remove_upattern __P((char *, char *, int)); +#if defined (HANDLE_MULTIBYTE) +# if !defined (HAVE_WCSDUP) +static wchar_t *wcsdup __P((wchar_t *)); +# endif +static wchar_t *remove_wpattern __P((wchar_t *, size_t, wchar_t *, int)); +#endif +static char *remove_pattern __P((char *, char *, int)); + +static int match_pattern_char __P((char *, char *)); +static int match_upattern __P((char *, char *, int, char **, char **)); +#if defined (HANDLE_MULTIBYTE) +static int match_pattern_wchar __P((wchar_t *, wchar_t *)); +static int match_wpattern __P((wchar_t *, char **, size_t, wchar_t *, int, char **, char **)); +#endif +static int match_pattern __P((char *, char *, int, char **, char **)); +static int getpatspec __P((int, char *)); +static char *getpattern __P((char *, int, int)); +static char *variable_remove_pattern __P((char *, char *, int, int)); +static char *list_remove_pattern __P((WORD_LIST *, char *, int, int, int)); +static char *parameter_list_remove_pattern __P((int, char *, int, int)); +#ifdef ARRAY_VARS +static char *array_remove_pattern __P((ARRAY *, char *, int, char *, int)); +#endif +static char *parameter_brace_remove_pattern __P((char *, char *, char *, int, int)); + +static char *process_substitute __P((char *, int)); + +static char *read_comsub __P((int, int)); + +#ifdef ARRAY_VARS +static arrayind_t array_length_reference __P((char *)); +#endif + +static int valid_brace_expansion_word __P((char *, int)); +static int chk_atstar __P((char *, int, int *, int *)); + +static char *parameter_brace_expand_word __P((char *, int, int)); +static char *parameter_brace_expand_indir __P((char *, int, int, int *, int *)); +static char *parameter_brace_expand_rhs __P((char *, char *, int, int, int *, int *)); +static void parameter_brace_expand_error __P((char *, char *)); + +static int valid_length_expression __P((char *)); +static intmax_t parameter_brace_expand_length __P((char *)); + +static char *skiparith __P((char *, int)); +static int verify_substring_values __P((char *, char *, int, intmax_t *, intmax_t *)); +static int get_var_and_type __P((char *, char *, int, SHELL_VAR **, char **)); +static char *mb_substring __P((char *, int, int)); +static char *parameter_brace_substring __P((char *, char *, char *, int)); + +static char *pos_params_pat_subst __P((char *, char *, char *, int)); + +static char *parameter_brace_patsub __P((char *, char *, char *, int)); + +static char *parameter_brace_expand __P((char *, int *, int, int *, int *)); +static char *param_expand __P((char *, int *, int, int *, int *, int *, int *, int)); + +static WORD_LIST *expand_word_internal __P((WORD_DESC *, int, int, int *, int *)); + +static WORD_LIST *word_list_split __P((WORD_LIST *)); + +static void exp_jump_to_top_level __P((int)); + +static WORD_LIST *separate_out_assignments __P((WORD_LIST *)); +static WORD_LIST *glob_expand_word_list __P((WORD_LIST *, int)); +#ifdef BRACE_EXPANSION +static WORD_LIST *brace_expand_word_list __P((WORD_LIST *, int)); +#endif +static WORD_LIST *shell_expand_word_list __P((WORD_LIST *, int)); +static WORD_LIST *expand_word_list_internal __P((WORD_LIST *, int)); + +/* **************************************************************** */ +/* */ +/* Utility Functions */ +/* */ +/* **************************************************************** */ + +#ifdef INCLUDE_UNUSED +static char * +quoted_substring (string, start, end) + char *string; + int start, end; +{ + register int len, l; + register char *result, *s, *r; + + len = end - start; + + /* Move to string[start], skipping quoted characters. */ + for (s = string, l = 0; *s && l < start; ) + { + if (*s == CTLESC) + { + s++; + continue; + } + l++; + if (*s == 0) + break; + } + + r = result = (char *)xmalloc (2*len + 1); /* save room for quotes */ + + /* Copy LEN characters, including quote characters. */ + s = string + l; + for (l = 0; l < len; s++) + { + if (*s == CTLESC) + *r++ = *s++; + *r++ = *s; + l++; + if (*s == 0) + break; + } + *r = '\0'; + return result; +} +#endif + +#ifdef INCLUDE_UNUSED +/* Return the length of S, skipping over quoted characters */ +static int +quoted_strlen (s) + char *s; +{ + register char *p; + int i; + + i = 0; + for (p = s; *p; p++) + { + if (*p == CTLESC) + { + p++; + if (*p == 0) + return (i + 1); + } + i++; + } + + return i; +} +#endif + +/* Find the first occurrence of character C in string S, obeying shell + quoting rules. If (FLAGS & ST_BACKSL) is non-zero, backslash-escaped + characters are skipped. If (FLAGS & ST_CTLESC) is non-zero, characters + escaped with CTLESC are skipped. */ +static char * +quoted_strchr (s, c, flags) + char *s; + int c, flags; +{ + register char *p; + + for (p = s; *p; p++) + { + if (((flags & ST_BACKSL) && *p == '\\') + || ((flags & ST_CTLESC) && *p == CTLESC)) + { + p++; + if (*p == '\0') + return ((char *)NULL); + continue; + } + else if (*p == c) + return p; + } + return ((char *)NULL); +} + +/* Return 1 if CHARACTER appears in an unquoted portion of + STRING. Return 0 otherwise. CHARACTER must be a single-byte character. */ +static int +unquoted_member (character, string) + int character; + char *string; +{ + size_t slen; + int sindex, c; + DECLARE_MBSTATE; + + slen = strlen (string); + sindex = 0; + while (c = string[sindex]) + { + if (c == character) + return (1); + + switch (c) + { + default: + ADVANCE_CHAR (string, slen, sindex); + break; + + case '\\': + sindex++; + if (string[sindex]) + ADVANCE_CHAR (string, slen, sindex); + break; + + case '\'': + sindex = skip_single_quoted (string, slen, ++sindex); + break; + + case '"': + sindex = skip_double_quoted (string, slen, ++sindex); + break; + } + } + return (0); +} + +/* Return 1 if SUBSTR appears in an unquoted portion of STRING. */ +static int +unquoted_substring (substr, string) + char *substr, *string; +{ + size_t slen; + int sindex, c, sublen; + DECLARE_MBSTATE; + + if (substr == 0 || *substr == '\0') + return (0); + + slen = strlen (string); + sublen = strlen (substr); + for (sindex = 0; c = string[sindex]; ) + { + if (STREQN (string + sindex, substr, sublen)) + return (1); + + switch (c) + { + case '\\': + sindex++; + + if (string[sindex]) + ADVANCE_CHAR (string, slen, sindex); + break; + + case '\'': + sindex = skip_single_quoted (string, slen, ++sindex); + break; + + case '"': + sindex = skip_double_quoted (string, slen, ++sindex); + break; + + default: + ADVANCE_CHAR (string, slen, sindex); + break; + } + } + return (0); +} + +/* Most of the substitutions must be done in parallel. In order + to avoid using tons of unclear goto's, I have some functions + for manipulating malloc'ed strings. They all take INDX, a + pointer to an integer which is the offset into the string + where manipulation is taking place. They also take SIZE, a + pointer to an integer which is the current length of the + character array for this string. */ + +/* Append SOURCE to TARGET at INDEX. SIZE is the current amount + of space allocated to TARGET. SOURCE can be NULL, in which + case nothing happens. Gets rid of SOURCE by freeing it. + Returns TARGET in case the location has changed. */ +INLINE char * +sub_append_string (source, target, indx, size) + char *source, *target; + int *indx, *size; +{ + if (source) + { + int srclen, n; + + srclen = STRLEN (source); + if (srclen >= (int)(*size - *indx)) + { + n = srclen + *indx; + n = (n + DEFAULT_ARRAY_SIZE) - (n % DEFAULT_ARRAY_SIZE); + target = (char *)xrealloc (target, (*size = n)); + } + + FASTCOPY (source, target + *indx, srclen); + *indx += srclen; + target[*indx] = '\0'; + + free (source); + } + return (target); +} + +#if 0 +/* UNUSED */ +/* Append the textual representation of NUMBER to TARGET. + INDX and SIZE are as in SUB_APPEND_STRING. */ +char * +sub_append_number (number, target, indx, size) + intmax_t number; + int *indx, *size; + char *target; +{ + char *temp; + + temp = itos (number); + return (sub_append_string (temp, target, indx, size)); +} +#endif + +/* Extract a substring from STRING, starting at SINDEX and ending with + one of the characters in CHARLIST. Don't make the ending character + part of the string. Leave SINDEX pointing at the ending character. + Understand about backslashes in the string. If (flags & EX_VARNAME) + is non-zero, and array variables have been compiled into the shell, + everything between a `[' and a corresponding `]' is skipped over. + If (flags & EX_NOALLOC) is non-zero, don't return the substring, just + update SINDEX. */ +static char * +string_extract (string, sindex, charlist, flags) + char *string; + int *sindex; + char *charlist; + int flags; +{ + register int c, i; + size_t slen; + char *temp; + DECLARE_MBSTATE; + + slen = strlen (string + *sindex) + *sindex; + i = *sindex; + while (c = string[i]) + { + if (c == '\\') + { + if (string[i + 1]) + i++; + else + break; + } +#if defined (ARRAY_VARS) + else if ((flags & EX_VARNAME) && c == '[') + { + int ni; + /* If this is an array subscript, skip over it and continue. */ + ni = skipsubscript (string, i); + if (string[ni] == ']') + i = ni; + } +#endif + else if (MEMBER (c, charlist)) + break; + + ADVANCE_CHAR (string, slen, i); + } + + temp = (flags & EX_NOALLOC) ? (char *)NULL : substring (string, *sindex, i); + *sindex = i; + return (temp); +} + +/* Extract the contents of STRING as if it is enclosed in double quotes. + SINDEX, when passed in, is the offset of the character immediately + following the opening double quote; on exit, SINDEX is left pointing after + the closing double quote. If STRIPDQ is non-zero, unquoted double + quotes are stripped and the string is terminated by a null byte. + Backslashes between the embedded double quotes are processed. If STRIPDQ + is zero, an unquoted `"' terminates the string. */ +static char * +string_extract_double_quoted (string, sindex, stripdq) + char *string; + int *sindex, stripdq; +{ + size_t slen; + char *send; + int j, i, t; + unsigned char c; + char *temp, *ret; /* The new string we return. */ + int pass_next, backquote, si; /* State variables for the machine. */ + int dquote; + DECLARE_MBSTATE; + + slen = strlen (string + *sindex) + *sindex; + send = string + slen; + + pass_next = backquote = dquote = 0; + temp = (char *)xmalloc (1 + slen - *sindex); + + j = 0; + i = *sindex; + while (c = string[i]) + { + /* Process a character that was quoted by a backslash. */ + if (pass_next) + { + /* Posix.2 sez: + + ``The backslash shall retain its special meaning as an escape + character only when followed by one of the characters: + $ ` " \ ''. + + If STRIPDQ is zero, we handle the double quotes here and let + expand_word_internal handle the rest. If STRIPDQ is non-zero, + we have already been through one round of backslash stripping, + and want to strip these backslashes only if DQUOTE is non-zero, + indicating that we are inside an embedded double-quoted string. */ + + /* If we are in an embedded quoted string, then don't strip + backslashes before characters for which the backslash + retains its special meaning, but remove backslashes in + front of other characters. If we are not in an + embedded quoted string, don't strip backslashes at all. + This mess is necessary because the string was already + surrounded by double quotes (and sh has some really weird + quoting rules). + The returned string will be run through expansion as if + it were double-quoted. */ + if ((stripdq == 0 && c != '"') || + (stripdq && ((dquote && (sh_syntaxtab[c] & CBSDQUOTE)) || dquote == 0))) + temp[j++] = '\\'; + pass_next = 0; + +add_one_character: + COPY_CHAR_I (temp, j, string, send, i); + continue; + } + + /* A backslash protects the next character. The code just above + handles preserving the backslash in front of any character but + a double quote. */ + if (c == '\\') + { + pass_next++; + i++; + continue; + } + + /* Inside backquotes, ``the portion of the quoted string from the + initial backquote and the characters up to the next backquote + that is not preceded by a backslash, having escape characters + removed, defines that command''. */ + if (backquote) + { + if (c == '`') + backquote = 0; + temp[j++] = c; + i++; + continue; + } + + if (c == '`') + { + temp[j++] = c; + backquote++; + i++; + continue; + } + + /* Pass everything between `$(' and the matching `)' or a quoted + ${ ... } pair through according to the Posix.2 specification. */ + if (c == '$' && ((string[i + 1] == LPAREN) || (string[i + 1] == LBRACE))) + { + int free_ret = 1; + + si = i + 2; + if (string[i + 1] == LPAREN) + ret = extract_delimited_string (string, &si, "$(", "(", ")", 0); /*)*/ + else + ret = extract_dollar_brace_string (string, &si, 1, 0); + + temp[j++] = '$'; + temp[j++] = string[i + 1]; + + /* Just paranoia; ret will not be 0 unless no_longjmp_on_fatal_error + is set. */ + if (ret == 0 && no_longjmp_on_fatal_error) + { + free_ret = 0; + ret = string + i + 2; + } + + for (t = 0; ret[t]; t++, j++) + temp[j] = ret[t]; + temp[j] = string[si]; + + if (string[si]) + { + j++; + i = si + 1; + } + else + i = si; + + if (free_ret) + free (ret); + continue; + } + + /* Add any character but a double quote to the quoted string we're + accumulating. */ + if (c != '"') + goto add_one_character; + + /* c == '"' */ + if (stripdq) + { + dquote ^= 1; + i++; + continue; + } + + break; + } + temp[j] = '\0'; + + /* Point to after the closing quote. */ + if (c) + i++; + *sindex = i; + + return (temp); +} + +/* This should really be another option to string_extract_double_quoted. */ +static int +skip_double_quoted (string, slen, sind) + char *string; + size_t slen; + int sind; +{ + int c, i; + char *ret; + int pass_next, backquote, si; + DECLARE_MBSTATE; + + pass_next = backquote = 0; + i = sind; + while (c = string[i]) + { + if (pass_next) + { + pass_next = 0; + ADVANCE_CHAR (string, slen, i); + continue; + } + else if (c == '\\') + { + pass_next++; + i++; + continue; + } + else if (backquote) + { + if (c == '`') + backquote = 0; + ADVANCE_CHAR (string, slen, i); + continue; + } + else if (c == '`') + { + backquote++; + i++; + continue; + } + else if (c == '$' && ((string[i + 1] == LPAREN) || (string[i + 1] == LBRACE))) + { + si = i + 2; + if (string[i + 1] == LPAREN) + ret = extract_delimited_string (string, &si, "$(", "(", ")", EX_NOALLOC); /* ) */ + else + ret = extract_dollar_brace_string (string, &si, 0, EX_NOALLOC); + + i = si + 1; + continue; + } + else if (c != '"') + { + ADVANCE_CHAR (string, slen, i); + continue; + } + else + break; + } + + if (c) + i++; + + return (i); +} + +/* Extract the contents of STRING as if it is enclosed in single quotes. + SINDEX, when passed in, is the offset of the character immediately + following the opening single quote; on exit, SINDEX is left pointing after + the closing single quote. */ +static inline char * +string_extract_single_quoted (string, sindex) + char *string; + int *sindex; +{ + register int i; + size_t slen; + char *t; + DECLARE_MBSTATE; + + slen = strlen (string + *sindex) + *sindex; + i = *sindex; + while (string[i] && string[i] != '\'') + ADVANCE_CHAR (string, slen, i); + + t = substring (string, *sindex, i); + + if (string[i]) + i++; + *sindex = i; + + return (t); +} + +static inline int +skip_single_quoted (string, slen, sind) + char *string; + size_t slen; + int sind; +{ + register int c; + DECLARE_MBSTATE; + + c = sind; + while (string[c] && string[c] != '\'') + ADVANCE_CHAR (string, slen, c); + + if (string[c]) + c++; + return c; +} + +/* Just like string_extract, but doesn't hack backslashes or any of + that other stuff. Obeys CTLESC quoting. Used to do splitting on $IFS. */ +static char * +string_extract_verbatim (string, sindex, charlist) + char *string; + int *sindex; + char *charlist; +{ + register int i = *sindex; + size_t slen; +#if defined (HANDLE_MULTIBYTE) + size_t clen; + wchar_t *wcharlist; +#endif + int c; + char *temp; + DECLARE_MBSTATE; + + if (charlist[0] == '\'' && charlist[1] == '\0') + { + temp = string_extract_single_quoted (string, sindex); + --*sindex; /* leave *sindex at separator character */ + return temp; + } + + slen = strlen (string + *sindex) + *sindex; + i = *sindex; +#if defined (HANDLE_MULTIBYTE) + clen = strlen (charlist); + wcharlist = 0; +#endif + while (c = string[i]) + { +#if defined (HANDLE_MULTIBYTE) + size_t mblength; +#endif + if (c == CTLESC) + { + i += 2; + continue; + } + +#if defined (HANDLE_MULTIBYTE) + mblength = MBLEN (string + i, slen - 1); + if (mblength > 1) + { + wchar_t wc; + mblength = mbtowc (&wc, string + i, slen - i); + if (MB_INVALIDCH (mblength)) + { + if (MEMBER (c, charlist)) + break; + } + else + { + if (wcharlist == 0) + { + size_t len; + len = mbstowcs (wcharlist, charlist, 0); + if (len == -1) + len = 0; + wcharlist = xmalloc ((sizeof (wchar_t) * len) + 1); + mbstowcs (wcharlist, charlist, len); + } + + if (wcschr (wcharlist, wc)) + break; + } + } + else +#endif + if (MEMBER (c, charlist)) + break; + + ADVANCE_CHAR (string, slen, i); + } + +#if defined (HANDLE_MULTIBYTE) + FREE (wcharlist); +#endif + + temp = substring (string, *sindex, i); + *sindex = i; + + return (temp); +} + +/* Extract the $( construct in STRING, and return a new string. + Start extracting at (SINDEX) as if we had just seen "$(". + Make (SINDEX) get the position of the matching ")". ) */ +char * +extract_command_subst (string, sindex) + char *string; + int *sindex; +{ + return (extract_delimited_string (string, sindex, "$(", "(", ")", 0)); /*)*/ +} + +/* Extract the $[ construct in STRING, and return a new string. (]) + Start extracting at (SINDEX) as if we had just seen "$[". + Make (SINDEX) get the position of the matching "]". */ +char * +extract_arithmetic_subst (string, sindex) + char *string; + int *sindex; +{ + return (extract_delimited_string (string, sindex, "$[", "[", "]", 0)); /*]*/ +} + +#if defined (PROCESS_SUBSTITUTION) +/* Extract the <( or >( construct in STRING, and return a new string. + Start extracting at (SINDEX) as if we had just seen "<(". + Make (SINDEX) get the position of the matching ")". */ /*))*/ +char * +extract_process_subst (string, starter, sindex) + char *string; + char *starter; + int *sindex; +{ + return (extract_delimited_string (string, sindex, starter, "(", ")", 0)); +} +#endif /* PROCESS_SUBSTITUTION */ + +#if defined (ARRAY_VARS) +char * +extract_array_assignment_list (string, sindex) + char *string; + int *sindex; +{ + return (extract_delimited_string (string, sindex, "(", (char *)NULL, ")", 0)); +} +#endif + +/* Extract and create a new string from the contents of STRING, a + character string delimited with OPENER and CLOSER. SINDEX is + the address of an int describing the current offset in STRING; + it should point to just after the first OPENER found. On exit, + SINDEX gets the position of the last character of the matching CLOSER. + If OPENER is more than a single character, ALT_OPENER, if non-null, + contains a character string that can also match CLOSER and thus + needs to be skipped. */ +static char * +extract_delimited_string (string, sindex, opener, alt_opener, closer, flags) + char *string; + int *sindex; + char *opener, *alt_opener, *closer; + int flags; +{ + int i, c, si; + size_t slen; + char *t, *result; + int pass_character, nesting_level; + int len_closer, len_opener, len_alt_opener; + DECLARE_MBSTATE; + + slen = strlen (string + *sindex) + *sindex; + len_opener = STRLEN (opener); + len_alt_opener = STRLEN (alt_opener); + len_closer = STRLEN (closer); + + pass_character = 0; + + nesting_level = 1; + i = *sindex; + + while (nesting_level) + { + c = string[i]; + + if (c == 0) + break; + + if (pass_character) /* previous char was backslash */ + { + pass_character = 0; + ADVANCE_CHAR (string, slen, i); + continue; + } + + if (c == CTLESC || c == '\\') + { + pass_character++; + i++; + continue; + } + + /* Process a nested OPENER. */ + if (STREQN (string + i, opener, len_opener)) + { + si = i + len_opener; + t = extract_delimited_string (string, &si, opener, alt_opener, closer, flags|EX_NOALLOC); + i = si + 1; + continue; + } + + /* Process a nested ALT_OPENER */ + if (len_alt_opener && STREQN (string + i, alt_opener, len_alt_opener)) + { + si = i + len_alt_opener; + t = extract_delimited_string (string, &si, alt_opener, alt_opener, closer, flags|EX_NOALLOC); + i = si + 1; + continue; + } + + /* If the current substring terminates the delimited string, decrement + the nesting level. */ + if (STREQN (string + i, closer, len_closer)) + { + i += len_closer - 1; /* move to last byte of the closer */ + nesting_level--; + if (nesting_level == 0) + break; + } + + /* Pass old-style command substitution through verbatim. */ + if (c == '`') + { + si = i + 1; + t = string_extract (string, &si, "`", flags|EX_NOALLOC); + i = si + 1; + continue; + } + + /* Pass single-quoted and double-quoted strings through verbatim. */ + if (c == '\'' || c == '"') + { + si = i + 1; + i = (c == '\'') ? skip_single_quoted (string, slen, si) + : skip_double_quoted (string, slen, si); + continue; + } + + /* move past this character, which was not special. */ + ADVANCE_CHAR (string, slen, i); + } + + if (c == 0 && nesting_level) + { + if (no_longjmp_on_fatal_error == 0) + { + report_error (_("bad substitution: no closing `%s' in %s"), closer, string); + last_command_exit_value = EXECUTION_FAILURE; + exp_jump_to_top_level (DISCARD); + } + else + { + *sindex = i; + return (char *)NULL; + } + } + + si = i - *sindex - len_closer + 1; + if (flags & EX_NOALLOC) + result = (char *)NULL; + else + { + result = (char *)xmalloc (1 + si); + strncpy (result, string + *sindex, si); + result[si] = '\0'; + } + *sindex = i; + + return (result); +} + +/* Extract a parameter expansion expression within ${ and } from STRING. + Obey the Posix.2 rules for finding the ending `}': count braces while + skipping over enclosed quoted strings and command substitutions. + SINDEX is the address of an int describing the current offset in STRING; + it should point to just after the first `{' found. On exit, SINDEX + gets the position of the matching `}'. QUOTED is non-zero if this + occurs inside double quotes. */ +/* XXX -- this is very similar to extract_delimited_string -- XXX */ +static char * +extract_dollar_brace_string (string, sindex, quoted, flags) + char *string; + int *sindex, quoted, flags; +{ + register int i, c; + size_t slen; + int pass_character, nesting_level, si; + char *result, *t; + DECLARE_MBSTATE; + + pass_character = 0; + nesting_level = 1; + slen = strlen (string + *sindex) + *sindex; + + i = *sindex; + while (c = string[i]) + { + if (pass_character) + { + pass_character = 0; + ADVANCE_CHAR (string, slen, i); + continue; + } + + /* CTLESCs and backslashes quote the next character. */ + if (c == CTLESC || c == '\\') + { + pass_character++; + i++; + continue; + } + + if (string[i] == '$' && string[i+1] == LBRACE) + { + nesting_level++; + i += 2; + continue; + } + + if (c == RBRACE) + { + nesting_level--; + if (nesting_level == 0) + break; + i++; + continue; + } + + /* Pass the contents of old-style command substitutions through + verbatim. */ + if (c == '`') + { + si = i + 1; + t = string_extract (string, &si, "`", flags|EX_NOALLOC); + i = si + 1; + continue; + } + + /* Pass the contents of new-style command substitutions and + arithmetic substitutions through verbatim. */ + if (string[i] == '$' && string[i+1] == LPAREN) + { + si = i + 2; + t = extract_delimited_string (string, &si, "$(", "(", ")", flags|EX_NOALLOC); /*)*/ + i = si + 1; + continue; + } + + /* Pass the contents of single-quoted and double-quoted strings + through verbatim. */ + if (c == '\'' || c == '"') + { + si = i + 1; + i = (c == '\'') ? skip_single_quoted (string, slen, si) + : skip_double_quoted (string, slen, si); + /* skip_XXX_quoted leaves index one past close quote */ + continue; + } + + /* move past this character, which was not special. */ + ADVANCE_CHAR (string, slen, i); + } + + if (c == 0 && nesting_level) + { + if (no_longjmp_on_fatal_error == 0) + { /* { */ + report_error ("bad substitution: no closing `%s' in %s", "}", string); + last_command_exit_value = EXECUTION_FAILURE; + exp_jump_to_top_level (DISCARD); + } + else + { + *sindex = i; + return ((char *)NULL); + } + } + + result = (flags & EX_NOALLOC) ? (char *)NULL : substring (string, *sindex, i); + *sindex = i; + + return (result); +} + +/* Remove backslashes which are quoting backquotes from STRING. Modifies + STRING, and returns a pointer to it. */ +char * +de_backslash (string) + char *string; +{ + register size_t slen; + register int i, j, prev_i; + DECLARE_MBSTATE; + + slen = strlen (string); + i = j = 0; + + /* Loop copying string[i] to string[j], i >= j. */ + while (i < slen) + { + if (string[i] == '\\' && (string[i + 1] == '`' || string[i + 1] == '\\' || + string[i + 1] == '$')) + i++; + prev_i = i; + ADVANCE_CHAR (string, slen, i); + if (j < prev_i) + do string[j++] = string[prev_i++]; while (prev_i < i); + else + j = i; + } + string[j] = '\0'; + + return (string); +} + +#if 0 +/*UNUSED*/ +/* Replace instances of \! in a string with !. */ +void +unquote_bang (string) + char *string; +{ + register int i, j; + register char *temp; + + temp = (char *)xmalloc (1 + strlen (string)); + + for (i = 0, j = 0; (temp[j] = string[i]); i++, j++) + { + if (string[i] == '\\' && string[i + 1] == '!') + { + temp[j] = '!'; + i++; + } + } + strcpy (string, temp); + free (temp); +} +#endif + +#if defined (READLINE) +/* Return 1 if the portion of STRING ending at EINDEX is quoted (there is + an unclosed quoted string), or if the character at EINDEX is quoted + by a backslash. NO_LONGJMP_ON_FATAL_ERROR is used to flag that the various + single and double-quoted string parsing functions should not return an + error if there are unclosed quotes or braces. The characters that this + recognizes need to be the same as the contents of + rl_completer_quote_characters. */ + +#define CQ_RETURN(x) do { no_longjmp_on_fatal_error = 0; return (x); } while (0) + +int +char_is_quoted (string, eindex) + char *string; + int eindex; +{ + int i, pass_next, c; + size_t slen; + DECLARE_MBSTATE; + + slen = strlen (string); + no_longjmp_on_fatal_error = 1; + i = pass_next = 0; + while (i <= eindex) + { + c = string[i]; + + if (pass_next) + { + pass_next = 0; + if (i >= eindex) /* XXX was if (i >= eindex - 1) */ + CQ_RETURN(1); + ADVANCE_CHAR (string, slen, i); + continue; + } + else if (c == '\\') + { + pass_next = 1; + i++; + continue; + } + else if (c == '\'' || c == '"') + { + i = (c == '\'') ? skip_single_quoted (string, slen, ++i) + : skip_double_quoted (string, slen, ++i); + if (i > eindex) + CQ_RETURN(1); + /* no increment, the skip_xxx functions go one past end */ + } + else + ADVANCE_CHAR (string, slen, i); + } + + CQ_RETURN(0); +} + +int +unclosed_pair (string, eindex, openstr) + char *string; + int eindex; + char *openstr; +{ + int i, pass_next, openc, olen; + size_t slen; + DECLARE_MBSTATE; + + slen = strlen (string); + olen = strlen (openstr); + i = pass_next = openc = 0; + while (i <= eindex) + { + if (pass_next) + { + pass_next = 0; + if (i >= eindex) /* XXX was if (i >= eindex - 1) */ + return 0; + ADVANCE_CHAR (string, slen, i); + continue; + } + else if (string[i] == '\\') + { + pass_next = 1; + i++; + continue; + } + else if (STREQN (string + i, openstr, olen)) + { + openc = 1 - openc; + i += olen; + } + else if (string[i] == '\'' || string[i] == '"') + { + i = (string[i] == '\'') ? skip_single_quoted (string, slen, i) + : skip_double_quoted (string, slen, i); + if (i > eindex) + return 0; + } + else + ADVANCE_CHAR (string, slen, i); + } + return (openc); +} + +/* Skip characters in STRING until we find a character in DELIMS, and return + the index of that character. START is the index into string at which we + begin. This is similar in spirit to strpbrk, but it returns an index into + STRING and takes a starting index. This little piece of code knows quite + a lot of shell syntax. It's very similar to skip_double_quoted and other + functions of that ilk. */ +int +skip_to_delim (string, start, delims) + char *string; + int start; + char *delims; +{ + int i, pass_next, backq, si, c; + size_t slen; + char *temp; + DECLARE_MBSTATE; + + slen = strlen (string + start) + start; + no_longjmp_on_fatal_error = 1; + i = start; + pass_next = backq = 0; + while (c = string[i]) + { + if (pass_next) + { + pass_next = 0; + if (c == 0) + CQ_RETURN(i); + ADVANCE_CHAR (string, slen, i); + continue; + } + else if (c == '\\') + { + pass_next = 1; + i++; + continue; + } + else if (backq) + { + if (c == '`') + backq = 0; + ADVANCE_CHAR (string, slen, i); + continue; + } + else if (c == '`') + { + backq = 1; + i++; + continue; + } + else if (c == '\'' || c == '"') + { + i = (c == '\'') ? skip_single_quoted (string, slen, ++i) + : skip_double_quoted (string, slen, ++i); + /* no increment, the skip functions increment past the closing quote. */ + } + else if (c == '$' && (string[i+1] == LPAREN || string[i+1] == LBRACE)) + { + si = i + 2; + if (string[si] == '\0') + CQ_RETURN(si); + + if (string[i+1] == LPAREN) + temp = extract_delimited_string (string, &si, "$(", "(", ")", EX_NOALLOC); /* ) */ + else + temp = extract_dollar_brace_string (string, &si, 0, EX_NOALLOC); + i = si; + if (string[i] == '\0') /* don't increment i past EOS in loop */ + break; + i++; + continue; + } + else if (member (c, delims)) + break; + else + ADVANCE_CHAR (string, slen, i); + } + + CQ_RETURN(i); +} + +/* Split STRING (length SLEN) at DELIMS, and return a WORD_LIST with the + individual words. If DELIMS is NULL, the current value of $IFS is used + to split the string, and the function follows the shell field splitting + rules. SENTINEL is an index to look for. NWP, if non-NULL, + gets the number of words in the returned list. CWP, if non-NULL, gets + the index of the word containing SENTINEL. Non-whitespace chars in + DELIMS delimit separate fields. */ +WORD_LIST * +split_at_delims (string, slen, delims, sentinel, nwp, cwp) + char *string; + int slen; + char *delims; + int sentinel; + int *nwp, *cwp; +{ + int ts, te, i, nw, cw, ifs_split; + char *token, *d, *d2; + WORD_LIST *ret, *tl; + + if (string == 0 || *string == '\0') + { + if (nwp) + *nwp = 0; + if (cwp) + *cwp = 0; + return ((WORD_LIST *)NULL); + } + + d = (delims == 0) ? ifs_value : delims; + ifs_split = delims == 0; + + /* Make d2 the non-whitespace characters in delims */ + d2 = 0; + if (delims) + { + size_t slength; +#if defined (HANDLE_MULTIBYTE) + size_t mblength = 1; +#endif + DECLARE_MBSTATE; + + slength = strlen (delims); + d2 = (char *)xmalloc (slength + 1); + i = ts = 0; + while (delims[i]) + { +#if defined (HANDLE_MULTIBYTE) + mbstate_t state_bak = state; + mblength = MBRLEN (delims + i, slength, &state); + if (MB_INVALIDCH (mblength)) + state = state_bak; + else if (mblength > 1) + { + memcpy (d2 + ts, delims + i, mblength); + ts += mblength; + i += mblength; + slength -= mblength; + continue; + } +#endif + if (whitespace (delims[i]) == 0) + d2[ts++] = delims[i]; + + i++; + slength--; + } + d2[ts] = '\0'; + } + + ret = (WORD_LIST *)NULL; + + /* Remove sequences of whitspace characters at the start of the string, as + long as those characters are delimiters. */ + for (i = 0; member (string[i], d) && spctabnl (string[i]); i++) + ; + if (string[i] == '\0') + return (ret); + + ts = i; + nw = 0; + cw = -1; + while (1) + { + te = skip_to_delim (string, ts, d); + + /* If we have a non-whitespace delimiter character, use it to make a + separate field. This is just about what $IFS splitting does and + is closer to the behavior of the shell parser. */ + if (ts == te && d2 && member (string[ts], d2)) + { + te = ts + 1; + /* If we're using IFS splitting, the non-whitespace delimiter char + and any additional IFS whitespace delimits a field. */ + if (ifs_split) + while (member (string[te], d) && spctabnl (string[te])) + te++; + else + while (member (string[te], d2)) + te++; + } + + token = substring (string, ts, te); + + ret = add_string_to_list (token, ret); + free (token); + nw++; + + if (sentinel >= ts && sentinel <= te) + cw = nw; + + /* If the cursor is at whitespace just before word start, set the + sentinel word to the current word. */ + if (cwp && cw == -1 && sentinel == ts-1) + cw = nw; + + /* If the cursor is at whitespace between two words, make a new, empty + word, add it before (well, after, since the list is in reverse order) + the word we just added, and set the current word to that one. */ + if (cwp && cw == -1 && sentinel < ts) + { + tl = make_word_list (make_word (""), ret->next); + ret->next = tl; + cw = nw; + nw++; + } + + if (string[te] == 0) + break; + + i = te; + while (member (string[i], d) && (ifs_split || spctabnl(string[i]))) + i++; + + if (string[i]) + ts = i; + else + break; + } + + /* Special case for SENTINEL at the end of STRING. If we haven't found + the word containing SENTINEL yet, and the index we're looking for is at + the end of STRING, add an additional null argument and set the current + word pointer to that. */ + if (cwp && cw == -1 && sentinel >= slen) + { + if (whitespace (string[sentinel - 1])) + { + token = ""; + ret = add_string_to_list (token, ret); + nw++; + } + cw = nw; + } + + if (nwp) + *nwp = nw; + if (cwp) + *cwp = cw; + + return (REVERSE_LIST (ret, WORD_LIST *)); +} +#endif /* READLINE */ + +#if 0 +/* UNUSED */ +/* Extract the name of the variable to bind to from the assignment string. */ +char * +assignment_name (string) + char *string; +{ + int offset; + char *temp; + + offset = assignment (string, 0); + if (offset == 0) + return (char *)NULL; + temp = substring (string, 0, offset); + return (temp); +} +#endif + +/* **************************************************************** */ +/* */ +/* Functions to convert strings to WORD_LISTs and vice versa */ +/* */ +/* **************************************************************** */ + +/* Return a single string of all the words in LIST. SEP is the separator + to put between individual elements of LIST in the output string. */ +char * +string_list_internal (list, sep) + WORD_LIST *list; + char *sep; +{ + register WORD_LIST *t; + char *result, *r; + int word_len, sep_len, result_size; + + if (list == 0) + return ((char *)NULL); + + /* Short-circuit quickly if we don't need to separate anything. */ + if (list->next == 0) + return (savestring (list->word->word)); + + /* This is nearly always called with either sep[0] == 0 or sep[1] == 0. */ + sep_len = STRLEN (sep); + result_size = 0; + + for (t = list; t; t = t->next) + { + if (t != list) + result_size += sep_len; + result_size += strlen (t->word->word); + } + + r = result = (char *)xmalloc (result_size + 1); + + for (t = list; t; t = t->next) + { + if (t != list && sep_len) + { + if (sep_len > 1) + { + FASTCOPY (sep, r, sep_len); + r += sep_len; + } + else + *r++ = sep[0]; + } + + word_len = strlen (t->word->word); + FASTCOPY (t->word->word, r, word_len); + r += word_len; + } + + *r = '\0'; + return (result); +} + +/* Return a single string of all the words present in LIST, separating + each word with a space. */ +char * +string_list (list) + WORD_LIST *list; +{ + return (string_list_internal (list, " ")); +} + +/* Return a single string of all the words present in LIST, obeying the + quoting rules for "$*", to wit: (P1003.2, draft 11, 3.5.2) "If the + expansion [of $*] appears within a double quoted string, it expands + to a single field with the value of each parameter separated by the + first character of the IFS variable, or by a if IFS is unset." */ +char * +string_list_dollar_star (list) + WORD_LIST *list; +{ +#if defined (HANDLE_MULTIBYTE) + char sep[MB_CUR_MAX + 1]; +#else + char sep[2]; +#endif + + +#if defined (HANDLE_MULTIBYTE) + if (ifs_firstc_len == 1) + { + sep[0] = ifs_firstc[0]; + sep[1] = '\0'; + } + else + memcpy (sep, ifs_firstc, ifs_firstc_len); +#else + sep[0] = ifs_firstc; + sep[1] = '\0'; +#endif + + return (string_list_internal (list, sep)); +} + +/* Turn $@ into a string. If (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) + is non-zero, the $@ appears within double quotes, and we should quote + the list before converting it into a string. If IFS is unset, and the + word is not quoted, we just need to quote CTLESC and CTLNUL characters + in the words in the list, because the default value of $IFS is + , IFS characters in the words in the list should + also be split. If IFS is null, and the word is not quoted, we need + to quote the words in the list to preserve the positional parameters + exactly. */ +char * +string_list_dollar_at (list, quoted) + WORD_LIST *list; + int quoted; +{ + char *ifs; +#if defined (HANDLE_MULTIBYTE) + char sep[MB_CUR_MAX + 1]; +#else + char sep[2]; +#endif + WORD_LIST *tlist; + + /* XXX this could just be ifs = ifs_value; */ + ifs = ifs_var ? value_cell (ifs_var) : (char *)0; + +#if defined (HANDLE_MULTIBYTE) + if (ifs && *ifs) + { + size_t mblength; + mblength = MBLEN (ifs, strnlen (ifs, MB_CUR_MAX)); + if (MB_INVALIDCH (mblength) || mblength == 1) + { + sep[0] = *ifs; + sep[1] = '\0'; + } + else if (mblength == 0) + sep[0] = '\0'; + else + { + memcpy (sep, ifs, mblength); + sep[mblength] = '\0'; + } + } + else + { + sep[0] = ' '; + sep[1] = '\0'; + } +#else + sep[0] = (ifs == 0 || *ifs == 0) ? ' ' : *ifs; + sep[1] = '\0'; +#endif + + tlist = ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (ifs && *ifs == 0)) + ? quote_list (list) + : list_quote_escapes (list); + return (string_list_internal (tlist, sep)); +} + +/* Return the list of words present in STRING. Separate the string into + words at any of the characters found in SEPARATORS. If QUOTED is + non-zero then word in the list will have its quoted flag set, otherwise + the quoted flag is left as make_word () deemed fit. + + This obeys the P1003.2 word splitting semantics. If `separators' is + exactly , then the splitting algorithm is that of + the Bourne shell, which treats any sequence of characters from `separators' + as a delimiter. If IFS is unset, which results in `separators' being set + to "", no splitting occurs. If separators has some other value, the + following rules are applied (`IFS white space' means zero or more + occurrences of , , or , as long as those characters + are in `separators'): + + 1) IFS white space is ignored at the start and the end of the + string. + 2) Each occurrence of a character in `separators' that is not + IFS white space, along with any adjacent occurrences of + IFS white space delimits a field. + 3) Any nonzero-length sequence of IFS white space delimits a field. + */ + +/* BEWARE! list_string strips null arguments. Don't call it twice and + expect to have "" preserved! */ + +/* This performs word splitting and quoted null character removal on + STRING. */ +#define issep(c) \ + (((separators)[0]) ? ((separators)[1] ? isifs(c) \ + : (c) == (separators)[0]) \ + : 0) + +WORD_LIST * +list_string (string, separators, quoted) + register char *string, *separators; + int quoted; +{ + WORD_LIST *result; + WORD_DESC *t; + char *current_word, *s; + int sindex, sh_style_split, whitesep; + size_t slen; + + if (!string || !*string) + return ((WORD_LIST *)NULL); + + sh_style_split = separators && separators[0] == ' ' && + separators[1] == '\t' && + separators[2] == '\n' && + separators[3] == '\0'; + + slen = 0; + /* Remove sequences of whitespace at the beginning of STRING, as + long as those characters appear in IFS. Do not do this if + STRING is quoted or if there are no separator characters. */ + if (!quoted || !separators || !*separators) + { + for (s = string; *s && spctabnl (*s) && issep (*s); s++); + + if (!*s) + return ((WORD_LIST *)NULL); + + string = s; + } + + /* OK, now STRING points to a word that does not begin with white space. + The splitting algorithm is: + extract a word, stopping at a separator + skip sequences of spc, tab, or nl as long as they are separators + This obeys the field splitting rules in Posix.2. */ + for (result = (WORD_LIST *)NULL, sindex = 0; string[sindex]; ) + { + current_word = string_extract_verbatim (string, &sindex, separators); + if (current_word == 0) + break; + + /* If we have a quoted empty string, add a quoted null argument. We + want to preserve the quoted null character iff this is a quoted + empty string; otherwise the quoted null characters are removed + below. */ + if (QUOTED_NULL (current_word)) + { + t = make_bare_word (""); + t->flags |= W_QUOTED; + free (t->word); + t->word = make_quoted_char ('\0'); + result = make_word_list (t, result); + } + else if (current_word[0] != '\0') + { + /* If we have something, then add it regardless. However, + perform quoted null character removal on the current word. */ + remove_quoted_nulls (current_word); + result = add_string_to_list (current_word, result); + if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) + result->word->flags |= W_QUOTED; + } + + /* If we're not doing sequences of separators in the traditional + Bourne shell style, then add a quoted null argument. */ + else if (!sh_style_split && !spctabnl (string[sindex])) + { + t = make_bare_word (""); + t->flags |= W_QUOTED; + free (t->word); + t->word = make_quoted_char ('\0'); + result = make_word_list (t, result); + } + + free (current_word); + + /* Note whether or not the separator is IFS whitespace, used later. */ + whitesep = string[sindex] && spctabnl (string[sindex]); + + /* Move past the current separator character. */ + if (string[sindex]) + { + DECLARE_MBSTATE; + if (slen == 0) + slen = strlen (string); + ADVANCE_CHAR (string, slen, sindex); + } + + /* Now skip sequences of space, tab, or newline characters if they are + in the list of separators. */ + while (string[sindex] && spctabnl (string[sindex]) && issep (string[sindex])) + sindex++; + + /* If the first separator was IFS whitespace and the current character + is a non-whitespace IFS character, it should be part of the current + field delimiter, not a separate delimiter that would result in an + empty field. Look at POSIX.2, 3.6.5, (3)(b). */ + if (string[sindex] && whitesep && issep (string[sindex]) && !spctabnl (string[sindex])) + sindex++; + } + return (REVERSE_LIST (result, WORD_LIST *)); +} + +/* Parse a single word from STRING, using SEPARATORS to separate fields. + ENDPTR is set to the first character after the word. This is used by + the `read' builtin. This is never called with SEPARATORS != $IFS; + it should be simplified. + + XXX - this function is very similar to list_string; they should be + combined - XXX */ +char * +get_word_from_string (stringp, separators, endptr) + char **stringp, *separators, **endptr; +{ + register char *s; + char *current_word; + int sindex, sh_style_split, whitesep; + size_t slen; + + if (!stringp || !*stringp || !**stringp) + return ((char *)NULL); + + s = *stringp; + + sh_style_split = separators && separators[0] == ' ' && + separators[1] == '\t' && + separators[2] == '\n' && + separators[3] == '\0'; + + slen = 0; + + /* Remove sequences of whitespace at the beginning of STRING, as + long as those characters appear in IFS. */ + if (sh_style_split || !separators || !*separators) + { + for (; *s && spctabnl (*s) && isifs (*s); s++); + + /* If the string is nothing but whitespace, update it and return. */ + if (!*s) + { + *stringp = s; + if (endptr) + *endptr = s; + return ((char *)NULL); + } + } + + /* OK, S points to a word that does not begin with white space. + Now extract a word, stopping at a separator, save a pointer to + the first character after the word, then skip sequences of spc, + tab, or nl as long as they are separators. + + This obeys the field splitting rules in Posix.2. */ + sindex = 0; + current_word = string_extract_verbatim (s, &sindex, separators); + + /* Set ENDPTR to the first character after the end of the word. */ + if (endptr) + *endptr = s + sindex; + + /* Note whether or not the separator is IFS whitespace, used later. */ + whitesep = s[sindex] && spctabnl (s[sindex]); + + /* Move past the current separator character. */ + if (s[sindex]) + { + DECLARE_MBSTATE; + if (slen == 0) + slen = strlen (s); + ADVANCE_CHAR (s, slen, sindex); + } + + /* Now skip sequences of space, tab, or newline characters if they are + in the list of separators. */ + while (s[sindex] && spctabnl (s[sindex]) && isifs (s[sindex])) + sindex++; + + /* If the first separator was IFS whitespace and the current character is + a non-whitespace IFS character, it should be part of the current field + delimiter, not a separate delimiter that would result in an empty field. + Look at POSIX.2, 3.6.5, (3)(b). */ + if (s[sindex] && whitesep && isifs (s[sindex]) && !spctabnl (s[sindex])) + sindex++; + + /* Update STRING to point to the next field. */ + *stringp = s + sindex; + return (current_word); +} + +/* Remove IFS white space at the end of STRING. Start at the end + of the string and walk backwards until the beginning of the string + or we find a character that's not IFS white space and not CTLESC. + Only let CTLESC escape a white space character if SAW_ESCAPE is + non-zero. */ +char * +strip_trailing_ifs_whitespace (string, separators, saw_escape) + char *string, *separators; + int saw_escape; +{ + char *s; + + s = string + STRLEN (string) - 1; + while (s > string && ((spctabnl (*s) && isifs (*s)) || + (saw_escape && *s == CTLESC && spctabnl (s[1])))) + s--; + *++s = '\0'; + return string; +} + +#if 0 +/* UNUSED */ +/* Split STRING into words at whitespace. Obeys shell-style quoting with + backslashes, single and double quotes. */ +WORD_LIST * +list_string_with_quotes (string) + char *string; +{ + WORD_LIST *list; + char *token, *s; + size_t s_len; + int c, i, tokstart, len; + + for (s = string; s && *s && spctabnl (*s); s++) + ; + if (s == 0 || *s == 0) + return ((WORD_LIST *)NULL); + + s_len = strlen (s); + tokstart = i = 0; + list = (WORD_LIST *)NULL; + while (1) + { + c = s[i]; + if (c == '\\') + { + i++; + if (s[i]) + i++; + } + else if (c == '\'') + i = skip_single_quoted (s, s_len, ++i); + else if (c == '"') + i = skip_double_quoted (s, s_len, ++i); + else if (c == 0 || spctabnl (c)) + { + /* We have found the end of a token. Make a word out of it and + add it to the word list. */ + token = substring (s, tokstart, i); + list = add_string_to_list (token, list); + free (token); + while (spctabnl (s[i])) + i++; + if (s[i]) + tokstart = i; + else + break; + } + else + i++; /* normal character */ + } + return (REVERSE_LIST (list, WORD_LIST *)); +} +#endif + +/********************************************************/ +/* */ +/* Functions to perform assignment statements */ +/* */ +/********************************************************/ + +/* Given STRING, an assignment string, get the value of the right side + of the `=', and bind it to the left side. If EXPAND is true, then + perform parameter expansion, command substitution, and arithmetic + expansion on the right-hand side. Perform tilde expansion in any + case. Do not perform word splitting on the result of expansion. */ +static int +do_assignment_internal (string, expand) + const char *string; + int expand; +{ + int offset; + char *name, *value; + SHELL_VAR *entry; +#if defined (ARRAY_VARS) + char *t; + int ni; +#endif + int assign_list = 0; + + offset = assignment (string, 0); + name = savestring (string); + value = (char *)NULL; + + if (name[offset] == '=') + { + char *temp; + + name[offset] = 0; + temp = name + offset + 1; + +#if defined (ARRAY_VARS) + if (expand && temp[0] == LPAREN && xstrchr (temp, RPAREN)) + { + assign_list = ni = 1; + value = extract_delimited_string (temp, &ni, "(", (char *)NULL, ")", 0); + } + else +#endif + + /* Perform tilde expansion. */ + if (expand && temp[0]) + { +#if 0 + temp = (xstrchr (temp, '~') && unquoted_member ('~', temp)) + ? bash_tilde_expand (temp, 2) + : savestring (temp); +#endif + + value = expand_string_if_necessary (temp, 0, expand_string_assignment); +#if 0 + free (temp); +#endif + } + else + value = savestring (temp); + } + + if (value == 0) + { + value = (char *)xmalloc (1); + value[0] = '\0'; + } + + if (echo_command_at_execute) + xtrace_print_assignment (name, value, assign_list, 1); + +#define ASSIGN_RETURN(r) do { FREE (value); free (name); return (r); } while (0) + +#if defined (ARRAY_VARS) + if (t = xstrchr (name, '[')) /*]*/ + { + if (assign_list) + { + report_error (_("%s: cannot assign list to array member"), name); + ASSIGN_RETURN (0); + } + entry = assign_array_element (name, value); + if (entry == 0) + ASSIGN_RETURN (0); + } + else if (assign_list) + entry = assign_array_from_string (name, value); + else +#endif /* ARRAY_VARS */ + entry = bind_variable (name, value); + + stupidly_hack_special_variables (name); + + if (entry) + VUNSETATTR (entry, att_invisible); + + /* Return 1 if the assignment seems to have been performed correctly. */ + ASSIGN_RETURN (entry ? ((readonly_p (entry) == 0) && noassign_p (entry) == 0) : 0); +} + +/* Perform the assignment statement in STRING, and expand the + right side by doing command and parameter expansion. */ +int +do_assignment (string) + const char *string; +{ + return do_assignment_internal (string, 1); +} + +/* Given STRING, an assignment string, get the value of the right side + of the `=', and bind it to the left side. Do not do command and + parameter substitution on the right hand side. */ +int +do_assignment_no_expand (string) + const char *string; +{ + return do_assignment_internal (string, 0); +} + +/*************************************************** + * * + * Functions to manage the positional parameters * + * * + ***************************************************/ + +/* Return the word list that corresponds to `$*'. */ +WORD_LIST * +list_rest_of_args () +{ + register WORD_LIST *list, *args; + int i; + + /* Break out of the loop as soon as one of the dollar variables is null. */ + for (i = 1, list = (WORD_LIST *)NULL; i < 10 && dollar_vars[i]; i++) + list = make_word_list (make_bare_word (dollar_vars[i]), list); + + for (args = rest_of_args; args; args = args->next) + list = make_word_list (make_bare_word (args->word->word), list); + + return (REVERSE_LIST (list, WORD_LIST *)); +} + +int +number_of_args () +{ + register WORD_LIST *list; + int n; + + for (n = 0; n < 9 && dollar_vars[n+1]; n++) + ; + for (list = rest_of_args; list; list = list->next) + n++; + return n; +} + +/* Return the value of a positional parameter. This handles values > 10. */ +char * +get_dollar_var_value (ind) + intmax_t ind; +{ + char *temp; + WORD_LIST *p; + + if (ind < 10) + temp = dollar_vars[ind] ? savestring (dollar_vars[ind]) : (char *)NULL; + else /* We want something like ${11} */ + { + ind -= 10; + for (p = rest_of_args; p && ind--; p = p->next) + ; + temp = p ? savestring (p->word->word) : (char *)NULL; + } + return (temp); +} + +/* Make a single large string out of the dollar digit variables, + and the rest_of_args. If DOLLAR_STAR is 1, then obey the special + case of "$*" with respect to IFS. */ +char * +string_rest_of_args (dollar_star) + int dollar_star; +{ + register WORD_LIST *list; + char *string; + + list = list_rest_of_args (); + string = dollar_star ? string_list_dollar_star (list) : string_list (list); + dispose_words (list); + return (string); +} + +/* Return a string containing the positional parameters from START to + END, inclusive. If STRING[0] == '*', we obey the rules for $*, + which only makes a difference if QUOTED is non-zero. If QUOTED includes + Q_HERE_DOCUMENT or Q_DOUBLE_QUOTES, this returns a quoted list, otherwise + no quoting chars are added. */ +static char * +pos_params (string, start, end, quoted) + char *string; + int start, end, quoted; +{ + WORD_LIST *save, *params, *h, *t; + char *ret; + int i; + + /* see if we can short-circuit. if start == end, we want 0 parameters. */ + if (start == end) + return ((char *)NULL); + + save = params = list_rest_of_args (); + if (save == 0) + return ((char *)NULL); + + for (i = 1; params && i < start; i++) + params = params->next; + if (params == 0) + return ((char *)NULL); + for (h = t = params; params && i < end; i++) + { + t = params; + params = params->next; + } + + t->next = (WORD_LIST *)NULL; + if (string[0] == '*') +#if 0 + ret = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? string_list_dollar_star (quote_list (h)) : string_list (h); +#else + { + if (quoted & Q_DOUBLE_QUOTES) + ret = string_list_dollar_star (quote_list (h)); + else if (quoted & Q_HERE_DOCUMENT) + ret = string_list (quote_list (h)); + else + ret = string_list (h); + } +#endif + else + ret = string_list ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? quote_list (h) : h); + if (t != params) + t->next = params; + + dispose_words (save); + return (ret); +} + +/******************************************************************/ +/* */ +/* Functions to expand strings to strings or WORD_LISTs */ +/* */ +/******************************************************************/ + +#if defined (PROCESS_SUBSTITUTION) +#define EXP_CHAR(s) (s == '$' || s == '`' || s == '<' || s == '>' || s == CTLESC || s == '~') +#else +#define EXP_CHAR(s) (s == '$' || s == '`' || s == CTLESC || s == '~') +#endif + +/* If there are any characters in STRING that require full expansion, + then call FUNC to expand STRING; otherwise just perform quote + removal if necessary. This returns a new string. */ +static char * +expand_string_if_necessary (string, quoted, func) + char *string; + int quoted; + EXPFUNC *func; +{ + WORD_LIST *list; + size_t slen; + int i, saw_quote; + char *ret; + DECLARE_MBSTATE; + + slen = strlen (string); + i = saw_quote = 0; + while (string[i]) + { + if (EXP_CHAR (string[i])) + break; + else if (string[i] == '\'' || string[i] == '\\' || string[i] == '"') + saw_quote = 1; + ADVANCE_CHAR (string, slen, i); + } + + if (string[i]) + { + list = (*func) (string, quoted); + if (list) + { + ret = string_list (list); + dispose_words (list); + } + else + ret = (char *)NULL; + } + else if (saw_quote && ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) == 0)) + ret = string_quote_removal (string, quoted); + else + ret = savestring (string); + + return ret; +} + +static inline char * +expand_string_to_string_internal (string, quoted, func) + char *string; + int quoted; + EXPFUNC *func; +{ + WORD_LIST *list; + char *ret; + + if (string == 0 || *string == '\0') + return ((char *)NULL); + + list = (*func) (string, quoted); + if (list) + { + ret = string_list (list); + dispose_words (list); + } + else + ret = (char *)NULL; + + return (ret); +} + +char * +expand_string_to_string (string, quoted) + char *string; + int quoted; +{ + return (expand_string_to_string_internal (string, quoted, expand_string)); +} + +char * +expand_string_unsplit_to_string (string, quoted) + char *string; + int quoted; +{ + return (expand_string_to_string_internal (string, quoted, expand_string_unsplit)); +} + +#if defined (COND_COMMAND) +/* Just remove backslashes in STRING. Returns a new string. */ +char * +remove_backslashes (string) + char *string; +{ + char *r, *ret, *s; + + r = ret = (char *)xmalloc (strlen (string) + 1); + for (s = string; s && *s; ) + { + if (*s == '\\') + s++; + if (*s == 0) + break; + *r++ = *s++; + } + *r = '\0'; + return ret; +} + +/* This needs better error handling. */ +/* Expand W for use as an argument to a unary or binary operator in a + [[...]] expression. If SPECIAL is nonzero, this is the rhs argument + to the != or == operator, and should be treated as a pattern. In + this case, we quote the string specially for the globbing code. The + caller is responsible for removing the backslashes if the unquoted + words is needed later. */ +char * +cond_expand_word (w, special) + WORD_DESC *w; + int special; +{ + char *r, *p; + WORD_LIST *l; + + if (w->word == 0 || w->word[0] == '\0') + return ((char *)NULL); + +#if 0 + if (xstrchr (w->word, '~') && unquoted_member ('~', w->word)) + { + p = bash_tilde_expand (w->word, 0); + free (w->word); + w->word = p; + } +#endif + + l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0); + if (l) + { + if (special == 0) + { + dequote_list (l); + r = string_list (l); + } + else + { + p = string_list (l); + r = quote_string_for_globbing (p, QGLOB_CVTNULL); + free (p); + } + dispose_words (l); + } + else + r = (char *)NULL; + + return r; +} +#endif + +/* Call expand_word_internal to expand W and handle error returns. + A convenience function for functions that don't want to handle + any errors or free any memory before aborting. */ +static WORD_LIST * +call_expand_word_internal (w, q, i, c, e) + WORD_DESC *w; + int q, i, *c, *e; +{ + WORD_LIST *result; + + result = expand_word_internal (w, q, i, c, e); + if (result == &expand_word_error || result == &expand_word_fatal) + { + /* By convention, each time this error is returned, w->word has + already been freed (it sometimes may not be in the fatal case, + but that doesn't result in a memory leak because we're going + to exit in most cases). */ + w->word = (char *)NULL; + last_command_exit_value = EXECUTION_FAILURE; + exp_jump_to_top_level ((result == &expand_word_error) ? DISCARD : FORCE_EOF); + /* NOTREACHED */ + } + else + return (result); +} + +/* Perform parameter expansion, command substitution, and arithmetic + expansion on STRING, as if it were a word. Leave the result quoted. */ +static WORD_LIST * +expand_string_internal (string, quoted) + char *string; + int quoted; +{ + WORD_DESC td; + WORD_LIST *tresult; + + if (string == 0 || *string == 0) + return ((WORD_LIST *)NULL); + + td.flags = 0; + td.word = savestring (string); + + tresult = call_expand_word_internal (&td, quoted, 0, (int *)NULL, (int *)NULL); + + FREE (td.word); + return (tresult); +} + +/* Expand STRING by performing parameter expansion, command substitution, + and arithmetic expansion. Dequote the resulting WORD_LIST before + returning it, but do not perform word splitting. The call to + remove_quoted_nulls () is in here because word splitting normally + takes care of quote removal. */ +WORD_LIST * +expand_string_unsplit (string, quoted) + char *string; + int quoted; +{ + WORD_LIST *value; + + if (string == 0 || *string == '\0') + return ((WORD_LIST *)NULL); + + expand_no_split_dollar_star = 1; + value = expand_string_internal (string, quoted); + expand_no_split_dollar_star = 0; + + if (value) + { + if (value->word) + remove_quoted_nulls (value->word->word); + dequote_list (value); + } + return (value); +} + +/* Expand the rhs of an assignment statement */ +WORD_LIST * +expand_string_assignment (string, quoted) + char *string; + int quoted; +{ + WORD_DESC td; + WORD_LIST *value; + + if (string == 0 || *string == '\0') + return ((WORD_LIST *)NULL); + + expand_no_split_dollar_star = 1; + + td.flags = W_ASSIGNRHS; + td.word = savestring (string); + value = call_expand_word_internal (&td, quoted, 0, (int *)NULL, (int *)NULL); + FREE (td.word); + + expand_no_split_dollar_star = 0; + + if (value) + { + if (value->word) + remove_quoted_nulls (value->word->word); + dequote_list (value); + } + return (value); +} + + +/* Expand one of the PS? prompt strings. This is a sort of combination of + expand_string_unsplit and expand_string_internal, but returns the + passed string when an error occurs. Might want to trap other calls + to jump_to_top_level here so we don't endlessly loop. */ +WORD_LIST * +expand_prompt_string (string, quoted) + char *string; + int quoted; +{ + WORD_LIST *value; + WORD_DESC td; + + if (string == 0 || *string == 0) + return ((WORD_LIST *)NULL); + + td.flags = 0; + td.word = savestring (string); + + no_longjmp_on_fatal_error = 1; + value = expand_word_internal (&td, quoted, 0, (int *)NULL, (int *)NULL); + no_longjmp_on_fatal_error = 0; + + if (value == &expand_word_error || value == &expand_word_fatal) + { + value = make_word_list (make_bare_word (string), (WORD_LIST *)NULL); + return value; + } + FREE (td.word); + if (value) + { + if (value->word) + remove_quoted_nulls (value->word->word); + dequote_list (value); + } + return (value); +} + +/* Expand STRING just as if you were expanding a word, but do not dequote + the resultant WORD_LIST. This is called only from within this file, + and is used to correctly preserve quoted characters when expanding + things like ${1+"$@"}. This does parameter expansion, command + substitution, arithmetic expansion, and word splitting. */ +static WORD_LIST * +expand_string_leave_quoted (string, quoted) + char *string; + int quoted; +{ + WORD_LIST *tlist; + WORD_LIST *tresult; + + if (string == 0 || *string == '\0') + return ((WORD_LIST *)NULL); + + tlist = expand_string_internal (string, quoted); + + if (tlist) + { + tresult = word_list_split (tlist); + dispose_words (tlist); + return (tresult); + } + return ((WORD_LIST *)NULL); +} + +/* This does not perform word splitting or dequote the WORD_LIST + it returns. */ +static WORD_LIST * +expand_string_for_rhs (string, quoted, dollar_at_p, has_dollar_at) + char *string; + int quoted, *dollar_at_p, *has_dollar_at; +{ + WORD_DESC td; + WORD_LIST *tresult; + + if (string == 0 || *string == '\0') + return (WORD_LIST *)NULL; + + td.flags = 0; + td.word = string; + tresult = call_expand_word_internal (&td, quoted, 1, dollar_at_p, has_dollar_at); + return (tresult); +} + +/* Expand STRING just as if you were expanding a word. This also returns + a list of words. Note that filename globbing is *NOT* done for word + or string expansion, just when the shell is expanding a command. This + does parameter expansion, command substitution, arithmetic expansion, + and word splitting. Dequote the resultant WORD_LIST before returning. */ +WORD_LIST * +expand_string (string, quoted) + char *string; + int quoted; +{ + WORD_LIST *result; + + if (string == 0 || *string == '\0') + return ((WORD_LIST *)NULL); + + result = expand_string_leave_quoted (string, quoted); + return (result ? dequote_list (result) : result); +} + +/*************************************************** + * * + * Functions to handle quoting chars * + * * + ***************************************************/ + +/* Conventions: + + A string with s[0] == CTLNUL && s[1] == 0 is a quoted null string. + The parser passes CTLNUL as CTLESC CTLNUL. */ + +/* Quote escape characters in string s, but no other characters. This is + used to protect CTLESC and CTLNUL in variable values from the rest of + the word expansion process after the variable is expanded. */ +char * +quote_escapes (string) + char *string; +{ + register char *s, *t; + size_t slen; + char *result, *send; + DECLARE_MBSTATE; + + slen = strlen (string); + send = string + slen; + + t = result = (char *)xmalloc ((slen * 2) + 1); + s = string; + + while (*s) + { + if (*s == CTLESC || *s == CTLNUL) + *t++ = CTLESC; + COPY_CHAR_P (t, s, send); + } + *t = '\0'; + return (result); +} + +static WORD_LIST * +list_quote_escapes (list) + WORD_LIST *list; +{ + register WORD_LIST *w; + char *t; + + for (w = list; w; w = w->next) + { + t = w->word->word; + w->word->word = quote_escapes (t); + free (t); + } + return list; +} + +/* Inverse of quote_escapes; remove CTLESC protecting CTLESC or CTLNUL. + + The parser passes us CTLESC as CTLESC CTLESC and CTLNUL as CTLESC CTLNUL. + This is necessary to make unquoted CTLESC and CTLNUL characters in the + data stream pass through properly. + + We need to remove doubled CTLESC characters inside quoted strings before + quoting the entire string, so we do not double the number of CTLESC + characters. + + Also used by parts of the pattern substitution code. */ +static char * +dequote_escapes (string) + char *string; +{ + register char *s, *t; + size_t slen; + char *result, *send; + DECLARE_MBSTATE; + + if (string == 0) + return string; + + slen = strlen (string); + send = string + slen; + + t = result = (char *)xmalloc (slen + 1); + s = string; + + if (strchr (string, CTLESC) == 0) + return (strcpy (result, s)); + + while (*s) + { + if (*s == CTLESC && (s[1] == CTLESC || s[1] == CTLNUL)) + { + s++; + if (*s == '\0') + break; + } + COPY_CHAR_P (t, s, send); + } + *t = '\0'; + return result; +} + +/* Return a new string with the quoted representation of character C. */ +static char * +make_quoted_char (c) + int c; +{ + char *temp; + + temp = (char *)xmalloc (3); + if (c == 0) + { + temp[0] = CTLNUL; + temp[1] = '\0'; + } + else + { + temp[0] = CTLESC; + temp[1] = c; + temp[2] = '\0'; + } + return (temp); +} + +/* Quote STRING. Return a new string. */ +char * +quote_string (string) + char *string; +{ + register char *t; + size_t slen; + char *result, *send; + + if (*string == 0) + { + result = (char *)xmalloc (2); + result[0] = CTLNUL; + result[1] = '\0'; + } + else + { + DECLARE_MBSTATE; + + slen = strlen (string); + send = string + slen; + + result = (char *)xmalloc ((slen * 2) + 1); + + for (t = result; string < send; ) + { + *t++ = CTLESC; + COPY_CHAR_P (t, string, send); + } + *t = '\0'; + } + return (result); +} + +/* De-quoted quoted characters in STRING. */ +char * +dequote_string (string) + char *string; +{ + register char *s, *t; + size_t slen; + char *result, *send; + DECLARE_MBSTATE; + + slen = strlen (string); + + t = result = (char *)xmalloc (slen + 1); + + if (QUOTED_NULL (string)) + { + result[0] = '\0'; + return (result); + } + + /* If no character in the string can be quoted, don't bother examining + each character. Just return a copy of the string passed to us. */ + if (strchr (string, CTLESC) == NULL) + return (strcpy (result, string)); + + send = string + slen; + s = string; + while (*s) + { + if (*s == CTLESC) + { + s++; + if (*s == '\0') + break; + } + COPY_CHAR_P (t, s, send); + } + + *t = '\0'; + return (result); +} + +/* Quote the entire WORD_LIST list. */ +static WORD_LIST * +quote_list (list) + WORD_LIST *list; +{ + register WORD_LIST *w; + char *t; + + for (w = list; w; w = w->next) + { + t = w->word->word; + w->word->word = quote_string (t); + free (t); + w->word->flags |= W_QUOTED; + } + return list; +} + +static WORD_LIST * +dequote_list (list) + WORD_LIST *list; +{ + register char *s; + register WORD_LIST *tlist; + + for (tlist = list; tlist; tlist = tlist->next) + { + s = dequote_string (tlist->word->word); + free (tlist->word->word); + tlist->word->word = s; + } + return list; +} + +/* Remove CTLESC protecting a CTLESC or CTLNUL in place. Return the passed + string. */ +static char * +remove_quoted_escapes (string) + char *string; +{ + char *t; + + if (string) + { + t = dequote_escapes (string); + strcpy (string, t); + free (t); + } + + return (string); +} + +/* Perform quoted null character removal on STRING. We don't allow any + quoted null characters in the middle or at the ends of strings because + of how expand_word_internal works. remove_quoted_nulls () turns + STRING into an empty string iff it only consists of a quoted null, + and removes all unquoted CTLNUL characters. */ +static char * +remove_quoted_nulls (string) + char *string; +{ + register size_t slen; + register int i, j, prev_i; + DECLARE_MBSTATE; + + if (strchr (string, CTLNUL) == 0) /* XXX */ + return string; /* XXX */ + + slen = strlen (string); + i = j = 0; + + while (i < slen) + { + if (string[i] == CTLESC) + { + /* Old code had j++, but we cannot assume that i == j at this + point -- what if a CTLNUL has already been removed from the + string? We don't want to drop the CTLESC or recopy characters + that we've already copied down. */ + i++; string[j++] = CTLESC; + if (i == slen) + break; + } + else if (string[i] == CTLNUL) + i++; + + prev_i = i; + ADVANCE_CHAR (string, slen, i); + if (j < prev_i) + { + do string[j++] = string[prev_i++]; while (prev_i < i); + } + else + j = i; + } + string[j] = '\0'; + + return (string); +} + +/* Perform quoted null character removal on each element of LIST. + This modifies LIST. */ +void +word_list_remove_quoted_nulls (list) + WORD_LIST *list; +{ + register WORD_LIST *t; + + for (t = list; t; t = t->next) + remove_quoted_nulls (t->word->word); +} + +/* **************************************************************** */ +/* */ +/* Functions for Matching and Removing Patterns */ +/* */ +/* **************************************************************** */ + +#if defined (HANDLE_MULTIBYTE) +#if 0 /* Currently unused */ +static unsigned char * +mb_getcharlens (string, len) + char *string; + int len; +{ + int i, offset, last; + unsigned char *ret; + char *p; + DECLARE_MBSTATE; + + i = offset = 0; + last = 0; + ret = (unsigned char *)xmalloc (len); + memset (ret, 0, len); + while (string[last]) + { + ADVANCE_CHAR (string, len, offset); + ret[last] = offset - last; + last = offset; + } + return ret; +} +#endif +#endif + +/* Remove the portion of PARAM matched by PATTERN according to OP, where OP + can have one of 4 values: + RP_LONG_LEFT remove longest matching portion at start of PARAM + RP_SHORT_LEFT remove shortest matching portion at start of PARAM + RP_LONG_RIGHT remove longest matching portion at end of PARAM + RP_SHORT_RIGHT remove shortest matching portion at end of PARAM +*/ + +#define RP_LONG_LEFT 1 +#define RP_SHORT_LEFT 2 +#define RP_LONG_RIGHT 3 +#define RP_SHORT_RIGHT 4 + +static char * +remove_upattern (param, pattern, op) + char *param, *pattern; + int op; +{ + register int len; + register char *end; + register char *p, *ret, c; + + len = STRLEN (param); + end = param + len; + + switch (op) + { + case RP_LONG_LEFT: /* remove longest match at start */ + for (p = end; p >= param; p--) + { + c = *p; *p = '\0'; + if (strmatch (pattern, param, FNMATCH_EXTFLAG) != FNM_NOMATCH) + { + *p = c; + return (savestring (p)); + } + *p = c; + + } + break; + + case RP_SHORT_LEFT: /* remove shortest match at start */ + for (p = param; p <= end; p++) + { + c = *p; *p = '\0'; + if (strmatch (pattern, param, FNMATCH_EXTFLAG) != FNM_NOMATCH) + { + *p = c; + return (savestring (p)); + } + *p = c; + } + break; + + case RP_LONG_RIGHT: /* remove longest match at end */ + for (p = param; p <= end; p++) + { + if (strmatch (pattern, p, FNMATCH_EXTFLAG) != FNM_NOMATCH) + { + c = *p; *p = '\0'; + ret = savestring (param); + *p = c; + return (ret); + } + } + break; + + case RP_SHORT_RIGHT: /* remove shortest match at end */ + for (p = end; p >= param; p--) + { + if (strmatch (pattern, p, FNMATCH_EXTFLAG) != FNM_NOMATCH) + { + c = *p; *p = '\0'; + ret = savestring (param); + *p = c; + return (ret); + } + } + break; + } + + return (savestring (param)); /* no match, return original string */ +} + +#if defined (HANDLE_MULTIBYTE) + +#if !defined (HAVE_WCSDUP) +static wchar_t * +wcsdup (ws) + wchar_t *ws; +{ + wchar_t *ret; + size_t len; + + len = wcslen (ws); + ret = xmalloc ((len + 1) * sizeof (wchar_t)); + if (ret == 0) + return ret; + return (wcscpy (ret, ws)); +} +#endif /* !HAVE_WCSDUP */ + +static wchar_t * +remove_wpattern (wparam, wstrlen, wpattern, op) + wchar_t *wparam; + size_t wstrlen; + wchar_t *wpattern; + int op; +{ + wchar_t wc; + int n, n1; + wchar_t *ret; + + switch (op) + { + case RP_LONG_LEFT: /* remove longest match at start */ + for (n = wstrlen; n >= 0; n--) + { + wc = wparam[n]; wparam[n] = L'\0'; + if (wcsmatch (wpattern, wparam, FNMATCH_EXTFLAG) != FNM_NOMATCH) + { + wparam[n] = wc; + return (wcsdup (wparam + n)); + } + wparam[n] = wc; + } + break; + + case RP_SHORT_LEFT: /* remove shortest match at start */ + for (n = 0; n <= wstrlen; n++) + { + wc = wparam[n]; wparam[n] = L'\0'; + if (wcsmatch (wpattern, wparam, FNMATCH_EXTFLAG) != FNM_NOMATCH) + { + wparam[n] = wc; + return (wcsdup (wparam + n)); + } + wparam[n] = wc; + } + break; + + case RP_LONG_RIGHT: /* remove longest match at end */ + for (n = 0; n <= wstrlen; n++) + { + if (wcsmatch (wpattern, wparam + n, FNMATCH_EXTFLAG) != FNM_NOMATCH) + { + wc = wparam[n]; wparam[n] = L'\0'; + ret = wcsdup (wparam); + wparam[n] = wc; + return (ret); + } + } + break; + + case RP_SHORT_RIGHT: /* remove shortest match at end */ + for (n = wstrlen; n >= 0; n--) + { + if (wcsmatch (wpattern, wparam + n, FNMATCH_EXTFLAG) != FNM_NOMATCH) + { + wc = wparam[n]; wparam[n] = L'\0'; + ret = wcsdup (wparam); + wparam[n] = wc; + return (ret); + } + } + break; + } + + return (wcsdup (wparam)); /* no match, return original string */ +} +#endif /* HANDLE_MULTIBYTE */ + +static char * +remove_pattern (param, pattern, op) + char *param, *pattern; + int op; +{ + if (param == NULL) + return (param); + if (*param == '\0' || pattern == NULL || *pattern == '\0') /* minor optimization */ + return (savestring (param)); + +#if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1) + { + wchar_t *ret, *oret; + size_t n; + wchar_t *wparam, *wpattern; + mbstate_t ps; + char *xret; + + n = xdupmbstowcs (&wpattern, NULL, pattern); + if (n == (size_t)-1) + return (remove_upattern (param, pattern, op)); + n = xdupmbstowcs (&wparam, NULL, param); + if (n == (size_t)-1) + { + free (wpattern); + return (remove_upattern (param, pattern, op)); + } + oret = ret = remove_wpattern (wparam, n, wpattern, op); + + free (wparam); + free (wpattern); + + n = strlen (param); + xret = xmalloc (n + 1); + memset (&ps, '\0', sizeof (mbstate_t)); + n = wcsrtombs (xret, (const wchar_t **)&ret, n, &ps); + xret[n] = '\0'; /* just to make sure */ + free (oret); + return xret; + } + else +#endif + return (remove_upattern (param, pattern, op)); +} + +/* Return 1 of the first character of STRING could match the first + character of pattern PAT. Used to avoid n2 calls to strmatch(). */ +static int +match_pattern_char (pat, string) + char *pat, *string; +{ + char c; + + if (*string == 0) + return (0); + + switch (c = *pat++) + { + default: + return (*string == c); + case '\\': + return (*string == *pat); + case '?': + return (*pat == LPAREN ? 1 : (*string != '\0')); + case '*': + return (1); + case '+': + case '!': + case '@': + return (*pat == LPAREN ? 1 : (*string == c)); + case '[': + return (*string != '\0'); + } +} + +/* Match PAT anywhere in STRING and return the match boundaries. + This returns 1 in case of a successful match, 0 otherwise. SP + and EP are pointers into the string where the match begins and + ends, respectively. MTYPE controls what kind of match is attempted. + MATCH_BEG and MATCH_END anchor the match at the beginning and end + of the string, respectively. The longest match is returned. */ +static int +match_upattern (string, pat, mtype, sp, ep) + char *string, *pat; + int mtype; + char **sp, **ep; +{ + int c, len; + register char *p, *p1; + char *end; + + len = STRLEN (string); + end = string + len; + + switch (mtype) + { + case MATCH_ANY: + for (p = string; p <= end; p++) + { + if (match_pattern_char (pat, p)) + { + for (p1 = end; p1 >= p; p1--) + { + c = *p1; *p1 = '\0'; + if (strmatch (pat, p, FNMATCH_EXTFLAG) == 0) + { + *p1 = c; + *sp = p; + *ep = p1; + return 1; + } + *p1 = c; + } + } + } + + return (0); + + case MATCH_BEG: + if (match_pattern_char (pat, string) == 0) + return (0); + + for (p = end; p >= string; p--) + { + c = *p; *p = '\0'; + if (strmatch (pat, string, FNMATCH_EXTFLAG) == 0) + { + *p = c; + *sp = string; + *ep = p; + return 1; + } + *p = c; + } + + return (0); + + case MATCH_END: + for (p = string; p <= end; p++) + { + if (strmatch (pat, p, FNMATCH_EXTFLAG) == 0) + { + *sp = p; + *ep = end; + return 1; + } + + } + + return (0); + } + + return (0); +} + +#if defined (HANDLE_MULTIBYTE) +/* Return 1 of the first character of WSTRING could match the first + character of pattern WPAT. Wide character version. */ +static int +match_pattern_wchar (wpat, wstring) + wchar_t *wpat, *wstring; +{ + wchar_t wc; + + if (*wstring == 0) + return (0); + + switch (wc = *wpat++) + { + default: + return (*wstring == wc); + case L'\\': + return (*wstring == *wpat); + case L'?': + return (*wpat == LPAREN ? 1 : (*wstring != L'\0')); + case L'*': + return (1); + case L'+': + case L'!': + case L'@': + return (*wpat == LPAREN ? 1 : (*wstring == wc)); + case L'[': + return (*wstring != L'\0'); + } +} + +/* Match WPAT anywhere in WSTRING and return the match boundaries. + This returns 1 in case of a successful match, 0 otherwise. Wide + character version. */ +static int +match_wpattern (wstring, indices, wstrlen, wpat, mtype, sp, ep) + wchar_t *wstring; + char **indices; + size_t wstrlen; + wchar_t *wpat; + int mtype; + char **sp, **ep; +{ + wchar_t wc; + int len; +#if 0 + size_t n, n1; /* Apple's gcc seems to miscompile this badly */ +#else + int n, n1; +#endif + + switch (mtype) + { + case MATCH_ANY: + for (n = 0; n <= wstrlen; n++) + { + if (match_pattern_wchar (wpat, wstring + n)) + { + for (n1 = wstrlen; n1 >= n; n1--) + { + wc = wstring[n1]; wstring[n1] = L'\0'; + if (wcsmatch (wpat, wstring + n, FNMATCH_EXTFLAG) == 0) + { + wstring[n1] = wc; + *sp = indices[n]; + *ep = indices[n1]; + return 1; + } + wstring[n1] = wc; + } + } + } + + return (0); + + case MATCH_BEG: + if (match_pattern_wchar (wpat, wstring) == 0) + return (0); + + for (n = wstrlen; n >= 0; n--) + { + wc = wstring[n]; wstring[n] = L'\0'; + if (wcsmatch (wpat, wstring, FNMATCH_EXTFLAG) == 0) + { + wstring[n] = wc; + *sp = indices[0]; + *ep = indices[n]; + return 1; + } + wstring[n] = wc; + } + + return (0); + + case MATCH_END: + for (n = 0; n <= wstrlen; n++) + { + if (wcsmatch (wpat, wstring + n, FNMATCH_EXTFLAG) == 0) + { + *sp = indices[n]; + *ep = indices[wstrlen]; + return 1; + } + } + + return (0); + } + + return (0); +} +#endif /* HANDLE_MULTIBYTE */ + +static int +match_pattern (string, pat, mtype, sp, ep) + char *string, *pat; + int mtype; + char **sp, **ep; +{ +#if defined (HANDLE_MULTIBYTE) + int ret; + size_t n; + wchar_t *wstring, *wpat; + char **indices; +#endif + + if (string == 0 || *string == 0 || pat == 0 || *pat == 0) + return (0); + +#if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1) + { + n = xdupmbstowcs (&wpat, NULL, pat); + if (n == (size_t)-1) + return (match_upattern (string, pat, mtype, sp, ep)); + n = xdupmbstowcs (&wstring, &indices, string); + if (n == (size_t)-1) + { + free (wpat); + return (match_upattern (string, pat, mtype, sp, ep)); + } + ret = match_wpattern (wstring, indices, n, wpat, mtype, sp, ep); + + free (wpat); + free (wstring); + free (indices); + + return (ret); + } + else +#endif + return (match_upattern (string, pat, mtype, sp, ep)); +} + +static int +getpatspec (c, value) + int c; + char *value; +{ + if (c == '#') + return ((*value == '#') ? RP_LONG_LEFT : RP_SHORT_LEFT); + else /* c == '%' */ + return ((*value == '%') ? RP_LONG_RIGHT : RP_SHORT_RIGHT); +} + +/* Posix.2 says that the WORD should be run through tilde expansion, + parameter expansion, command substitution and arithmetic expansion. + This leaves the result quoted, so quote_string_for_globbing () has + to be called to fix it up for strmatch (). If QUOTED is non-zero, + it means that the entire expression was enclosed in double quotes. + This means that quoting characters in the pattern do not make any + special pattern characters quoted. For example, the `*' in the + following retains its special meaning: "${foo#'*'}". */ +static char * +getpattern (value, quoted, expandpat) + char *value; + int quoted, expandpat; +{ + char *pat, *tword; + WORD_LIST *l; + int i; + +#if 0 + tword = xstrchr (value, '~') ? bash_tilde_expand (value, 0) : savestring (value); +#else + tword = savestring (value); +#endif + /* There is a problem here: how to handle single or double quotes in the + pattern string when the whole expression is between double quotes? + POSIX.2 says that enclosing double quotes do not cause the pattern to + be quoted, but does that leave us a problem with @ and array[@] and their + expansions inside a pattern? */ +#if 0 + if (expandpat && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && *tword) + { + i = 0; + pat = string_extract_double_quoted (tword, &i, 1); + free (tword); + tword = pat; + } +#endif + + /* expand_string_for_rhs () leaves WORD quoted and does not perform + word splitting. */ + l = *tword ? expand_string_for_rhs (tword, + (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? Q_PATQUOTE : quoted, + (int *)NULL, (int *)NULL) + : (WORD_LIST *)0; + free (tword); + pat = string_list (l); + dispose_words (l); + if (pat) + { + tword = quote_string_for_globbing (pat, QGLOB_CVTNULL); + free (pat); + pat = tword; + } + return (pat); +} + +#if 0 +/* Handle removing a pattern from a string as a result of ${name%[%]value} + or ${name#[#]value}. */ +static char * +variable_remove_pattern (value, pattern, patspec, quoted) + char *value, *pattern; + int patspec, quoted; +{ + char *tword; + + tword = remove_pattern (value, pattern, patspec); + + return (tword); +} +#endif + +static char * +list_remove_pattern (list, pattern, patspec, itype, quoted) + WORD_LIST *list; + char *pattern; + int patspec, itype, quoted; +{ + WORD_LIST *new, *l; + WORD_DESC *w; + char *tword; + + for (new = (WORD_LIST *)NULL, l = list; l; l = l->next) + { + tword = remove_pattern (l->word->word, pattern, patspec); + w = make_bare_word (tword); + FREE (tword); + new = make_word_list (w, new); + } + + l = REVERSE_LIST (new, WORD_LIST *); + if (itype == '*') +#if 0 + tword = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? string_list_dollar_star (l) : string_list (l); +#else + tword = (quoted & Q_DOUBLE_QUOTES) ? string_list_dollar_star (l) : string_list (l); +#endif + else + tword = string_list ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? quote_list (l) : l); + + dispose_words (l); + return (tword); +} + +static char * +parameter_list_remove_pattern (itype, pattern, patspec, quoted) + int itype; + char *pattern; + int patspec, quoted; +{ + char *ret; + WORD_LIST *list; + + list = list_rest_of_args (); + if (list == 0) + return ((char *)NULL); + ret = list_remove_pattern (list, pattern, patspec, itype, quoted); + dispose_words (list); + return (ret); +} + +#if defined (ARRAY_VARS) +static char * +array_remove_pattern (a, pattern, patspec, varname, quoted) + ARRAY *a; + char *pattern; + int patspec; + char *varname; /* so we can figure out how it's indexed */ + int quoted; +{ + int itype; + char *ret; + WORD_LIST *list; + SHELL_VAR *v; + + /* compute itype from varname here */ + v = array_variable_part (varname, &ret, 0); + itype = ret[0]; + + list = array_to_word_list (a); + if (list == 0) + return ((char *)NULL); + ret = list_remove_pattern (list, pattern, patspec, itype, quoted); + dispose_words (list); + + return ret; +} +#endif /* ARRAY_VARS */ + +static char * +parameter_brace_remove_pattern (varname, value, patstr, rtype, quoted) + char *varname, *value, *patstr; + int rtype, quoted; +{ + int vtype, patspec, starsub; + char *temp1, *val, *pattern; + SHELL_VAR *v; + + if (value == 0) + return ((char *)NULL); + + this_command_name = varname; + + vtype = get_var_and_type (varname, value, quoted, &v, &val); + if (vtype == -1) + return ((char *)NULL); + + starsub = vtype & VT_STARSUB; + vtype &= ~VT_STARSUB; + + patspec = getpatspec (rtype, patstr); + if (patspec == RP_LONG_LEFT || patspec == RP_LONG_RIGHT) + patstr++; + + pattern = getpattern (patstr, quoted, 1); + + temp1 = (char *)NULL; /* shut up gcc */ + switch (vtype) + { + case VT_VARIABLE: + case VT_ARRAYMEMBER: + temp1 = remove_pattern (val, pattern, patspec); + if (vtype == VT_VARIABLE) + FREE (val); + if (temp1) + { + val = quote_escapes (temp1); + free (temp1); + temp1 = val; + } + break; +#if defined (ARRAY_VARS) + case VT_ARRAYVAR: + temp1 = array_remove_pattern (array_cell (v), pattern, patspec, varname, quoted); + if (temp1 && ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) == 0)) + { + val = quote_escapes (temp1); + free (temp1); + temp1 = val; + } + break; +#endif + case VT_POSPARMS: + temp1 = parameter_list_remove_pattern (varname[0], pattern, patspec, quoted); + if (temp1 && ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) == 0)) + { + val = quote_escapes (temp1); + free (temp1); + temp1 = val; + } + break; + } + + FREE (pattern); + return temp1; +} + +/******************************************* + * * + * Functions to expand WORD_DESCs * + * * + *******************************************/ + +/* Expand WORD, performing word splitting on the result. This does + parameter expansion, command substitution, arithmetic expansion, + word splitting, and quote removal. */ + +WORD_LIST * +expand_word (word, quoted) + WORD_DESC *word; + int quoted; +{ + WORD_LIST *result, *tresult; + + tresult = call_expand_word_internal (word, quoted, 0, (int *)NULL, (int *)NULL); + result = word_list_split (tresult); + dispose_words (tresult); + return (result ? dequote_list (result) : result); +} + +/* Expand WORD, but do not perform word splitting on the result. This + does parameter expansion, command substitution, arithmetic expansion, + and quote removal. */ +WORD_LIST * +expand_word_unsplit (word, quoted) + WORD_DESC *word; + int quoted; +{ + WORD_LIST *result; + + expand_no_split_dollar_star = 1; + result = call_expand_word_internal (word, quoted, 0, (int *)NULL, (int *)NULL); + expand_no_split_dollar_star = 0; + + return (result ? dequote_list (result) : result); +} + +/* Perform shell expansions on WORD, but do not perform word splitting or + quote removal on the result. */ +WORD_LIST * +expand_word_leave_quoted (word, quoted) + WORD_DESC *word; + int quoted; +{ + return (call_expand_word_internal (word, quoted, 0, (int *)NULL, (int *)NULL)); +} + +#if defined (PROCESS_SUBSTITUTION) + +/*****************************************************************/ +/* */ +/* Hacking Process Substitution */ +/* */ +/*****************************************************************/ + +#if !defined (HAVE_DEV_FD) +/* Named pipes must be removed explicitly with `unlink'. This keeps a list + of FIFOs the shell has open. unlink_fifo_list will walk the list and + unlink all of them. add_fifo_list adds the name of an open FIFO to the + list. NFIFO is a count of the number of FIFOs in the list. */ +#define FIFO_INCR 20 + +struct temp_fifo { + char *file; + pid_t proc; +}; + +static struct temp_fifo *fifo_list = (struct temp_fifo *)NULL; +static int nfifo; +static int fifo_list_size; + +static void +add_fifo_list (pathname) + char *pathname; +{ + if (nfifo >= fifo_list_size - 1) + { + fifo_list_size += FIFO_INCR; + fifo_list = (struct temp_fifo *)xrealloc (fifo_list, + fifo_list_size * sizeof (struct temp_fifo)); + } + + fifo_list[nfifo].file = savestring (pathname); + nfifo++; +} + +void +unlink_fifo_list () +{ + int saved, i, j; + + if (nfifo == 0) + return; + + for (i = saved = 0; i < nfifo; i++) + { + if ((fifo_list[i].proc == -1) || (kill(fifo_list[i].proc, 0) == -1)) + { + unlink (fifo_list[i].file); + free (fifo_list[i].file); + fifo_list[i].file = (char *)NULL; + fifo_list[i].proc = -1; + } + else + saved++; + } + + /* If we didn't remove some of the FIFOs, compact the list. */ + if (saved) + { + for (i = j = 0; i < nfifo; i++) + if (fifo_list[i].file) + { + fifo_list[j].file = fifo_list[i].file; + fifo_list[j].proc = fifo_list[i].proc; + j++; + } + nfifo = j; + } + else + nfifo = 0; +} + +static char * +make_named_pipe () +{ + char *tname; + + tname = sh_mktmpname ("sh-np", MT_USERANDOM); + if (mkfifo (tname, 0600) < 0) + { + free (tname); + return ((char *)NULL); + } + + add_fifo_list (tname); + return (tname); +} + +#else /* HAVE_DEV_FD */ + +/* DEV_FD_LIST is a bitmap of file descriptors attached to pipes the shell + has open to children. NFDS is a count of the number of bits currently + set in DEV_FD_LIST. TOTFDS is a count of the highest possible number + of open files. */ +static char *dev_fd_list = (char *)NULL; +static int nfds; +static int totfds; /* The highest possible number of open files. */ + +static void +add_fifo_list (fd) + int fd; +{ + if (!dev_fd_list || fd >= totfds) + { + int ofds; + + ofds = totfds; + totfds = getdtablesize (); + if (totfds < 0 || totfds > 256) + totfds = 256; + if (fd > totfds) + totfds = fd + 2; + + dev_fd_list = (char *)xrealloc (dev_fd_list, totfds); + memset (dev_fd_list + ofds, '\0', totfds - ofds); + } + + dev_fd_list[fd] = 1; + nfds++; +} + +void +unlink_fifo_list () +{ + register int i; + + if (nfds == 0) + return; + + for (i = 0; nfds && i < totfds; i++) + if (dev_fd_list[i]) + { + close (i); + dev_fd_list[i] = 0; + nfds--; + } + + nfds = 0; +} + +#if defined (NOTDEF) +print_dev_fd_list () +{ + register int i; + + fprintf (stderr, "pid %ld: dev_fd_list:", (long)getpid ()); + fflush (stderr); + + for (i = 0; i < totfds; i++) + { + if (dev_fd_list[i]) + fprintf (stderr, " %d", i); + } + fprintf (stderr, "\n"); +} +#endif /* NOTDEF */ + +static char * +make_dev_fd_filename (fd) + int fd; +{ + char *ret, intbuf[INT_STRLEN_BOUND (int) + 1], *p; + + ret = (char *)xmalloc (sizeof (DEV_FD_PREFIX) + 4); + + strcpy (ret, DEV_FD_PREFIX); + p = inttostr (fd, intbuf, sizeof (intbuf)); + strcpy (ret + sizeof (DEV_FD_PREFIX) - 1, p); + + add_fifo_list (fd); + return (ret); +} + +#endif /* HAVE_DEV_FD */ + +/* Return a filename that will open a connection to the process defined by + executing STRING. HAVE_DEV_FD, if defined, means open a pipe and return + a filename in /dev/fd corresponding to a descriptor that is one of the + ends of the pipe. If not defined, we use named pipes on systems that have + them. Systems without /dev/fd and named pipes are out of luck. + + OPEN_FOR_READ_IN_CHILD, if 1, means open the named pipe for reading or + use the read end of the pipe and dup that file descriptor to fd 0 in + the child. If OPEN_FOR_READ_IN_CHILD is 0, we open the named pipe for + writing or use the write end of the pipe in the child, and dup that + file descriptor to fd 1 in the child. The parent does the opposite. */ + +static char * +process_substitute (string, open_for_read_in_child) + char *string; + int open_for_read_in_child; +{ + char *pathname; + int fd, result; + pid_t old_pid, pid; +#if defined (HAVE_DEV_FD) + int parent_pipe_fd, child_pipe_fd; + int fildes[2]; +#endif /* HAVE_DEV_FD */ +#if defined (JOB_CONTROL) + pid_t old_pipeline_pgrp; +#endif + + if (!string || !*string || wordexp_only) + return ((char *)NULL); + +#if !defined (HAVE_DEV_FD) + pathname = make_named_pipe (); +#else /* HAVE_DEV_FD */ + if (pipe (fildes) < 0) + { + sys_error (_("cannot make pipe for process substitution")); + return ((char *)NULL); + } + /* If OPEN_FOR_READ_IN_CHILD == 1, we want to use the write end of + the pipe in the parent, otherwise the read end. */ + parent_pipe_fd = fildes[open_for_read_in_child]; + child_pipe_fd = fildes[1 - open_for_read_in_child]; + /* Move the parent end of the pipe to some high file descriptor, to + avoid clashes with FDs used by the script. */ + parent_pipe_fd = move_to_high_fd (parent_pipe_fd, 1, 64); + + pathname = make_dev_fd_filename (parent_pipe_fd); +#endif /* HAVE_DEV_FD */ + + if (!pathname) + { + sys_error (_("cannot make pipe for process substitution")); + return ((char *)NULL); + } + + old_pid = last_made_pid; + +#if defined (JOB_CONTROL) + old_pipeline_pgrp = pipeline_pgrp; + pipeline_pgrp = shell_pgrp; + save_pipeline (1); +#endif /* JOB_CONTROL */ + + pid = make_child ((char *)NULL, 1); + if (pid == 0) + { + reset_terminating_signals (); /* XXX */ + free_pushed_string_input (); + /* Cancel traps, in trap.c. */ + restore_original_signals (); + setup_async_signals (); + subshell_environment |= SUBSHELL_COMSUB; + } + +#if defined (JOB_CONTROL) + set_sigchld_handler (); + stop_making_children (); + pipeline_pgrp = old_pipeline_pgrp; +#endif /* JOB_CONTROL */ + + if (pid < 0) + { + sys_error (_("cannot make child for process substitution")); + free (pathname); +#if defined (HAVE_DEV_FD) + close (parent_pipe_fd); + close (child_pipe_fd); +#endif /* HAVE_DEV_FD */ + return ((char *)NULL); + } + + if (pid > 0) + { +#if defined (JOB_CONTROL) + restore_pipeline (1); +#endif + +#if !defined (HAVE_DEV_FD) + fifo_list[nfifo-1].proc = pid; +#endif + + last_made_pid = old_pid; + +#if defined (JOB_CONTROL) && defined (PGRP_PIPE) + close_pgrp_pipe (); +#endif /* JOB_CONTROL && PGRP_PIPE */ + +#if defined (HAVE_DEV_FD) + close (child_pipe_fd); +#endif /* HAVE_DEV_FD */ + + return (pathname); + } + + set_sigint_handler (); + +#if defined (JOB_CONTROL) + set_job_control (0); +#endif /* JOB_CONTROL */ + +#if !defined (HAVE_DEV_FD) + /* Open the named pipe in the child. */ + fd = open (pathname, open_for_read_in_child ? O_RDONLY|O_NONBLOCK : O_WRONLY); + if (fd < 0) + { + /* Two separate strings for ease of translation. */ + if (open_for_read_in_child) + sys_error (_("cannot open named pipe %s for reading"), pathname); + else + sys_error (_("cannot open named pipe %s for writing"), pathname); + + exit (127); + } + if (open_for_read_in_child) + { + if (sh_unset_nodelay_mode (fd) < 0) + { + sys_error (_("cannout reset nodelay mode for fd %d"), fd); + exit (127); + } + } +#else /* HAVE_DEV_FD */ + fd = child_pipe_fd; +#endif /* HAVE_DEV_FD */ + + if (dup2 (fd, open_for_read_in_child ? 0 : 1) < 0) + { + sys_error (_("cannot duplicate named pipe %s as fd %d"), pathname, + open_for_read_in_child ? 0 : 1); + exit (127); + } + + if (fd != (open_for_read_in_child ? 0 : 1)) + close (fd); + + /* Need to close any files that this process has open to pipes inherited + from its parent. */ + if (current_fds_to_close) + { + close_fd_bitmap (current_fds_to_close); + current_fds_to_close = (struct fd_bitmap *)NULL; + } + +#if defined (HAVE_DEV_FD) + /* Make sure we close the parent's end of the pipe and clear the slot + in the fd list so it is not closed later, if reallocated by, for + instance, pipe(2). */ + close (parent_pipe_fd); + dev_fd_list[parent_pipe_fd] = 0; +#endif /* HAVE_DEV_FD */ + + result = parse_and_execute (string, "process substitution", (SEVAL_NONINT|SEVAL_NOHIST)); + +#if !defined (HAVE_DEV_FD) + /* Make sure we close the named pipe in the child before we exit. */ + close (open_for_read_in_child ? 0 : 1); +#endif /* !HAVE_DEV_FD */ + + exit (result); + /*NOTREACHED*/ +} +#endif /* PROCESS_SUBSTITUTION */ + +/***********************************/ +/* */ +/* Command Substitution */ +/* */ +/***********************************/ + +static char * +read_comsub (fd, quoted) + int fd, quoted; +{ + char *istring, buf[128], *bufp; + int istring_index, istring_size, c; + ssize_t bufn; + + istring = (char *)NULL; + istring_index = istring_size = bufn = 0; + +#ifdef __CYGWIN__ + setmode (fd, O_TEXT); /* we don't want CR/LF, we want Unix-style */ +#endif + + /* Read the output of the command through the pipe. */ + while (1) + { + if (fd < 0) + break; + if (--bufn <= 0) + { + bufn = zread (fd, buf, sizeof (buf)); + if (bufn <= 0) + break; + bufp = buf; + } + c = *bufp++; + + if (c == 0) + { +#if 0 + internal_warning ("read_comsub: ignored null byte in input"); +#endif + continue; + } + + /* Add the character to ISTRING, possibly after resizing it. */ + RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size, DEFAULT_ARRAY_SIZE); + + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || c == CTLESC || c == CTLNUL) + istring[istring_index++] = CTLESC; + + istring[istring_index++] = c; + +#if 0 +#if defined (__CYGWIN__) + if (c == '\n' && istring_index > 1 && istring[istring_index - 2] == '\r') + { + istring_index--; + istring[istring_index - 1] = '\n'; + } +#endif +#endif + } + + if (istring) + istring[istring_index] = '\0'; + + /* If we read no output, just return now and save ourselves some + trouble. */ + if (istring_index == 0) + { + FREE (istring); + return (char *)NULL; + } + + /* Strip trailing newlines from the output of the command. */ + if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) + { + while (istring_index > 0) + { + if (istring[istring_index - 1] == '\n') + { + --istring_index; + + /* If the newline was quoted, remove the quoting char. */ + if (istring[istring_index - 1] == CTLESC) + --istring_index; + } + else + break; + } + istring[istring_index] = '\0'; + } + else + strip_trailing (istring, istring_index - 1, 1); + + return istring; +} + +/* Perform command substitution on STRING. This returns a string, + possibly quoted. */ +char * +command_substitute (string, quoted) + char *string; + int quoted; +{ + pid_t pid, old_pid, old_pipeline_pgrp; + char *istring; + int result, fildes[2], function_value, pflags, rc; + + istring = (char *)NULL; + + /* Don't fork () if there is no need to. In the case of no command to + run, just return NULL. */ + if (!string || !*string || (string[0] == '\n' && !string[1])) + return ((char *)NULL); + + if (wordexp_only && read_but_dont_execute) + { + last_command_exit_value = 125; + jump_to_top_level (EXITPROG); + } + + /* We're making the assumption here that the command substitution will + eventually run a command from the file system. Since we'll run + maybe_make_export_env in this subshell before executing that command, + the parent shell and any other shells it starts will have to remake + the environment. If we make it before we fork, other shells won't + have to. Don't bother if we have any temporary variable assignments, + though, because the export environment will be remade after this + command completes anyway, but do it if all the words to be expanded + are variable assignments. */ + if (subst_assign_varlist == 0 || garglist == 0) + maybe_make_export_env (); /* XXX */ + + /* Flags to pass to parse_and_execute() */ + pflags = interactive ? SEVAL_RESETLINE : 0; + + /* Pipe the output of executing STRING into the current shell. */ + if (pipe (fildes) < 0) + { + sys_error (_("cannot make pipe for command substitution")); + goto error_exit; + } + + old_pid = last_made_pid; +#if defined (JOB_CONTROL) + old_pipeline_pgrp = pipeline_pgrp; + /* Don't reset the pipeline pgrp if we're already a subshell in a pipeline. */ + if ((subshell_environment & SUBSHELL_PIPE) == 0) + pipeline_pgrp = shell_pgrp; + cleanup_the_pipeline (); +#endif + + pid = make_child ((char *)NULL, 0); + if (pid == 0) + /* Reset the signal handlers in the child, but don't free the + trap strings. */ + reset_signal_handlers (); + +#if defined (JOB_CONTROL) + set_sigchld_handler (); + stop_making_children (); + pipeline_pgrp = old_pipeline_pgrp; +#else + stop_making_children (); +#endif /* JOB_CONTROL */ + + if (pid < 0) + { + sys_error (_("cannot make child for command substitution")); + error_exit: + + FREE (istring); + close (fildes[0]); + close (fildes[1]); + return ((char *)NULL); + } + + if (pid == 0) + { + set_sigint_handler (); /* XXX */ + + free_pushed_string_input (); + + if (dup2 (fildes[1], 1) < 0) + { + sys_error (_("command_substitute: cannot duplicate pipe as fd 1")); + exit (EXECUTION_FAILURE); + } + + /* If standard output is closed in the parent shell + (such as after `exec >&-'), file descriptor 1 will be + the lowest available file descriptor, and end up in + fildes[0]. This can happen for stdin and stderr as well, + but stdout is more important -- it will cause no output + to be generated from this command. */ + if ((fildes[1] != fileno (stdin)) && + (fildes[1] != fileno (stdout)) && + (fildes[1] != fileno (stderr))) + close (fildes[1]); + + if ((fildes[0] != fileno (stdin)) && + (fildes[0] != fileno (stdout)) && + (fildes[0] != fileno (stderr))) + close (fildes[0]); + + /* The currently executing shell is not interactive. */ + interactive = 0; + + /* This is a subshell environment. */ + subshell_environment |= SUBSHELL_COMSUB; + + /* When not in POSIX mode, command substitution does not inherit + the -e flag. */ + if (posixly_correct == 0) + exit_immediately_on_error = 0; + + remove_quoted_escapes (string); + + startup_state = 2; /* see if we can avoid a fork */ + /* Give command substitution a place to jump back to on failure, + so we don't go back up to main (). */ + result = setjmp (top_level); + + /* If we're running a command substitution inside a shell function, + trap `return' so we don't return from the function in the subshell + and go off to never-never land. */ + if (result == 0 && return_catch_flag) + function_value = setjmp (return_catch); + else + function_value = 0; + + if (result == ERREXIT) + rc = last_command_exit_value; + else if (result == EXITPROG) + rc = last_command_exit_value; + else if (result) + rc = EXECUTION_FAILURE; + else if (function_value) + rc = return_catch_value; + else + { + subshell_level++; + rc = parse_and_execute (string, "command substitution", pflags|SEVAL_NOHIST); + subshell_level--; + } + + last_command_exit_value = rc; + rc = run_exit_trap (); + exit (rc); + } + else + { +#if defined (JOB_CONTROL) && defined (PGRP_PIPE) + close_pgrp_pipe (); +#endif /* JOB_CONTROL && PGRP_PIPE */ + + close (fildes[1]); + + istring = read_comsub (fildes[0], quoted); + + close (fildes[0]); + + current_command_subst_pid = pid; + last_command_exit_value = wait_for (pid); + last_command_subst_pid = pid; + last_made_pid = old_pid; + +#if defined (JOB_CONTROL) + /* If last_command_exit_value > 128, then the substituted command + was terminated by a signal. If that signal was SIGINT, then send + SIGINT to ourselves. This will break out of loops, for instance. */ + if (last_command_exit_value == (128 + SIGINT) && last_command_exit_signal == SIGINT) + kill (getpid (), SIGINT); + + /* wait_for gives the terminal back to shell_pgrp. If some other + process group should have it, give it away to that group here. + pipeline_pgrp is non-zero only while we are constructing a + pipline, so what we are concerned about is whether or not that + pipeline was started in the background. A pipeline started in + the background should never get the tty back here. */ +#if 0 + if (interactive && pipeline_pgrp != (pid_t)0 && pipeline_pgrp != last_asynchronous_pid) +#else + if (interactive && pipeline_pgrp != (pid_t)0 && (subshell_environment & SUBSHELL_ASYNC) == 0) +#endif + give_terminal_to (pipeline_pgrp, 0); +#endif /* JOB_CONTROL */ + + return (istring); + } +} + +/******************************************************** + * * + * Utility functions for parameter expansion * + * * + ********************************************************/ + +#if defined (ARRAY_VARS) + +static arrayind_t +array_length_reference (s) + char *s; +{ + int len; + arrayind_t ind; + char *t, c; + ARRAY *array; + SHELL_VAR *var; + + var = array_variable_part (s, &t, &len); + + /* If unbound variables should generate an error, report one and return + failure. */ + if ((var == 0 || array_p (var) == 0) && unbound_vars_is_error) + { + c = *--t; + *t = '\0'; + err_unboundvar (s); + *t = c; + return (-1); + } + else if (var == 0) + return 0; + + /* We support a couple of expansions for variables that are not arrays. + We'll return the length of the value for v[0], and 1 for v[@] or + v[*]. Return 0 for everything else. */ + + array = array_p (var) ? array_cell (var) : (ARRAY *)NULL; + + if (ALL_ELEMENT_SUB (t[0]) && t[1] == ']') + return (array_p (var) ? array_num_elements (array) : 1); + + ind = array_expand_index (t, len); + if (ind < 0) + { + err_badarraysub (t); + return (-1); + } + + if (array_p (var)) + t = array_reference (array, ind); + else + t = (ind == 0) ? value_cell (var) : (char *)NULL; + + len = STRLEN (t); + return (len); +} +#endif /* ARRAY_VARS */ + +static int +valid_brace_expansion_word (name, var_is_special) + char *name; + int var_is_special; +{ + if (DIGIT (*name) && all_digits (name)) + return 1; + else if (var_is_special) + return 1; +#if defined (ARRAY_VARS) + else if (valid_array_reference (name)) + return 1; +#endif /* ARRAY_VARS */ + else if (legal_identifier (name)) + return 1; + else + return 0; +} + +static int +chk_atstar (name, quoted, quoted_dollar_atp, contains_dollar_at) + char *name; + int quoted; + int *quoted_dollar_atp, *contains_dollar_at; +{ + char *temp1; + + if (name == 0) + { + if (quoted_dollar_atp) + *quoted_dollar_atp = 0; + if (contains_dollar_at) + *contains_dollar_at = 0; + return 0; + } + + /* check for $@ and $* */ + if (name[0] == '@' && name[1] == 0) + { + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp) + *quoted_dollar_atp = 1; + if (contains_dollar_at) + *contains_dollar_at = 1; + return 1; + } + else if (name[0] == '*' && name[1] == '\0' && quoted == 0) + { + if (contains_dollar_at) + *contains_dollar_at = 1; + return 1; + } + + /* Now check for ${array[@]} and ${array[*]} */ +#if defined (ARRAY_VARS) + else if (valid_array_reference (name)) + { + temp1 = xstrchr (name, '['); + if (temp1 && temp1[1] == '@' && temp1[2] == ']') + { + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp) + *quoted_dollar_atp = 1; + if (contains_dollar_at) + *contains_dollar_at = 1; + return 1; + } /* [ */ + /* ${array[*]}, when unquoted, should be treated like ${array[@]}, + which should result in separate words even when IFS is unset. */ + if (temp1 && temp1[1] == '*' && temp1[2] == ']' && quoted == 0) + { + if (contains_dollar_at) + *contains_dollar_at = 1; + return 1; + } + } +#endif + return 0; +} + +/* Parameter expand NAME, and return a new string which is the expansion, + or NULL if there was no expansion. + VAR_IS_SPECIAL is non-zero if NAME is one of the special variables in + the shell, e.g., "@", "$", "*", etc. QUOTED, if non-zero, means that + NAME was found inside of a double-quoted expression. */ +static char * +parameter_brace_expand_word (name, var_is_special, quoted) + char *name; + int var_is_special, quoted; +{ + char *temp, *tt; + intmax_t arg_index; + SHELL_VAR *var; + int atype; + + /* Handle multiple digit arguments, as in ${11}. */ + + if (legal_number (name, &arg_index)) + { + tt = get_dollar_var_value (arg_index); + if (tt) + temp = (*tt && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) + ? quote_string (tt) + : quote_escapes (tt); + else + temp = (char *)NULL; + FREE (tt); + } + else if (var_is_special) /* ${@} */ + { + int sindex; + tt = (char *)xmalloc (2 + strlen (name)); + tt[sindex = 0] = '$'; + strcpy (tt + 1, name); + + temp = param_expand (tt, &sindex, quoted, (int *)NULL, (int *)NULL, + (int *)NULL, (int *)NULL, 0); + free (tt); + } +#if defined (ARRAY_VARS) + else if (valid_array_reference (name)) + { + temp = array_value (name, quoted, &atype); + if (atype == 0 && temp) + temp = (*temp && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) + ? quote_string (temp) + : quote_escapes (temp); + } +#endif + else if (var = find_variable (name)) + { + if (var_isset (var) && invisible_p (var) == 0) + { +#if defined (ARRAY_VARS) + temp = array_p (var) ? array_reference (array_cell (var), 0) : value_cell (var); +#else + temp = value_cell (var); +#endif + + if (temp) + temp = (*temp && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) + ? quote_string (temp) + : quote_escapes (temp); + } + else + temp = (char *)NULL; + } + else + temp = (char *)NULL; + + return (temp); +} + +/* Expand an indirect reference to a variable: ${!NAME} expands to the + value of the variable whose name is the value of NAME. */ +static char * +parameter_brace_expand_indir (name, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at) + char *name; + int var_is_special, quoted; + int *quoted_dollar_atp, *contains_dollar_at; +{ + char *temp, *t; + + t = parameter_brace_expand_word (name, var_is_special, quoted); + /* Have to dequote here if necessary */ + if (t) + { + temp = (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) + ? dequote_string (t) + : dequote_escapes (t); + free (t); + t = temp; + } + chk_atstar (t, quoted, quoted_dollar_atp, contains_dollar_at); + if (t == 0) + return (t); + temp = parameter_brace_expand_word (t, SPECIAL_VAR(t, 0), quoted); + free (t); + return temp; +} + +/* Expand the right side of a parameter expansion of the form ${NAMEcVALUE}, + depending on the value of C, the separating character. C can be one of + "-", "+", or "=". QUOTED is true if the entire brace expression occurs + between double quotes. */ +static char * +parameter_brace_expand_rhs (name, value, c, quoted, qdollaratp, hasdollarat) + char *name, *value; + int c, quoted, *qdollaratp, *hasdollarat; +{ + WORD_LIST *l; + char *t, *t1, *temp; + int hasdol; + +#if 0 + /* XXX - Should we tilde expand in an assignment context if C is `='? */ + if (*value == '~') + temp = bash_tilde_expand (value, 0); + else if (xstrchr (value, '~') && unquoted_substring ("=~", value)) + temp = bash_tilde_expand (value, 1); + else +#endif + temp = savestring (value); + + /* If the entire expression is between double quotes, we want to treat + the value as a double-quoted string, with the exception that we strip + embedded unescaped double quotes. */ + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && *temp) + { + hasdol = 0; + t = string_extract_double_quoted (temp, &hasdol, 1); + free (temp); + temp = t; + } + + hasdol = 0; + /* XXX was 0 not quoted */ + l = *temp ? expand_string_for_rhs (temp, quoted, &hasdol, (int *)NULL) + : (WORD_LIST *)0; + if (hasdollarat) + *hasdollarat = hasdol || (l && l->next); + free (temp); + if (l) + { + /* The expansion of TEMP returned something. We need to treat things + slightly differently if HASDOL is non-zero. If we have "$@", the + individual words have already been quoted. We need to turn them + into a string with the words separated by the first character of + $IFS without any additional quoting, so string_list_dollar_at won't + do the right thing. We use string_list_dollar_star instead. */ + temp = (hasdol || l->next) ? string_list_dollar_star (l) : string_list (l); + + /* If l->next is not null, we know that TEMP contained "$@", since that + is the only expansion that creates more than one word. */ + if (qdollaratp && ((hasdol && quoted) || l->next)) + *qdollaratp = 1; + dispose_words (l); + } + else if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && hasdol) + { + /* The brace expansion occurred between double quotes and there was + a $@ in TEMP. It does not matter if the $@ is quoted, as long as + it does not expand to anything. In this case, we want to return + a quoted empty string. */ + temp = (char *)xmalloc (2); + temp[0] = CTLNUL; + temp[1] = '\0'; + } + else + temp = (char *)NULL; + + if (c == '-' || c == '+') + return (temp); + + /* c == '=' */ + t = temp ? savestring (temp) : savestring (""); + t1 = dequote_string (t); + free (t); +#if defined (ARRAY_VARS) + if (valid_array_reference (name)) + assign_array_element (name, t1); + else +#endif /* ARRAY_VARS */ + bind_variable (name, t1); + free (t1); + return (temp); +} + +/* Deal with the right hand side of a ${name:?value} expansion in the case + that NAME is null or not set. If VALUE is non-null it is expanded and + used as the error message to print, otherwise a standard message is + printed. */ +static void +parameter_brace_expand_error (name, value) + char *name, *value; +{ + WORD_LIST *l; + char *temp; + + if (value && *value) + { +#if 0 + if (*value == '~') + temp = bash_tilde_expand (value, 0); + else if (xstrchr (value, '~') && unquoted_substring ("=~", value)) + temp = bash_tilde_expand (value, 1); + else +#endif + temp = savestring (value); + + l = expand_string (temp, 0); + FREE (temp); + temp = string_list (l); + report_error ("%s: %s", name, temp ? temp : ""); /* XXX was value not "" */ + FREE (temp); + dispose_words (l); + } + else + report_error (_("%s: parameter null or not set"), name); + + /* Free the data we have allocated during this expansion, since we + are about to longjmp out. */ + free (name); + FREE (value); +} + +/* Return 1 if NAME is something for which parameter_brace_expand_length is + OK to do. */ +static int +valid_length_expression (name) + char *name; +{ + return (name[1] == '\0' || /* ${#} */ + ((sh_syntaxtab[(unsigned char) name[1]] & CSPECVAR) && name[2] == '\0') || /* special param */ + (DIGIT (name[1]) && all_digits (name + 1)) || /* ${#11} */ +#if defined (ARRAY_VARS) + valid_array_reference (name + 1) || /* ${#a[7]} */ +#endif + legal_identifier (name + 1)); /* ${#PS1} */ +} + +#if defined (HANDLE_MULTIBYTE) +size_t +mbstrlen (s) + const char *s; +{ + size_t clen, nc; + mbstate_t mbs; + + nc = 0; + memset (&mbs, 0, sizeof (mbs)); + while ((clen = mbrlen(s, MB_CUR_MAX, &mbs)) != 0 && (MB_INVALIDCH(clen) == 0)) + { + s += clen; + nc++; + } + return nc; +} +#endif + + +/* Handle the parameter brace expansion that requires us to return the + length of a parameter. */ +static intmax_t +parameter_brace_expand_length (name) + char *name; +{ + char *t, *newname; + intmax_t number, arg_index; + WORD_LIST *list; +#if defined (ARRAY_VARS) + SHELL_VAR *var; +#endif + + if (name[1] == '\0') /* ${#} */ + number = number_of_args (); + else if ((name[1] == '@' || name[1] == '*') && name[2] == '\0') /* ${#@}, ${#*} */ + number = number_of_args (); + else if ((sh_syntaxtab[(unsigned char) name[1]] & CSPECVAR) && name[2] == '\0') + { + /* Take the lengths of some of the shell's special parameters. */ + switch (name[1]) + { + case '-': + t = which_set_flags (); + break; + case '?': + t = itos (last_command_exit_value); + break; + case '$': + t = itos (dollar_dollar_pid); + break; + case '!': + if (last_asynchronous_pid == NO_PID) + t = (char *)NULL; + else + t = itos (last_asynchronous_pid); + break; + case '#': + t = itos (number_of_args ()); + break; + } + number = STRLEN (t); + FREE (t); + } +#if defined (ARRAY_VARS) + else if (valid_array_reference (name + 1)) + number = array_length_reference (name + 1); +#endif /* ARRAY_VARS */ + else + { + number = 0; + + if (legal_number (name + 1, &arg_index)) /* ${#1} */ + { + t = get_dollar_var_value (arg_index); + number = MB_STRLEN (t); + FREE (t); + } +#if defined (ARRAY_VARS) + else if ((var = find_variable (name + 1)) && (invisible_p (var) == 0) && array_p (var)) + { + t = array_reference (array_cell (var), 0); + number = MB_STRLEN (t); + } +#endif + else /* ${#PS1} */ + { + newname = savestring (name); + newname[0] = '$'; + list = expand_string (newname, Q_DOUBLE_QUOTES); + t = list ? string_list (list) : (char *)NULL; + free (newname); + if (list) + dispose_words (list); + + number = MB_STRLEN (t); + FREE (t); + } + } + + return (number); +} + +/* Skip characters in SUBSTR until DELIM. SUBSTR is an arithmetic expression, + so we do some ad-hoc parsing of an arithmetic expression to find + the first DELIM, instead of using strchr(3). Two rules: + 1. If the substring contains a `(', read until closing `)'. + 2. If the substring contains a `?', read past one `:' for each `?'. +*/ + +static char * +skiparith (substr, delim) + char *substr; + int delim; +{ + size_t sublen; + int skipcol, pcount, i; + DECLARE_MBSTATE; + + sublen = strlen (substr); + i = skipcol = pcount = 0; + while (substr[i]) + { + /* Balance parens */ + if (substr[i] == LPAREN) + { + pcount++; + i++; + continue; + } + if (substr[i] == RPAREN && pcount) + { + pcount--; + i++; + continue; + } + if (pcount) + { + ADVANCE_CHAR (substr, sublen, i); + continue; + } + + /* Skip one `:' for each `?' */ + if (substr[i] == ':' && skipcol) + { + skipcol--; + i++; + continue; + } + if (substr[i] == delim) + break; + if (substr[i] == '?') + { + skipcol++; + i++; + continue; + } + ADVANCE_CHAR (substr, sublen, i); + } + + return (substr + i); +} + +/* Verify and limit the start and end of the desired substring. If + VTYPE == 0, a regular shell variable is being used; if it is 1, + then the positional parameters are being used; if it is 2, then + VALUE is really a pointer to an array variable that should be used. + Return value is 1 if both values were OK, 0 if there was a problem + with an invalid expression, or -1 if the values were out of range. */ +static int +verify_substring_values (value, substr, vtype, e1p, e2p) + char *value, *substr; + int vtype; + intmax_t *e1p, *e2p; +{ + char *t, *temp1, *temp2; + arrayind_t len; + int expok; +#if defined (ARRAY_VARS) + ARRAY *a; +#endif + + /* duplicate behavior of strchr(3) */ + t = skiparith (substr, ':'); + if (*t && *t == ':') + *t = '\0'; + else + t = (char *)0; + + temp1 = expand_string_if_necessary (substr, Q_DOUBLE_QUOTES, expand_string); + *e1p = evalexp (temp1, &expok); + free (temp1); + if (expok == 0) + return (0); + + len = -1; /* paranoia */ + switch (vtype) + { + case VT_VARIABLE: + case VT_ARRAYMEMBER: + len = MB_STRLEN (value); + break; + case VT_POSPARMS: + len = number_of_args () + 1; + break; +#if defined (ARRAY_VARS) + case VT_ARRAYVAR: + a = (ARRAY *)value; + /* For arrays, the first value deals with array indices. Negative + offsets count from one past the array's maximum index. */ + len = array_max_index (a) + (*e1p < 0); /* arrays index from 0 to n - 1 */ + break; +#endif + } + + if (len == -1) /* paranoia */ + return -1; + + if (*e1p < 0) /* negative offsets count from end */ + *e1p += len; + + if (*e1p > len || *e1p < 0) + return (-1); + +#if defined (ARRAY_VARS) + /* For arrays, the second offset deals with the number of elements. */ + if (vtype == VT_ARRAYVAR) + len = array_num_elements (a); +#endif + + if (t) + { + t++; + temp2 = savestring (t); + temp1 = expand_string_if_necessary (temp2, Q_DOUBLE_QUOTES, expand_string); + free (temp2); + t[-1] = ':'; + *e2p = evalexp (temp1, &expok); + free (temp1); + if (expok == 0) + return (0); + if (*e2p < 0) + { + internal_error (_("%s: substring expression < 0"), t); + return (0); + } +#if defined (ARRAY_VARS) + /* In order to deal with sparse arrays, push the intelligence about how + to deal with the number of elements desired down to the array- + specific functions. */ + if (vtype != VT_ARRAYVAR) +#endif + { + *e2p += *e1p; /* want E2 chars starting at E1 */ + if (*e2p > len) + *e2p = len; + } + } + else + *e2p = len; + + return (1); +} + +/* Return the type of variable specified by VARNAME (simple variable, + positional param, or array variable). Also return the value specified + by VARNAME (value of a variable or a reference to an array element). + If this returns VT_VARIABLE, the caller assumes that CTLESC and CTLNUL + characters in the value are quoted with CTLESC and takes appropriate + steps. For convenience, *VALP is set to the dequoted VALUE. */ +static int +get_var_and_type (varname, value, quoted, varp, valp) + char *varname, *value; + int quoted; + SHELL_VAR **varp; + char **valp; +{ + int vtype; + char *temp; +#if defined (ARRAY_VARS) + SHELL_VAR *v; +#endif + + /* This sets vtype to VT_VARIABLE or VT_POSPARMS */ + vtype = (varname[0] == '@' || varname[0] == '*') && varname[1] == '\0'; + if (vtype == VT_POSPARMS && varname[0] == '*') + vtype |= VT_STARSUB; + *varp = (SHELL_VAR *)NULL; + +#if defined (ARRAY_VARS) + if (valid_array_reference (varname)) + { + v = array_variable_part (varname, &temp, (int *)0); + if (v && array_p (v)) + { /* [ */ + if (ALL_ELEMENT_SUB (temp[0]) && temp[1] == ']') + { + vtype = VT_ARRAYVAR; + if (temp[0] == '*') + vtype |= VT_STARSUB; + *valp = (char *)array_cell (v); + } + else + { + vtype = VT_ARRAYMEMBER; + *valp = array_value (varname, 1, (int *)NULL); + } + *varp = v; + } + else + return -1; + } + else if ((v = find_variable (varname)) && (invisible_p (v) == 0) && array_p (v)) + { + vtype = VT_ARRAYMEMBER; + *varp = v; + *valp = array_reference (array_cell (v), 0); + } + else +#endif +#if 1 + { + if (value && vtype == VT_VARIABLE) + { + if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) + *valp = dequote_string (value); + else + *valp = dequote_escapes (value); + } + else + *valp = value; + } +#else + *valp = (value && vtype == VT_VARIABLE) ? dequote_escapes (value) : value; +#endif + + return vtype; +} + +/******************************************************/ +/* */ +/* Functions to extract substrings of variable values */ +/* */ +/******************************************************/ + +#if defined (HANDLE_MULTIBYTE) +/* Character-oriented rather than strictly byte-oriented substrings. S and + E, rather being strict indices into STRING, indicate character (possibly + multibyte character) positions that require calculation. + Used by the ${param:offset[:length]} expansion. */ +static char * +mb_substring (string, s, e) + char *string; + int s, e; +{ + char *tt; + int start, stop, i, slen; + DECLARE_MBSTATE; + + start = 0; + slen = STRLEN (string); + + i = s; + while (string[start] && i--) + ADVANCE_CHAR (string, slen, start); + stop = start; + i = e - s; + while (string[stop] && i--) + ADVANCE_CHAR (string, slen, stop); + tt = substring (string, start, stop); + return tt; +} +#endif + +/* Process a variable substring expansion: ${name:e1[:e2]}. If VARNAME + is `@', use the positional parameters; otherwise, use the value of + VARNAME. If VARNAME is an array variable, use the array elements. */ + +static char * +parameter_brace_substring (varname, value, substr, quoted) + char *varname, *value, *substr; + int quoted; +{ + intmax_t e1, e2; + int vtype, r, starsub; + char *temp, *val, *tt; + SHELL_VAR *v; + + if (value == 0) + return ((char *)NULL); + + this_command_name = varname; + + vtype = get_var_and_type (varname, value, quoted, &v, &val); + if (vtype == -1) + return ((char *)NULL); + + starsub = vtype & VT_STARSUB; + vtype &= ~VT_STARSUB; + + r = verify_substring_values (val, substr, vtype, &e1, &e2); + if (r <= 0) + return ((r == 0) ? &expand_param_error : (char *)NULL); + + switch (vtype) + { + case VT_VARIABLE: + case VT_ARRAYMEMBER: +#if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1) + tt = mb_substring (val, e1, e2); + else +#endif + tt = substring (val, e1, e2); + + if (vtype == VT_VARIABLE) + FREE (val); + if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) + temp = quote_string (tt); + else + temp = tt ? quote_escapes (tt) : (char *)NULL; + FREE (tt); + break; + case VT_POSPARMS: + tt = pos_params (varname, e1, e2, quoted); + if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) == 0) + { + temp = tt ? quote_escapes (tt) : (char *)NULL; + FREE (tt); + } + else + temp = tt; + break; +#if defined (ARRAY_VARS) + case VT_ARRAYVAR: + /* We want E2 to be the number of elements desired (arrays can be sparse, + so verify_substring_values just returns the numbers specified and we + rely on array_subrange to understand how to deal with them). */ + tt = array_subrange (array_cell (v), e1, e2, starsub, quoted); + if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) == 0) + { + temp = tt ? quote_escapes (tt) : (char *)NULL; + FREE (tt); + } + else + temp = tt; + break; +#endif + default: + temp = (char *)NULL; + } + + return temp; +} + +/****************************************************************/ +/* */ +/* Functions to perform pattern substitution on variable values */ +/* */ +/****************************************************************/ + +char * +pat_subst (string, pat, rep, mflags) + char *string, *pat, *rep; + int mflags; +{ + char *ret, *s, *e, *str; + int rsize, rptr, l, replen, mtype; + + mtype = mflags & MATCH_TYPEMASK; + + /* Special cases: + * 1. A null pattern with mtype == MATCH_BEG means to prefix STRING + * with REP and return the result. + * 2. A null pattern with mtype == MATCH_END means to append REP to + * STRING and return the result. + */ + if ((pat == 0 || *pat == 0) && (mtype == MATCH_BEG || mtype == MATCH_END)) + { + replen = STRLEN (rep); + l = strlen (string); + ret = (char *)xmalloc (replen + l + 2); + if (replen == 0) + strcpy (ret, string); + else if (mtype == MATCH_BEG) + { + strcpy (ret, rep); + strcpy (ret + replen, string); + } + else + { + strcpy (ret, string); + strcpy (ret + l, rep); + } + return (ret); + } + + ret = (char *)xmalloc (rsize = 64); + ret[0] = '\0'; + + for (replen = STRLEN (rep), rptr = 0, str = string;;) + { + if (match_pattern (str, pat, mtype, &s, &e) == 0) + break; + l = s - str; + RESIZE_MALLOCED_BUFFER (ret, rptr, (l + replen), rsize, 64); + + /* OK, now copy the leading unmatched portion of the string (from + str to s) to ret starting at rptr (the current offset). Then copy + the replacement string at ret + rptr + (s - str). Increment + rptr (if necessary) and str and go on. */ + if (l) + { + strncpy (ret + rptr, str, l); + rptr += l; + } + if (replen) + { + strncpy (ret + rptr, rep, replen); + rptr += replen; + } + str = e; /* e == end of match */ + + if (((mflags & MATCH_GLOBREP) == 0) || mtype != MATCH_ANY) + break; + + if (s == e) + e++, str++; /* avoid infinite recursion on zero-length match */ + } + + /* Now copy the unmatched portion of the input string */ + if (*str) + { + RESIZE_MALLOCED_BUFFER (ret, rptr, STRLEN(str) + 1, rsize, 64); + strcpy (ret + rptr, str); + } + else + ret[rptr] = '\0'; + + return ret; +} + +/* Do pattern match and replacement on the positional parameters. */ +static char * +pos_params_pat_subst (string, pat, rep, mflags) + char *string, *pat, *rep; + int mflags; +{ + WORD_LIST *save, *params; + WORD_DESC *w; + char *ret, *tt; + + save = params = list_rest_of_args (); + if (save == 0) + return ((char *)NULL); + + for ( ; params; params = params->next) + { + ret = pat_subst (params->word->word, pat, rep, mflags); + w = make_bare_word (ret); + dispose_word (params->word); + params->word = w; + FREE (ret); + } + + if ((mflags & (MATCH_QUOTED|MATCH_STARSUB)) == (MATCH_QUOTED|MATCH_STARSUB)) + ret = string_list_dollar_star (quote_list (save)); + else + ret = string_list ((mflags & MATCH_QUOTED) ? quote_list (save) : save); + dispose_words (save); + + return (ret); +} + +/* Perform pattern substitution on VALUE, which is the expansion of + VARNAME. PATSUB is an expression supplying the pattern to match + and the string to substitute. QUOTED is a flags word containing + the type of quoting currently in effect. */ +static char * +parameter_brace_patsub (varname, value, patsub, quoted) + char *varname, *value, *patsub; + int quoted; +{ + int vtype, mflags, starsub; + char *val, *temp, *pat, *rep, *p, *lpatsub, *tt; + SHELL_VAR *v; + + if (value == 0) + return ((char *)NULL); + + this_command_name = varname; + + vtype = get_var_and_type (varname, value, quoted, &v, &val); + if (vtype == -1) + return ((char *)NULL); + + starsub = vtype & VT_STARSUB; + vtype &= ~VT_STARSUB; + + mflags = 0; + if (*patsub == '/') + { + mflags |= MATCH_GLOBREP; + patsub++; + } + + /* Malloc this because expand_string_if_necessary or one of the expansion + functions in its call chain may free it on a substitution error. */ + lpatsub = savestring (patsub); + + if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) + mflags |= MATCH_QUOTED; + + if (starsub) + mflags |= MATCH_STARSUB; + + if (rep = quoted_strchr (lpatsub, '/', ST_BACKSL)) + *rep++ = '\0'; + else + rep = (char *)NULL; + + if (rep && *rep == '\0') + rep = (char *)NULL; + +#if 0 + /* Expand PAT and REP for command, variable and parameter, arithmetic, + and process substitution. Also perform quote removal. Do not + perform word splitting or filename generation. */ + pat = expand_string_if_necessary (lpatsub, (quoted & ~Q_DOUBLE_QUOTES), expand_string_unsplit); +#else + /* Perform the same expansions on the pattern as performed by the + pattern removal expansions. */ + pat = getpattern (lpatsub, quoted, 1); +#endif + + if (rep) + { + if ((mflags & MATCH_QUOTED) == 0) + rep = expand_string_if_necessary (rep, quoted, expand_string_unsplit); + else + rep = expand_string_to_string_internal (rep, quoted, expand_string_unsplit); + } + + p = pat; + if (pat && pat[0] == '#') + { + mflags |= MATCH_BEG; + p++; + } + else if (pat && pat[0] == '%') + { + mflags |= MATCH_END; + p++; + } + else + mflags |= MATCH_ANY; + + /* OK, we now want to substitute REP for PAT in VAL. If + flags & MATCH_GLOBREP is non-zero, the substitution is done + everywhere, otherwise only the first occurrence of PAT is + replaced. The pattern matching code doesn't understand + CTLESC quoting CTLESC and CTLNUL so we use the dequoted variable + values passed in (VT_VARIABLE) so the pattern substitution + code works right. We need to requote special chars after + we're done for VT_VARIABLE and VT_ARRAYMEMBER, and for the + other cases if QUOTED == 0, since the posparams and arrays + indexed by * or @ do special things when QUOTED != 0. */ + + switch (vtype) + { + case VT_VARIABLE: + case VT_ARRAYMEMBER: + temp = pat_subst (val, p, rep, mflags); + if (vtype == VT_VARIABLE) + FREE (val); + if (temp) + { + tt = quote_escapes (temp); + free (temp); + temp = tt; + } + break; + case VT_POSPARMS: + temp = pos_params_pat_subst (val, p, rep, mflags); + if (temp && (mflags & MATCH_QUOTED) == 0) + { + tt = quote_escapes (temp); + free (temp); + temp = tt; + } + break; +#if defined (ARRAY_VARS) + case VT_ARRAYVAR: + temp = array_patsub (array_cell (v), p, rep, mflags); + if (temp && (mflags & MATCH_QUOTED) == 0) + { + tt = quote_escapes (temp); + free (temp); + temp = tt; + } + break; +#endif + } + + FREE (pat); + FREE (rep); + free (lpatsub); + + return temp; +} + +/****************************************************************/ +/* */ +/* Functions to perform parameter expansion on a string */ +/* */ +/****************************************************************/ + +/* ${[#][!]name[[:]#[#]%[%]-=?+[word][:e1[:e2]]]} */ +static char * +parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_dollar_at) + char *string; + int *indexp, quoted, *quoted_dollar_atp, *contains_dollar_at; +{ + int check_nullness, var_is_set, var_is_null, var_is_special; + int want_substring, want_indir, want_patsub; + char *name, *value, *temp, *temp1; + int t_index, sindex, c; + intmax_t number; + + value = (char *)NULL; + var_is_set = var_is_null = var_is_special = check_nullness = 0; + want_substring = want_indir = want_patsub = 0; + + sindex = *indexp; + t_index = ++sindex; + name = string_extract (string, &t_index, "#%:-=?+/}", EX_VARNAME); + + /* If the name really consists of a special variable, then make sure + that we have the entire name. We don't allow indirect references + to special variables except `#', `?', `@' and `*'. */ + if ((sindex == t_index && + (string[t_index] == '-' || + string[t_index] == '?' || + string[t_index] == '#')) || + (sindex == t_index - 1 && string[sindex] == '!' && + (string[t_index] == '#' || + string[t_index] == '?' || + string[t_index] == '@' || + string[t_index] == '*'))) + { + t_index++; + free (name); + temp1 = string_extract (string, &t_index, "#%:-=?+/}", 0); + name = (char *)xmalloc (3 + (strlen (temp1))); + *name = string[sindex]; + if (string[sindex] == '!') + { + /* indirect reference of $#, $?, $@, or $* */ + name[1] = string[sindex + 1]; + strcpy (name + 2, temp1); + } + else + strcpy (name + 1, temp1); + free (temp1); + } + sindex = t_index; + + /* Find out what character ended the variable name. Then + do the appropriate thing. */ + if (c = string[sindex]) + sindex++; + + /* If c is followed by one of the valid parameter expansion + characters, move past it as normal. If not, assume that + a substring specification is being given, and do not move + past it. */ + if (c == ':' && VALID_PARAM_EXPAND_CHAR (string[sindex])) + { + check_nullness++; + if (c = string[sindex]) + sindex++; + } + else if (c == ':' && string[sindex] != RBRACE) + want_substring = 1; + else if (c == '/' && string[sindex] != RBRACE) + want_patsub = 1; + + /* Catch the valid and invalid brace expressions that made it through the + tests above. */ + /* ${#-} is a valid expansion and means to take the length of $-. + Similarly for ${#?} and ${##}... */ + if (name[0] == '#' && name[1] == '\0' && check_nullness == 0 && + VALID_SPECIAL_LENGTH_PARAM (c) && string[sindex] == RBRACE) + { + name = (char *)xrealloc (name, 3); + name[1] = c; + name[2] = '\0'; + c = string[sindex++]; + } + + /* ...but ${#%}, ${#:}, ${#=}, ${#+}, and ${#/} are errors. */ + if (name[0] == '#' && name[1] == '\0' && check_nullness == 0 && + member (c, "%:=+/") && string[sindex] == RBRACE) + { + temp = (char *)NULL; + goto bad_substitution; + } + + /* Indirect expansion begins with a `!'. A valid indirect expansion is + either a variable name, one of the positional parameters or a special + variable that expands to one of the positional parameters. */ + want_indir = *name == '!' && + (legal_variable_starter ((unsigned char)name[1]) || DIGIT (name[1]) + || VALID_INDIR_PARAM (name[1])); + + /* Determine the value of this variable. */ + + /* Check for special variables, directly referenced. */ + if (SPECIAL_VAR (name, want_indir)) + var_is_special++; + + /* Check for special expansion things, like the length of a parameter */ + if (*name == '#' && name[1]) + { + /* If we are not pointing at the character just after the + closing brace, then we haven't gotten all of the name. + Since it begins with a special character, this is a bad + substitution. Also check NAME for validity before trying + to go on. */ + if (string[sindex - 1] != RBRACE || (valid_length_expression (name) == 0)) + { + temp = (char *)NULL; + goto bad_substitution; + } + + number = parameter_brace_expand_length (name); + free (name); + + *indexp = sindex; + return ((number < 0) ? &expand_param_error : itos (number)); + } + + /* ${@} is identical to $@. */ + if (name[0] == '@' && name[1] == '\0') + { + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp) + *quoted_dollar_atp = 1; + + if (contains_dollar_at) + *contains_dollar_at = 1; + } + + /* Process ${!PREFIX*} expansion. */ + if (want_indir && string[sindex - 1] == RBRACE && + (string[sindex - 2] == '*' || string[sindex - 2] == '@') && + legal_variable_starter ((unsigned char) name[1])) + { + char **x; + WORD_LIST *xlist; + + temp1 = savestring (name + 1); + number = strlen (temp1); + temp1[number - 1] = '\0'; + x = all_variables_matching_prefix (temp1); + xlist = strvec_to_word_list (x, 0, 0); + if (string[sindex - 2] == '*') + temp = string_list_dollar_star (xlist); + else + { + temp = string_list_dollar_at (xlist, quoted); + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp) + *quoted_dollar_atp = 1; + if (contains_dollar_at) + *contains_dollar_at = 1; + } + free (x); + free (xlist); + free (temp1); + *indexp = sindex; + return (temp); + } + +#if defined (ARRAY_VARS) + /* Process ${!ARRAY[@]} and ${!ARRAY[*]} expansion. */ /* [ */ + if (want_indir && string[sindex - 1] == RBRACE && + string[sindex - 2] == ']' && valid_array_reference (name+1)) + { + char *x, *x1; + + temp1 = savestring (name + 1); + x = array_variable_name (temp1, &x1, (int *)0); /* [ */ + FREE (x); + if (ALL_ELEMENT_SUB (x1[0]) && x1[1] == ']') + { + temp = array_keys (temp1, quoted); + if (x1[0] == '@') + { + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp) + *quoted_dollar_atp = 1; + if (contains_dollar_at) + *contains_dollar_at = 1; + } + + free (temp1); + *indexp = sindex; + return (temp); + } + + free (temp1); + } +#endif /* ARRAY_VARS */ + + /* Make sure that NAME is valid before trying to go on. */ + if (valid_brace_expansion_word (want_indir ? name + 1 : name, + var_is_special) == 0) + { + temp = (char *)NULL; + goto bad_substitution; + } + + if (want_indir) + temp = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at); + else + temp = parameter_brace_expand_word (name, var_is_special, quoted); + +#if defined (ARRAY_VARS) + if (valid_array_reference (name)) + chk_atstar (name, quoted, quoted_dollar_atp, contains_dollar_at); +#endif + + var_is_set = temp != (char *)0; + var_is_null = check_nullness && (var_is_set == 0 || *temp == 0); + + /* Get the rest of the stuff inside the braces. */ + if (c && c != RBRACE) + { + /* Extract the contents of the ${ ... } expansion + according to the Posix.2 rules. */ + value = extract_dollar_brace_string (string, &sindex, quoted, 0); + if (string[sindex] == RBRACE) + sindex++; + else + goto bad_substitution; + } + else + value = (char *)NULL; + + *indexp = sindex; + + /* If this is a substring spec, process it and add the result. */ + if (want_substring) + { + temp1 = parameter_brace_substring (name, temp, value, quoted); + FREE (name); + FREE (value); + FREE (temp); + return (temp1); + } + else if (want_patsub) + { + temp1 = parameter_brace_patsub (name, temp, value, quoted); + FREE (name); + FREE (value); + FREE (temp); + return (temp1); + } + + /* Do the right thing based on which character ended the variable name. */ + switch (c) + { + default: + case '\0': + bad_substitution: + report_error (_("%s: bad substitution"), string ? string : "??"); + FREE (value); + FREE (temp); + free (name); + return &expand_param_error; + + case RBRACE: + if (var_is_set == 0 && unbound_vars_is_error) + { + err_unboundvar (name); + FREE (value); + FREE (temp); + free (name); + last_command_exit_value = EXECUTION_FAILURE; + return (interactive_shell ? &expand_param_error : &expand_param_fatal); + } + break; + + case '#': /* ${param#[#]pattern} */ + case '%': /* ${param%[%]pattern} */ + if (value == 0 || *value == '\0' || temp == 0 || *temp == '\0') + { + FREE (value); + break; + } + temp1 = parameter_brace_remove_pattern (name, temp, value, c, quoted); + free (temp); + free (value); + temp = temp1; + break; + + case '-': + case '=': + case '?': + case '+': + if (var_is_set && var_is_null == 0) + { + /* If the operator is `+', we don't want the value of the named + variable for anything, just the value of the right hand side. */ + + if (c == '+') + { + /* XXX -- if we're double-quoted and the named variable is "$@", + we want to turn off any special handling of "$@" -- + we're not using it, so whatever is on the rhs applies. */ + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp) + *quoted_dollar_atp = 0; + if (contains_dollar_at) + *contains_dollar_at = 0; + + FREE (temp); + if (value) + { + temp = parameter_brace_expand_rhs (name, value, c, + quoted, + quoted_dollar_atp, + contains_dollar_at); + free (value); + } + else + temp = (char *)NULL; + } + else + { + FREE (value); + } + /* Otherwise do nothing; just use the value in TEMP. */ + } + else /* VAR not set or VAR is NULL. */ + { + FREE (temp); + temp = (char *)NULL; + if (c == '=' && var_is_special) + { + report_error (_("$%s: cannot assign in this way"), name); + free (name); + free (value); + return &expand_param_error; + } + else if (c == '?') + { + parameter_brace_expand_error (name, value); + return (interactive_shell ? &expand_param_error : &expand_param_fatal); + } + else if (c != '+') + { + /* XXX -- if we're double-quoted and the named variable is "$@", + we want to turn off any special handling of "$@" -- + we're not using it, so whatever is on the rhs applies. */ + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp) + *quoted_dollar_atp = 0; + if (contains_dollar_at) + *contains_dollar_at = 0; + + temp = parameter_brace_expand_rhs (name, value, c, quoted, + quoted_dollar_atp, + contains_dollar_at); + } + free (value); + } + + break; + } + free (name); + return (temp); +} + +/* Expand a single ${xxx} expansion. The braces are optional. When + the braces are used, parameter_brace_expand() does the work, + possibly calling param_expand recursively. */ +static char * +param_expand (string, sindex, quoted, expanded_something, + contains_dollar_at, quoted_dollar_at_p, had_quoted_null_p, + pflags) + char *string; + int *sindex, quoted, *expanded_something, *contains_dollar_at; + int *quoted_dollar_at_p, *had_quoted_null_p, pflags; +{ + char *temp, *temp1, uerror[3]; + int zindex, t_index, expok; + unsigned char c; + intmax_t number; + SHELL_VAR *var; + WORD_LIST *list; + + zindex = *sindex; + c = string[++zindex]; + + temp = (char *)NULL; + + /* Do simple cases first. Switch on what follows '$'. */ + switch (c) + { + /* $0 .. $9? */ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + temp1 = dollar_vars[TODIGIT (c)]; + if (unbound_vars_is_error && temp1 == (char *)NULL) + { + uerror[0] = '$'; + uerror[1] = c; + uerror[2] = '\0'; + err_unboundvar (uerror); + last_command_exit_value = EXECUTION_FAILURE; + return (interactive_shell ? &expand_param_error : &expand_param_fatal); + } +#if 1 + if (temp1) + temp = (*temp1 && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))) + ? quote_string (temp1) + : quote_escapes (temp1); + else + temp = (char *)NULL; +#else + temp = temp1 ? quote_escapes (temp1) : (char *)NULL; +#endif + break; + + /* $$ -- pid of the invoking shell. */ + case '$': + temp = itos (dollar_dollar_pid); + break; + + /* $# -- number of positional parameters. */ + case '#': + temp = itos (number_of_args ()); + break; + + /* $? -- return value of the last synchronous command. */ + case '?': + temp = itos (last_command_exit_value); + break; + + /* $- -- flags supplied to the shell on invocation or by `set'. */ + case '-': + temp = which_set_flags (); + break; + + /* $! -- Pid of the last asynchronous command. */ + case '!': + /* If no asynchronous pids have been created, expand to nothing. + If `set -u' has been executed, and no async processes have + been created, this is an expansion error. */ + if (last_asynchronous_pid == NO_PID) + { + if (expanded_something) + *expanded_something = 0; + temp = (char *)NULL; + if (unbound_vars_is_error) + { + uerror[0] = '$'; + uerror[1] = c; + uerror[2] = '\0'; + err_unboundvar (uerror); + last_command_exit_value = EXECUTION_FAILURE; + return (interactive_shell ? &expand_param_error : &expand_param_fatal); + } + } + else + temp = itos (last_asynchronous_pid); + break; + + /* The only difference between this and $@ is when the arg is quoted. */ + case '*': /* `$*' */ + list = list_rest_of_args (); + + /* If there are no command-line arguments, this should just + disappear if there are other characters in the expansion, + even if it's quoted. */ + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && list == 0) + temp = (char *)NULL; + else if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) + { + /* If we have "$*" we want to make a string of the positional + parameters, separated by the first character of $IFS, and + quote the whole string, including the separators. If IFS + is unset, the parameters are separated by ' '; if $IFS is + null, the parameters are concatenated. */ +#if 0 + temp = string_list_dollar_star (list); +#else + temp = (quoted & Q_DOUBLE_QUOTES) ? string_list_dollar_star (list) : string_list (list); +#endif + temp1 = quote_string (temp); + free (temp); + temp = temp1; + } + else + { + /* If the $* is not quoted it is identical to $@ */ + temp = string_list_dollar_at (list, quoted); + if (expand_no_split_dollar_star == 0 && contains_dollar_at) + *contains_dollar_at = 1; + } + + dispose_words (list); + break; + + /* When we have "$@" what we want is "$1" "$2" "$3" ... This + means that we have to turn quoting off after we split into + the individually quoted arguments so that the final split + on the first character of $IFS is still done. */ + case '@': /* `$@' */ + list = list_rest_of_args (); + + /* We want to flag the fact that we saw this. We can't turn + off quoting entirely, because other characters in the + string might need it (consider "\"$@\""), but we need some + way to signal that the final split on the first character + of $IFS should be done, even though QUOTED is 1. */ + if (quoted_dollar_at_p && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))) + *quoted_dollar_at_p = 1; + if (contains_dollar_at) + *contains_dollar_at = 1; + + /* We want to separate the positional parameters with the first + character of $IFS in case $IFS is something other than a space. + We also want to make sure that splitting is done no matter what -- + according to POSIX.2, this expands to a list of the positional + parameters no matter what IFS is set to. */ + temp = string_list_dollar_at (list, quoted); + + dispose_words (list); + break; + + case LBRACE: + temp = parameter_brace_expand (string, &zindex, quoted, + quoted_dollar_at_p, + contains_dollar_at); + if (temp == &expand_param_error || temp == &expand_param_fatal) + return (temp); + + /* XXX */ + /* Quoted nulls should be removed if there is anything else + in the string. */ + /* Note that we saw the quoted null so we can add one back at + the end of this function if there are no other characters + in the string, discard TEMP, and go on. The exception to + this is when we have "${@}" and $1 is '', since $@ needs + special handling. */ + if (temp && QUOTED_NULL (temp)) + { + if (had_quoted_null_p) + *had_quoted_null_p = 1; + if (*quoted_dollar_at_p == 0) + { + free (temp); + temp = (char *)NULL; + } + + } + + goto return0; + + /* Do command or arithmetic substitution. */ + case LPAREN: + /* We have to extract the contents of this paren substitution. */ + t_index = zindex + 1; + temp = extract_command_subst (string, &t_index); + zindex = t_index; + + /* For Posix.2-style `$(( ))' arithmetic substitution, + extract the expression and pass it to the evaluator. */ + if (temp && *temp == LPAREN) + { + char *temp2; + temp1 = temp + 1; + temp2 = savestring (temp1); + t_index = strlen (temp2) - 1; + + if (temp2[t_index] != RPAREN) + { + free (temp2); + goto comsub; + } + + /* Cut off ending `)' */ + temp2[t_index] = '\0'; + + /* Expand variables found inside the expression. */ + temp1 = expand_string_if_necessary (temp2, Q_DOUBLE_QUOTES, expand_string); + free (temp2); + +arithsub: + /* No error messages. */ + this_command_name = (char *)NULL; + number = evalexp (temp1, &expok); + free (temp); + free (temp1); + if (expok == 0) + { + if (interactive_shell == 0 && posixly_correct) + { + last_command_exit_value = EXECUTION_FAILURE; + return (&expand_param_fatal); + } + else + return (&expand_param_error); + } + temp = itos (number); + break; + } + +comsub: + if (pflags & PF_NOCOMSUB) + /* we need zindex+1 because string[zindex] == RPAREN */ + temp1 = substring (string, *sindex, zindex+1); + else + temp1 = command_substitute (temp, quoted); + FREE (temp); + temp = temp1; + break; + + /* Do POSIX.2d9-style arithmetic substitution. This will probably go + away in a future bash release. */ + case '[': + /* Extract the contents of this arithmetic substitution. */ + t_index = zindex + 1; + temp = extract_arithmetic_subst (string, &t_index); + zindex = t_index; + + /* Do initial variable expansion. */ + temp1 = expand_string_if_necessary (temp, Q_DOUBLE_QUOTES, expand_string); + + goto arithsub; + + default: + /* Find the variable in VARIABLE_LIST. */ + temp = (char *)NULL; + + for (t_index = zindex; (c = string[zindex]) && legal_variable_char (c); zindex++) + ; + temp1 = (zindex > t_index) ? substring (string, t_index, zindex) : (char *)NULL; + + /* If this isn't a variable name, then just output the `$'. */ + if (temp1 == 0 || *temp1 == '\0') + { + FREE (temp1); + temp = (char *)xmalloc (2); + temp[0] = '$'; + temp[1] = '\0'; + if (expanded_something) + *expanded_something = 0; + goto return0; + } + + /* If the variable exists, return its value cell. */ + var = find_variable (temp1); + + if (var && invisible_p (var) == 0 && var_isset (var)) + { +#if defined (ARRAY_VARS) + if (array_p (var)) + { + temp = array_reference (array_cell (var), 0); + if (temp) + temp = (*temp && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))) + ? quote_string (temp) + : quote_escapes (temp); + else if (unbound_vars_is_error) + goto unbound_variable; + } + else +#endif + { + temp = value_cell (var); + + temp = (*temp && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))) + ? quote_string (temp) + : quote_escapes (temp); + } + + free (temp1); + + goto return0; + } + + temp = (char *)NULL; + +unbound_variable: + if (unbound_vars_is_error) + err_unboundvar (temp1); + else + { + free (temp1); + goto return0; + } + + free (temp1); + last_command_exit_value = EXECUTION_FAILURE; + return ((unbound_vars_is_error && interactive_shell == 0) + ? &expand_param_fatal + : &expand_param_error); + } + + if (string[zindex]) + zindex++; + +return0: + *sindex = zindex; + return (temp); +} + +/* Make a word list which is the result of parameter and variable + expansion, command substitution, arithmetic substitution, and + quote removal of WORD. Return a pointer to a WORD_LIST which is + the result of the expansion. If WORD contains a null word, the + word list returned is also null. + + QUOTED contains flag values defined in shell.h. + + ISEXP is used to tell expand_word_internal that the word should be + treated as the result of an expansion. This has implications for + how IFS characters in the word are treated. + + CONTAINS_DOLLAR_AT and EXPANDED_SOMETHING are return values; when non-null + they point to an integer value which receives information about expansion. + CONTAINS_DOLLAR_AT gets non-zero if WORD contained "$@", else zero. + EXPANDED_SOMETHING get non-zero if WORD contained any parameter expansions, + else zero. + + This only does word splitting in the case of $@ expansion. In that + case, we split on ' '. */ + +/* Values for the local variable quoted_state. */ +#define UNQUOTED 0 +#define PARTIALLY_QUOTED 1 +#define WHOLLY_QUOTED 2 + +static WORD_LIST * +expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_something) + WORD_DESC *word; + int quoted, isexp; + int *contains_dollar_at; + int *expanded_something; +{ + WORD_LIST *list; + WORD_DESC *tword; + + /* The intermediate string that we build while expanding. */ + char *istring; + + /* The current size of the above object. */ + int istring_size; + + /* Index into ISTRING. */ + int istring_index; + + /* Temporary string storage. */ + char *temp, *temp1; + + /* The text of WORD. */ + register char *string; + + /* The size of STRING. */ + size_t string_size; + + /* The index into STRING. */ + int sindex; + + /* This gets 1 if we see a $@ while quoted. */ + int quoted_dollar_at; + + /* One of UNQUOTED, PARTIALLY_QUOTED, or WHOLLY_QUOTED, depending on + whether WORD contains no quoting characters, a partially quoted + string (e.g., "xx"ab), or is fully quoted (e.g., "xxab"). */ + int quoted_state; + + /* State flags */ + int had_quoted_null; + int has_dollar_at; + int tflag; + + int assignoff; /* If assignment, offset of `=' */ + + register unsigned char c; /* Current character. */ + int t_index; /* For calls to string_extract_xxx. */ + + char twochars[2]; + + DECLARE_MBSTATE; + + istring = (char *)xmalloc (istring_size = DEFAULT_INITIAL_ARRAY_SIZE); + istring[istring_index = 0] = '\0'; + quoted_dollar_at = had_quoted_null = has_dollar_at = 0; + quoted_state = UNQUOTED; + + string = word->word; + if (string == 0) + goto finished_with_string; + string_size = strlen (string); + + if (contains_dollar_at) + *contains_dollar_at = 0; + + assignoff = -1; + + /* Begin the expansion. */ + + for (sindex = 0; ;) + { + c = string[sindex]; + + /* Case on toplevel character. */ + switch (c) + { + case '\0': + goto finished_with_string; + + case CTLESC: + sindex++; +#if HANDLE_MULTIBYTE + if (MB_CUR_MAX > 1 && string[sindex]) + { + SADD_MBQCHAR_BODY(temp, string, sindex, string_size); + } + else +#endif + { + temp = (char *)xmalloc (3); + temp[0] = CTLESC; + temp[1] = c = string[sindex]; + temp[2] = '\0'; + } + +dollar_add_string: + if (string[sindex]) + sindex++; + +add_string: + if (temp) + { + istring = sub_append_string (temp, istring, &istring_index, &istring_size); + temp = (char *)0; + } + + break; + +#if defined (PROCESS_SUBSTITUTION) + /* Process substitution. */ + case '<': + case '>': + { + if (string[++sindex] != LPAREN || (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || posixly_correct) + { + sindex--; /* add_character: label increments sindex */ + goto add_character; + } + else + t_index = sindex + 1; /* skip past both '<' and LPAREN */ + + temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index); /*))*/ + sindex = t_index; + + /* If the process substitution specification is `<()', we want to + open the pipe for writing in the child and produce output; if + it is `>()', we want to open the pipe for reading in the child + and consume input. */ + temp = temp1 ? process_substitute (temp1, (c == '>')) : (char *)0; + + FREE (temp1); + + goto dollar_add_string; + } +#endif /* PROCESS_SUBSTITUTION */ + + case '=': + if (word->flags & (W_ASSIGNRHS|W_NOTILDE)) + goto add_character; + if ((word->flags & W_ASSIGNMENT) && assignoff == -1 && sindex > 0) + assignoff = sindex; + if (sindex == assignoff && string[sindex+1] == '~') /* XXX */ + word->flags |= W_ITILDE; + else if ((word->flags & W_ASSIGNMENT) && + (posixly_correct == 0 || (word->flags & W_TILDEEXP)) && + string[sindex+1] == '~') + word->flags |= W_ITILDE; + goto add_character; + + case ':': + if (word->flags & W_NOTILDE) + goto add_character; + if ((word->flags & (W_ASSIGNMENT|W_ASSIGNRHS)) && + (posixly_correct == 0 || (word->flags & W_TILDEEXP)) && + string[sindex+1] == '~') + word->flags |= W_ITILDE; + goto add_character; + + case '~': + /* If the word isn't supposed to be tilde expanded, or we're not + at the start of a word or after an unquoted : or = in an + assignment statement, we don't do tilde expansion. */ + if ((word->flags & W_NOTILDE) || + (sindex > 0 && ((word->flags & W_ITILDE) == 0)) || + (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) + { + word->flags &= ~W_ITILDE; + goto add_character; + } + temp = tilde_find_word (string + sindex, 1, &t_index); + if (temp && *temp && unquoted_tilde_word (temp) == 0) + { + FREE (temp); + temp = 0; + } + + if (word->flags & W_ASSIGNRHS) + tflag = 2; + else if ((word->flags & W_ASSIGNMENT) && + (posixly_correct == 0 || (word->flags & W_TILDEEXP))) + tflag = 1; + else + tflag = 0; + + word->flags &= ~W_ITILDE; + + if (temp && *temp && t_index > 0) + { + temp1 = bash_tilde_expand (temp, tflag); + free (temp); + temp = temp1; + sindex += t_index; + goto add_string; + } + else + { + FREE (temp); + goto add_character; + } + + case '$': + if (expanded_something) + *expanded_something = 1; + + has_dollar_at = 0; + temp = param_expand (string, &sindex, quoted, expanded_something, + &has_dollar_at, "ed_dollar_at, + &had_quoted_null, + (word->flags & W_NOCOMSUB) ? PF_NOCOMSUB : 0); + + if (temp == &expand_param_error || temp == &expand_param_fatal) + { + free (string); + free (istring); + return ((temp == &expand_param_error) ? &expand_word_error + : &expand_word_fatal); + } + if (contains_dollar_at && has_dollar_at) + *contains_dollar_at = 1; + goto add_string; + break; + + case '`': /* Backquoted command substitution. */ + { + t_index = sindex++; + + if (expanded_something) + *expanded_something = 1; + + temp = string_extract (string, &sindex, "`", 0); + if (word->flags & W_NOCOMSUB) + /* sindex + 1 because string[sindex] == '`' */ + temp1 = substring (string, t_index, sindex + 1); + else + { + de_backslash (temp); + temp1 = command_substitute (temp, quoted); + } + FREE (temp); + temp = temp1; + goto dollar_add_string; + } + + case '\\': + if (string[sindex + 1] == '\n') + { + sindex += 2; + continue; + } + + c = string[++sindex]; + + if (quoted & Q_HERE_DOCUMENT) + tflag = CBSHDOC; + else if (quoted & Q_DOUBLE_QUOTES) + tflag = CBSDQUOTE; + else + tflag = 0; + + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && ((sh_syntaxtab[c] & tflag) == 0)) + { + SCOPY_CHAR_I (twochars, '\\', c, string, sindex, string_size); + } + else if (c == 0) + { + c = CTLNUL; + sindex--; /* add_character: label increments sindex */ + goto add_character; + } + else + { + SCOPY_CHAR_I (twochars, CTLESC, c, string, sindex, string_size); + } + + sindex++; +add_twochars: + /* BEFORE jumping here, we need to increment sindex if appropriate */ + RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size, + DEFAULT_ARRAY_SIZE); + istring[istring_index++] = twochars[0]; + istring[istring_index++] = twochars[1]; + istring[istring_index] = '\0'; + + break; + + case '"': +#if 0 + if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT|Q_PATQUOTE)) +#else + if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) +#endif + goto add_character; + + t_index = ++sindex; + temp = string_extract_double_quoted (string, &sindex, 0); + + /* If the quotes surrounded the entire string, then the + whole word was quoted. */ + quoted_state = (t_index == 1 && string[sindex] == '\0') + ? WHOLLY_QUOTED + : PARTIALLY_QUOTED; + + if (temp && *temp) + { + tword = make_word (temp); /* XXX */ + free (temp); + temp = (char *)NULL; + + has_dollar_at = 0; + list = expand_word_internal (tword, Q_DOUBLE_QUOTES, 0, &has_dollar_at, (int *)NULL); + + if (list == &expand_word_error || list == &expand_word_fatal) + { + free (istring); + free (string); + /* expand_word_internal has already freed temp_word->word + for us because of the way it prints error messages. */ + tword->word = (char *)NULL; + dispose_word (tword); + return list; + } + + dispose_word (tword); + + /* "$@" (a double-quoted dollar-at) expands into nothing, + not even a NULL word, when there are no positional + parameters. */ + if (list == 0 && has_dollar_at) + { + quoted_dollar_at++; + break; + } + + /* If we get "$@", we know we have expanded something, so we + need to remember it for the final split on $IFS. This is + a special case; it's the only case where a quoted string + can expand into more than one word. It's going to come back + from the above call to expand_word_internal as a list with + a single word, in which all characters are quoted and + separated by blanks. What we want to do is to turn it back + into a list for the next piece of code. */ + if (list) + dequote_list (list); + + if (has_dollar_at) + { + quoted_dollar_at++; + if (contains_dollar_at) + *contains_dollar_at = 1; + if (expanded_something) + *expanded_something = 1; + } + } + else + { + /* What we have is "". This is a minor optimization. */ + FREE (temp); + list = (WORD_LIST *)NULL; + } + + /* The code above *might* return a list (consider the case of "$@", + where it returns "$1", "$2", etc.). We can't throw away the + rest of the list, and we have to make sure each word gets added + as quoted. We test on tresult->next: if it is non-NULL, we + quote the whole list, save it to a string with string_list, and + add that string. We don't need to quote the results of this + (and it would be wrong, since that would quote the separators + as well), so we go directly to add_string. */ + if (list) + { + if (list->next) + { + /* Testing quoted_dollar_at makes sure that "$@" is + split correctly when $IFS does not contain a space. */ + temp = quoted_dollar_at + ? string_list_dollar_at (list, Q_DOUBLE_QUOTES) + : string_list (quote_list (list)); + dispose_words (list); + goto add_string; + } + else + { + temp = savestring (list->word->word); + dispose_words (list); +#if 1 + /* If the string is not a quoted null string, we want + to remove any embedded unquoted CTLNUL characters. + We do not want to turn quoted null strings back into + the empty string, though. We do this because we + want to remove any quoted nulls from expansions that + contain other characters. For example, if we have + x"$*"y or "x$*y" and there are no positional parameters, + the $* should expand into nothing. */ + /* HOWEVER, this fails if the string contains a literal + CTLNUL or CTLNUL is contained in the (non-null) expansion + of some variable. I'm not sure what to do about this + yet. There has to be some way to indicate the difference + between the two. An auxiliary data structure might be + necessary. */ + if (QUOTED_NULL (temp) == 0) + remove_quoted_nulls (temp); /* XXX */ +#endif + } + } + else + temp = (char *)NULL; + + /* We do not want to add quoted nulls to strings that are only + partially quoted; we can throw them away. */ + if (temp == 0 && quoted_state == PARTIALLY_QUOTED) + continue; + + add_quoted_string: + + if (temp) + { + temp1 = temp; + temp = quote_string (temp); + free (temp1); + goto add_string; + } + else + { + /* Add NULL arg. */ + c = CTLNUL; + sindex--; /* add_character: label increments sindex */ + goto add_character; + } + + /* break; */ + + case '\'': +#if 0 + if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT|Q_PATQUOTE)) +#else + if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) +#endif + goto add_character; + + t_index = ++sindex; + temp = string_extract_single_quoted (string, &sindex); + + /* If the entire STRING was surrounded by single quotes, + then the string is wholly quoted. */ + quoted_state = (t_index == 1 && string[sindex] == '\0') + ? WHOLLY_QUOTED + : PARTIALLY_QUOTED; + + /* If all we had was '', it is a null expansion. */ + if (*temp == '\0') + { + free (temp); + temp = (char *)NULL; + } + else + remove_quoted_escapes (temp); /* ??? */ + + /* We do not want to add quoted nulls to strings that are only + partially quoted; such nulls are discarded. */ + if (temp == 0 && (quoted_state == PARTIALLY_QUOTED)) + continue; + + /* If we have a quoted null expansion, add a quoted NULL to istring. */ + if (temp == 0) + { + c = CTLNUL; + sindex--; /* add_character: label increments sindex */ + goto add_character; + } + else + goto add_quoted_string; + + /* break; */ + + default: + /* This is the fix for " $@ " */ + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (isexp == 0 && isifs (c))) + { + if (string[sindex]) /* from old goto dollar_add_string */ + sindex++; + if (c == 0) + { + c = CTLNUL; + goto add_character; + } + else + { +#if HANDLE_MULTIBYTE + if (MB_CUR_MAX > 1) + sindex--; + + if (MB_CUR_MAX > 1) + { + SADD_MBQCHAR_BODY(temp, string, sindex, string_size); + } + else +#endif + { + twochars[0] = CTLESC; + twochars[1] = c; + goto add_twochars; + } + } + } + + SADD_MBCHAR (temp, string, sindex, string_size); + + add_character: + RESIZE_MALLOCED_BUFFER (istring, istring_index, 1, istring_size, + DEFAULT_ARRAY_SIZE); + istring[istring_index++] = c; + istring[istring_index] = '\0'; + + /* Next character. */ + sindex++; + } + } + +finished_with_string: + /* OK, we're ready to return. If we have a quoted string, and + quoted_dollar_at is not set, we do no splitting at all; otherwise + we split on ' '. The routines that call this will handle what to + do if nothing has been expanded. */ + + /* Partially and wholly quoted strings which expand to the empty + string are retained as an empty arguments. Unquoted strings + which expand to the empty string are discarded. The single + exception is the case of expanding "$@" when there are no + positional parameters. In that case, we discard the expansion. */ + + /* Because of how the code that handles "" and '' in partially + quoted strings works, we need to make ISTRING into a QUOTED_NULL + if we saw quoting characters, but the expansion was empty. + "" and '' are tossed away before we get to this point when + processing partially quoted strings. This makes "" and $xxx"" + equivalent when xxx is unset. We also look to see whether we + saw a quoted null from a ${} expansion and add one back if we + need to. */ + + /* If we expand to nothing and there were no single or double quotes + in the word, we throw it away. Otherwise, we return a NULL word. + The single exception is for $@ surrounded by double quotes when + there are no positional parameters. In that case, we also throw + the word away. */ + + if (*istring == '\0') + { + if (quoted_dollar_at == 0 && (had_quoted_null || quoted_state == PARTIALLY_QUOTED)) + { + istring[0] = CTLNUL; + istring[1] = '\0'; + tword = make_bare_word (istring); + list = make_word_list (tword, (WORD_LIST *)NULL); + if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) + tword->flags |= W_QUOTED; + } + /* According to sh, ksh, and Posix.2, if a word expands into nothing + and a double-quoted "$@" appears anywhere in it, then the entire + word is removed. */ + else if (quoted_state == UNQUOTED || quoted_dollar_at) + list = (WORD_LIST *)NULL; +#if 0 + else + { + tword = make_bare_word (istring); + list = make_word_list (tword, (WORD_LIST *)NULL); + if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) + tword->flags |= W_QUOTED; + } +#else + else + list = (WORD_LIST *)NULL; +#endif + } + else if (word->flags & W_NOSPLIT) + { + tword = make_bare_word (istring); + list = make_word_list (tword, (WORD_LIST *)NULL); + if (word->flags & W_ASSIGNMENT) + tword->flags |= W_ASSIGNMENT; /* XXX */ + if (word->flags & W_NOGLOB) + tword->flags |= W_NOGLOB; /* XXX */ + if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) + tword->flags |= W_QUOTED; + } + else + { + char *ifs_chars; + + ifs_chars = (quoted_dollar_at || has_dollar_at) ? ifs_value : (char *)NULL; + + /* If we have $@, we need to split the results no matter what. If + IFS is unset or NULL, string_list_dollar_at has separated the + positional parameters with a space, so we split on space (we have + set ifs_chars to " \t\n" above if ifs is unset). If IFS is set, + string_list_dollar_at has separated the positional parameters + with the first character of $IFS, so we split on $IFS. */ + if (has_dollar_at && ifs_chars) + list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1); + else + { + tword = make_bare_word (istring); + list = make_word_list (tword, (WORD_LIST *)NULL); + if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (quoted_state == WHOLLY_QUOTED)) + tword->flags |= W_QUOTED; + if (word->flags & W_ASSIGNMENT) + tword->flags |= W_ASSIGNMENT; + if (word->flags & W_NOGLOB) + tword->flags |= W_NOGLOB; + } + } + + free (istring); + return (list); +} + +/* **************************************************************** */ +/* */ +/* Functions for Quote Removal */ +/* */ +/* **************************************************************** */ + +/* Perform quote removal on STRING. If QUOTED > 0, assume we are obeying the + backslash quoting rules for within double quotes or a here document. */ +char * +string_quote_removal (string, quoted) + char *string; + int quoted; +{ + size_t slen; + char *r, *result_string, *temp, *send; + int sindex, tindex, dquote; + unsigned char c; + DECLARE_MBSTATE; + + /* The result can be no longer than the original string. */ + slen = strlen (string); + send = string + slen; + + r = result_string = (char *)xmalloc (slen + 1); + + for (dquote = sindex = 0; c = string[sindex];) + { + switch (c) + { + case '\\': + c = string[++sindex]; + if (((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || dquote) && (sh_syntaxtab[c] & CBSDQUOTE) == 0) + *r++ = '\\'; + /* FALLTHROUGH */ + + default: + SCOPY_CHAR_M (r, string, send, sindex); + break; + + case '\'': + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || dquote) + { + *r++ = c; + sindex++; + break; + } + tindex = sindex + 1; + temp = string_extract_single_quoted (string, &tindex); + if (temp) + { + strcpy (r, temp); + r += strlen (r); + free (temp); + } + sindex = tindex; + break; + + case '"': + dquote = 1 - dquote; + sindex++; + break; + } + } + *r = '\0'; + return (result_string); +} + +#if 0 +/* UNUSED */ +/* Perform quote removal on word WORD. This allocates and returns a new + WORD_DESC *. */ +WORD_DESC * +word_quote_removal (word, quoted) + WORD_DESC *word; + int quoted; +{ + WORD_DESC *w; + char *t; + + t = string_quote_removal (word->word, quoted); + w = make_bare_word (t); + free (t); + return (w); +} + +/* Perform quote removal on all words in LIST. If QUOTED is non-zero, + the members of the list are treated as if they are surrounded by + double quotes. Return a new list, or NULL if LIST is NULL. */ +WORD_LIST * +word_list_quote_removal (list, quoted) + WORD_LIST *list; + int quoted; +{ + WORD_LIST *result, *t, *tresult; + + for (t = list, result = (WORD_LIST *)NULL; t; t = t->next) + { + tresult = make_word_list (word_quote_removal (t->word, quoted), (WORD_LIST *)NULL); + result = (WORD_LIST *) list_append (result, tresult); + } + return (result); +} +#endif + +/******************************************* + * * + * Functions to perform word splitting * + * * + *******************************************/ + +void +setifs (v) + SHELL_VAR *v; +{ + char *t; + unsigned char uc; + + ifs_var = v; + ifs_value = v ? value_cell (v) : " \t\n"; + + /* Should really merge ifs_cmap with sh_syntaxtab. XXX - doesn't yet + handle multibyte chars in IFS */ + memset (ifs_cmap, '\0', sizeof (ifs_cmap)); + for (t = ifs_value ; t && *t; t++) + { + uc = *t; + ifs_cmap[uc] = 1; + } + +#if defined (HANDLE_MULTIBYTE) + if (ifs_value == 0) + { + ifs_firstc[0] = '\0'; + ifs_firstc_len = 1; + } + else + { + size_t ifs_len; + ifs_len = strnlen (ifs_value, MB_CUR_MAX); + ifs_firstc_len = MBLEN (ifs_value, ifs_len); + if (ifs_firstc_len == 1 || ifs_firstc_len == 0 || MB_INVALIDCH (ifs_firstc_len)) + { + ifs_firstc[0] = ifs_value[0]; + ifs_firstc[1] = '\0'; + ifs_firstc_len = 1; + } + else + memcpy (ifs_firstc, ifs_value, ifs_firstc_len); + } +#else + ifs_firstc = ifs_value ? *ifs_value : 0; +#endif +} + +char * +getifs () +{ + return ifs_value; +} + +/* This splits a single word into a WORD LIST on $IFS, but only if the word + is not quoted. list_string () performs quote removal for us, even if we + don't do any splitting. */ +WORD_LIST * +word_split (w, ifs_chars) + WORD_DESC *w; + char *ifs_chars; +{ + WORD_LIST *result; + + if (w) + { + char *xifs; + + xifs = ((w->flags & W_QUOTED) || ifs_chars == 0) ? "" : ifs_chars; + result = list_string (w->word, xifs, w->flags & W_QUOTED); + } + else + result = (WORD_LIST *)NULL; + + return (result); +} + +/* Perform word splitting on LIST and return the RESULT. It is possible + to return (WORD_LIST *)NULL. */ +static WORD_LIST * +word_list_split (list) + WORD_LIST *list; +{ + WORD_LIST *result, *t, *tresult, *e; + + for (t = list, result = (WORD_LIST *)NULL; t; t = t->next) + { + tresult = word_split (t->word, ifs_value); +#if 0 + result = (WORD_LIST *) list_append (result, tresult); +#else + if (result == 0) + result = e = tresult; + else + { + e->next = tresult; + while (e->next) + e = e->next; + } +#endif + } + return (result); +} + +/************************************************** + * * + * Functions to expand an entire WORD_LIST * + * * + **************************************************/ + +/* Do any word-expansion-specific cleanup and jump to top_level */ +static void +exp_jump_to_top_level (v) + int v; +{ + /* Cleanup code goes here. */ + expand_no_split_dollar_star = 0; /* XXX */ + expanding_redir = 0; + + jump_to_top_level (v); +} + +/* Put NLIST (which is a WORD_LIST * of only one element) at the front of + ELIST, and set ELIST to the new list. */ +#define PREPEND_LIST(nlist, elist) \ + do { nlist->next = elist; elist = nlist; } while (0) + +/* Separate out any initial variable assignments from TLIST. If set -k has + been executed, remove all assignment statements from TLIST. Initial + variable assignments and other environment assignments are placed + on SUBST_ASSIGN_VARLIST. */ +static WORD_LIST * +separate_out_assignments (tlist) + WORD_LIST *tlist; +{ + register WORD_LIST *vp, *lp; + + if (!tlist) + return ((WORD_LIST *)NULL); + + if (subst_assign_varlist) + dispose_words (subst_assign_varlist); /* Clean up after previous error */ + + subst_assign_varlist = (WORD_LIST *)NULL; + vp = lp = tlist; + + /* Separate out variable assignments at the start of the command. + Loop invariant: vp->next == lp + Loop postcondition: + lp = list of words left after assignment statements skipped + tlist = original list of words + */ + while (lp && (lp->word->flags & W_ASSIGNMENT)) + { + vp = lp; + lp = lp->next; + } + + /* If lp != tlist, we have some initial assignment statements. + We make SUBST_ASSIGN_VARLIST point to the list of assignment + words and TLIST point to the remaining words. */ + if (lp != tlist) + { + subst_assign_varlist = tlist; + /* ASSERT(vp->next == lp); */ + vp->next = (WORD_LIST *)NULL; /* terminate variable list */ + tlist = lp; /* remainder of word list */ + } + + /* vp == end of variable list */ + /* tlist == remainder of original word list without variable assignments */ + if (!tlist) + /* All the words in tlist were assignment statements */ + return ((WORD_LIST *)NULL); + + /* ASSERT(tlist != NULL); */ + /* ASSERT((tlist->word->flags & W_ASSIGNMENT) == 0); */ + + /* If the -k option is in effect, we need to go through the remaining + words, separate out the assignment words, and place them on + SUBST_ASSIGN_VARLIST. */ + if (place_keywords_in_env) + { + WORD_LIST *tp; /* tp == running pointer into tlist */ + + tp = tlist; + lp = tlist->next; + + /* Loop Invariant: tp->next == lp */ + /* Loop postcondition: tlist == word list without assignment statements */ + while (lp) + { + if (lp->word->flags & W_ASSIGNMENT) + { + /* Found an assignment statement, add this word to end of + subst_assign_varlist (vp). */ + if (!subst_assign_varlist) + subst_assign_varlist = vp = lp; + else + { + vp->next = lp; + vp = lp; + } + + /* Remove the word pointed to by LP from TLIST. */ + tp->next = lp->next; + /* ASSERT(vp == lp); */ + lp->next = (WORD_LIST *)NULL; + lp = tp->next; + } + else + { + tp = lp; + lp = lp->next; + } + } + } + return (tlist); +} + +#define WEXP_VARASSIGN 0x001 +#define WEXP_BRACEEXP 0x002 +#define WEXP_TILDEEXP 0x004 +#define WEXP_PARAMEXP 0x008 +#define WEXP_PATHEXP 0x010 + +/* All of the expansions, including variable assignments at the start of + the list. */ +#define WEXP_ALL (WEXP_VARASSIGN|WEXP_BRACEEXP|WEXP_TILDEEXP|WEXP_PARAMEXP|WEXP_PATHEXP) + +/* All of the expansions except variable assignments at the start of + the list. */ +#define WEXP_NOVARS (WEXP_BRACEEXP|WEXP_TILDEEXP|WEXP_PARAMEXP|WEXP_PATHEXP) + +/* All of the `shell expansions': brace expansion, tilde expansion, parameter + expansion, command substitution, arithmetic expansion, word splitting, and + quote removal. */ +#define WEXP_SHELLEXP (WEXP_BRACEEXP|WEXP_TILDEEXP|WEXP_PARAMEXP) + +/* Take the list of words in LIST and do the various substitutions. Return + a new list of words which is the expanded list, and without things like + variable assignments. */ + +WORD_LIST * +expand_words (list) + WORD_LIST *list; +{ + return (expand_word_list_internal (list, WEXP_ALL)); +} + +/* Same as expand_words (), but doesn't hack variable or environment + variables. */ +WORD_LIST * +expand_words_no_vars (list) + WORD_LIST *list; +{ + return (expand_word_list_internal (list, WEXP_NOVARS)); +} + +WORD_LIST * +expand_words_shellexp (list) + WORD_LIST *list; +{ + return (expand_word_list_internal (list, WEXP_SHELLEXP)); +} + +static WORD_LIST * +glob_expand_word_list (tlist, eflags) + WORD_LIST *tlist; + int eflags; +{ + char **glob_array, *temp_string; + register int glob_index; + WORD_LIST *glob_list, *output_list, *disposables, *next; + WORD_DESC *tword; + + output_list = disposables = (WORD_LIST *)NULL; + glob_array = (char **)NULL; + while (tlist) + { + /* For each word, either globbing is attempted or the word is + added to orig_list. If globbing succeeds, the results are + added to orig_list and the word (tlist) is added to the list + of disposable words. If globbing fails and failed glob + expansions are left unchanged (the shell default), the + original word is added to orig_list. If globbing fails and + failed glob expansions are removed, the original word is + added to the list of disposable words. orig_list ends up + in reverse order and requires a call to REVERSE_LIST to + be set right. After all words are examined, the disposable + words are freed. */ + next = tlist->next; + + /* If the word isn't an assignment and contains an unquoted + pattern matching character, then glob it. */ + if ((tlist->word->flags & W_NOGLOB) == 0 && + unquoted_glob_pattern_p (tlist->word->word)) + { + glob_array = shell_glob_filename (tlist->word->word); + + /* Handle error cases. + I don't think we should report errors like "No such file + or directory". However, I would like to report errors + like "Read failed". */ + + if (glob_array == 0 || GLOB_FAILED (glob_array)) + { + glob_array = (char **)xmalloc (sizeof (char *)); + glob_array[0] = (char *)NULL; + } + + /* Dequote the current word in case we have to use it. */ + if (glob_array[0] == NULL) + { + temp_string = dequote_string (tlist->word->word); + free (tlist->word->word); + tlist->word->word = temp_string; + } + + /* Make the array into a word list. */ + glob_list = (WORD_LIST *)NULL; + for (glob_index = 0; glob_array[glob_index]; glob_index++) + { + tword = make_bare_word (glob_array[glob_index]); + tword->flags |= W_GLOBEXP; /* XXX */ + glob_list = make_word_list (tword, glob_list); + } + + if (glob_list) + { + output_list = (WORD_LIST *)list_append (glob_list, output_list); + PREPEND_LIST (tlist, disposables); + } + else if (fail_glob_expansion != 0) + { + report_error (_("no match: %s"), tlist->word->word); + jump_to_top_level (DISCARD); + } + else if (allow_null_glob_expansion == 0) + { + /* Failed glob expressions are left unchanged. */ + PREPEND_LIST (tlist, output_list); + } + else + { + /* Failed glob expressions are removed. */ + PREPEND_LIST (tlist, disposables); + } + } + else + { + /* Dequote the string. */ + temp_string = dequote_string (tlist->word->word); + free (tlist->word->word); + tlist->word->word = temp_string; + PREPEND_LIST (tlist, output_list); + } + + strvec_dispose (glob_array); + glob_array = (char **)NULL; + + tlist = next; + } + + if (disposables) + dispose_words (disposables); + + if (output_list) + output_list = REVERSE_LIST (output_list, WORD_LIST *); + + return (output_list); +} + +#if defined (BRACE_EXPANSION) +static WORD_LIST * +brace_expand_word_list (tlist, eflags) + WORD_LIST *tlist; + int eflags; +{ + register char **expansions; + char *temp_string; + WORD_LIST *disposables, *output_list, *next; + WORD_DESC *w; + int eindex; + + for (disposables = output_list = (WORD_LIST *)NULL; tlist; tlist = next) + { + next = tlist->next; + + /* Only do brace expansion if the word has a brace character. If + not, just add the word list element to BRACES and continue. In + the common case, at least when running shell scripts, this will + degenerate to a bunch of calls to `xstrchr', and then what is + basically a reversal of TLIST into BRACES, which is corrected + by a call to REVERSE_LIST () on BRACES when the end of TLIST + is reached. */ + if (xstrchr (tlist->word->word, LBRACE)) + { + expansions = brace_expand (tlist->word->word); + + for (eindex = 0; temp_string = expansions[eindex]; eindex++) + { + w = make_word (temp_string); + /* If brace expansion didn't change the word, preserve + the flags. We may want to preserve the flags + unconditionally someday -- XXX */ + if (STREQ (temp_string, tlist->word->word)) + w->flags = tlist->word->flags; + output_list = make_word_list (w, output_list); + free (expansions[eindex]); + } + free (expansions); + + /* Add TLIST to the list of words to be freed after brace + expansion has been performed. */ + PREPEND_LIST (tlist, disposables); + } + else + PREPEND_LIST (tlist, output_list); + } + + if (disposables) + dispose_words (disposables); + + if (output_list) + output_list = REVERSE_LIST (output_list, WORD_LIST *); + + return (output_list); +} +#endif + +static WORD_LIST * +shell_expand_word_list (tlist, eflags) + WORD_LIST *tlist; + int eflags; +{ + WORD_LIST *expanded, *orig_list, *new_list, *next, *temp_list; + int expanded_something, has_dollar_at; + char *temp_string; + + /* We do tilde expansion all the time. This is what 1003.2 says. */ + new_list = (WORD_LIST *)NULL; + for (orig_list = tlist; tlist; tlist = next) + { + temp_string = tlist->word->word; + + next = tlist->next; + + /* Posix.2 section 3.6.1 says that tildes following `=' in words + which are not assignment statements are not expanded. If the + shell isn't in posix mode, though, we perform tilde expansion + on `likely candidate' unquoted assignment statements (flags + include W_ASSIGNMENT but not W_QUOTED). A likely candidate + contains an unquoted :~ or =~. Something to think about: we + now have a flag that says to perform tilde expansion on arguments + to `assignment builtins' like declare and export that look like + assignment statements. We now do tilde expansion on such words + even in POSIX mode. */ +#if 0 + if (((tlist->word->flags & (W_ASSIGNMENT|W_QUOTED)) == W_ASSIGNMENT) && + (posixly_correct == 0 || (tlist->word->flags & W_TILDEEXP)) && + (unquoted_substring ("=~", temp_string) || unquoted_substring (":~", temp_string))) + { + tlist->word->word = bash_tilde_expand (temp_string, 1); + free (temp_string); + } + else if (temp_string[0] == '~') + { + tlist->word->word = bash_tilde_expand (temp_string, 0); + free (temp_string); + } +#endif + + expanded_something = 0; + expanded = expand_word_internal + (tlist->word, 0, 0, &has_dollar_at, &expanded_something); + + if (expanded == &expand_word_error || expanded == &expand_word_fatal) + { + /* By convention, each time this error is returned, + tlist->word->word has already been freed. */ + tlist->word->word = (char *)NULL; + + /* Dispose our copy of the original list. */ + dispose_words (orig_list); + /* Dispose the new list we're building. */ + dispose_words (new_list); + + last_command_exit_value = EXECUTION_FAILURE; + if (expanded == &expand_word_error) + exp_jump_to_top_level (DISCARD); + else + exp_jump_to_top_level (FORCE_EOF); + } + + /* Don't split words marked W_NOSPLIT. */ + if (expanded_something && (tlist->word->flags & W_NOSPLIT) == 0) + { + temp_list = word_list_split (expanded); + dispose_words (expanded); + } + else + { + /* If no parameter expansion, command substitution, process + substitution, or arithmetic substitution took place, then + do not do word splitting. We still have to remove quoted + null characters from the result. */ + word_list_remove_quoted_nulls (expanded); + temp_list = expanded; + } + + expanded = REVERSE_LIST (temp_list, WORD_LIST *); + new_list = (WORD_LIST *)list_append (expanded, new_list); + } + + if (orig_list) + dispose_words (orig_list); + + if (new_list) + new_list = REVERSE_LIST (new_list, WORD_LIST *); + + return (new_list); +} + +/* The workhorse for expand_words () and expand_words_no_vars (). + First arg is LIST, a WORD_LIST of words. + Second arg EFLAGS is a flags word controlling which expansions are + performed. + + This does all of the substitutions: brace expansion, tilde expansion, + parameter expansion, command substitution, arithmetic expansion, + process substitution, word splitting, and pathname expansion, according + to the bits set in EFLAGS. Words with the W_QUOTED or W_NOSPLIT bits + set, or for which no expansion is done, do not undergo word splitting. + Words with the W_NOGLOB bit set do not undergo pathname expansion. */ +static WORD_LIST * +expand_word_list_internal (list, eflags) + WORD_LIST *list; + int eflags; +{ + WORD_LIST *new_list, *temp_list; + int tint; + + if (list == 0) + return ((WORD_LIST *)NULL); + + garglist = new_list = copy_word_list (list); + if (eflags & WEXP_VARASSIGN) + { + garglist = new_list = separate_out_assignments (new_list); + if (new_list == 0) + { + if (subst_assign_varlist) + { + /* All the words were variable assignments, so they are placed + into the shell's environment. */ + for (temp_list = subst_assign_varlist; temp_list; temp_list = temp_list->next) + { + this_command_name = (char *)NULL; /* no arithmetic errors */ + tint = do_assignment (temp_list->word->word); + /* Variable assignment errors in non-interactive shells + running in Posix.2 mode cause the shell to exit. */ + if (tint == 0) + { + last_command_exit_value = EXECUTION_FAILURE; + if (interactive_shell == 0 && posixly_correct) + exp_jump_to_top_level (FORCE_EOF); + else + exp_jump_to_top_level (DISCARD); + } + } + dispose_words (subst_assign_varlist); + subst_assign_varlist = (WORD_LIST *)NULL; + } + return ((WORD_LIST *)NULL); + } + } + + /* Begin expanding the words that remain. The expansions take place on + things that aren't really variable assignments. */ + +#if defined (BRACE_EXPANSION) + /* Do brace expansion on this word if there are any brace characters + in the string. */ + if ((eflags & WEXP_BRACEEXP) && brace_expansion && new_list) + new_list = brace_expand_word_list (new_list, eflags); +#endif /* BRACE_EXPANSION */ + + /* Perform the `normal' shell expansions: tilde expansion, parameter and + variable substitution, command substitution, arithmetic expansion, + and word splitting. */ + new_list = shell_expand_word_list (new_list, eflags); + + /* Okay, we're almost done. Now let's just do some filename + globbing. */ + if (new_list) + { + if ((eflags & WEXP_PATHEXP) && disallow_filename_globbing == 0) + /* Glob expand the word list unless globbing has been disabled. */ + new_list = glob_expand_word_list (new_list, eflags); + else + /* Dequote the words, because we're not performing globbing. */ + new_list = dequote_list (new_list); + } + + if ((eflags & WEXP_VARASSIGN) && subst_assign_varlist) + { + sh_assign_func_t *assign_func; + + /* If the remainder of the words expand to nothing, Posix.2 requires + that the variable and environment assignments affect the shell's + environment. */ + assign_func = new_list ? assign_in_env : do_assignment; + tempenv_assign_error = 0; + + for (temp_list = subst_assign_varlist; temp_list; temp_list = temp_list->next) + { + this_command_name = (char *)NULL; + tint = (*assign_func) (temp_list->word->word); + /* Variable assignment errors in non-interactive shells running + in Posix.2 mode cause the shell to exit. */ + if (tint == 0) + { + if (assign_func == do_assignment) + { + last_command_exit_value = EXECUTION_FAILURE; + if (interactive_shell == 0 && posixly_correct) + exp_jump_to_top_level (FORCE_EOF); + else + exp_jump_to_top_level (DISCARD); + } + else + tempenv_assign_error++; + } + } + + dispose_words (subst_assign_varlist); + subst_assign_varlist = (WORD_LIST *)NULL; + } + +#if 0 + tint = list_length (new_list) + 1; + RESIZE_MALLOCED_BUFFER (glob_argv_flags, 0, tint, glob_argv_flags_size, 16); + for (tint = 0, temp_list = new_list; temp_list; temp_list = temp_list->next) + glob_argv_flags[tint++] = (temp_list->word->flags & W_GLOBEXP) ? '1' : '0'; + glob_argv_flags[tint] = '\0'; +#endif + + return (new_list); +} diff --git a/subst.c~ b/subst.c~ index d4c102493..49de9af70 100644 --- a/subst.c~ +++ b/subst.c~ @@ -1528,7 +1528,7 @@ split_at_delims (string, slen, delims, sentinel, nwp, cwp) mblength = MBRLEN (delims + i, slength, &state); if (MB_INVALIDCH (mblength)) state = state_bak; - else if (mblength != 1) + else if (mblength > 1) { memcpy (d2 + ts, delims + i, mblength); ts += mblength; @@ -1793,6 +1793,8 @@ string_list_dollar_at (list, quoted) sep[0] = *ifs; sep[1] = '\0'; } + else if (mblength == 0) + sep[0] = '\0'; else { memcpy (sep, ifs, mblength); @@ -2161,14 +2163,7 @@ do_assignment_internal (string, expand) /* Perform tilde expansion. */ if (expand && temp[0]) - { - temp = (xstrchr (temp, '~') && unquoted_member ('~', temp)) - ? bash_tilde_expand (temp, 1) - : savestring (temp); - - value = expand_string_if_necessary (temp, 0, expand_string_unsplit); - free (temp); - } + value = expand_string_if_necessary (temp, 0, expand_string_assignment); else value = savestring (temp); } @@ -2336,9 +2331,6 @@ pos_params (string, start, end, quoted) t->next = (WORD_LIST *)NULL; if (string[0] == '*') -#if 0 - ret = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? string_list_dollar_star (quote_list (h)) : string_list (h); -#else { if (quoted & Q_DOUBLE_QUOTES) ret = string_list_dollar_star (quote_list (h)); @@ -2347,7 +2339,6 @@ pos_params (string, start, end, quoted) else ret = string_list (h); } -#endif else ret = string_list ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? quote_list (h) : h); if (t != params) @@ -2364,9 +2355,9 @@ pos_params (string, start, end, quoted) /******************************************************************/ #if defined (PROCESS_SUBSTITUTION) -#define EXP_CHAR(s) (s == '$' || s == '`' || s == '<' || s == '>' || s == CTLESC) +#define EXP_CHAR(s) (s == '$' || s == '`' || s == '<' || s == '>' || s == CTLESC || s == '~') #else -#define EXP_CHAR(s) (s == '$' || s == '`' || s == CTLESC) +#define EXP_CHAR(s) (s == '$' || s == '`' || s == CTLESC || s == '~') #endif /* If there are any characters in STRING that require full expansion, @@ -2493,13 +2484,6 @@ cond_expand_word (w, special) if (w->word == 0 || w->word[0] == '\0') return ((char *)NULL); - if (xstrchr (w->word, '~') && unquoted_member ('~', w->word)) - { - p = bash_tilde_expand (w->word, 0); - free (w->word); - w->word = p; - } - l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0); if (l) { @@ -2599,6 +2583,36 @@ expand_string_unsplit (string, quoted) return (value); } +/* Expand the rhs of an assignment statement */ +WORD_LIST * +expand_string_assignment (string, quoted) + char *string; + int quoted; +{ + WORD_DESC td; + WORD_LIST *value; + + if (string == 0 || *string == '\0') + return ((WORD_LIST *)NULL); + + expand_no_split_dollar_star = 1; + + td.flags = W_ASSIGNRHS; + td.word = savestring (string); + value = call_expand_word_internal (&td, quoted, 0, (int *)NULL, (int *)NULL); + FREE (td.word); + + expand_no_split_dollar_star = 0; + + if (value) + { + if (value->word) + remove_quoted_nulls (value->word->word); + dequote_list (value); + } + return (value); +} + /* Expand one of the PS? prompt strings. This is a sort of combination of expand_string_unsplit and expand_string_internal, but returns the @@ -3555,8 +3569,6 @@ getpattern (value, quoted, expandpat) WORD_LIST *l; int i; - tword = xstrchr (value, '~') ? bash_tilde_expand (value, 0) : savestring (value); - /* There is a problem here: how to handle single or double quotes in the pattern string when the whole expression is between double quotes? POSIX.2 says that enclosing double quotes do not cause the pattern to @@ -3574,11 +3586,10 @@ getpattern (value, quoted, expandpat) /* expand_string_for_rhs () leaves WORD quoted and does not perform word splitting. */ - l = *tword ? expand_string_for_rhs (tword, + l = *value ? expand_string_for_rhs (value, (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? Q_PATQUOTE : quoted, (int *)NULL, (int *)NULL) : (WORD_LIST *)0; - free (tword); pat = string_list (l); dispose_words (l); if (pat) @@ -3626,11 +3637,7 @@ list_remove_pattern (list, pattern, patspec, itype, quoted) l = REVERSE_LIST (new, WORD_LIST *); if (itype == '*') -#if 0 - tword = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? string_list_dollar_star (l) : string_list (l); -#else tword = (quoted & Q_DOUBLE_QUOTES) ? string_list_dollar_star (l) : string_list (l); -#endif else tword = string_list ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? quote_list (l) : l); @@ -4707,24 +4714,16 @@ parameter_brace_expand_rhs (name, value, c, quoted, qdollaratp, hasdollarat) char *t, *t1, *temp; int hasdol; - /* XXX - Should we tilde expand in an assignment context if C is `='? */ - if (*value == '~') - temp = bash_tilde_expand (value, 0); - else if (xstrchr (value, '~') && unquoted_substring ("=~", value)) - temp = bash_tilde_expand (value, 1); - else - temp = savestring (value); - /* If the entire expression is between double quotes, we want to treat the value as a double-quoted string, with the exception that we strip embedded unescaped double quotes. */ - if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && *temp) + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && *value) { hasdol = 0; - t = string_extract_double_quoted (temp, &hasdol, 1); - free (temp); - temp = t; + temp = string_extract_double_quoted (value, &hasdol, 1); } + else + temp = value; hasdol = 0; /* XXX was 0 not quoted */ @@ -4732,7 +4731,8 @@ parameter_brace_expand_rhs (name, value, c, quoted, qdollaratp, hasdollarat) : (WORD_LIST *)0; if (hasdollarat) *hasdollarat = hasdol || (l && l->next); - free (temp); + if (temp != value) + free (temp); if (l) { /* The expansion of TEMP returned something. We need to treat things @@ -4792,15 +4792,7 @@ parameter_brace_expand_error (name, value) if (value && *value) { - if (*value == '~') - temp = bash_tilde_expand (value, 0); - else if (xstrchr (value, '~') && unquoted_substring ("=~", value)) - temp = bash_tilde_expand (value, 1); - else - temp = savestring (value); - - l = expand_string (temp, 0); - FREE (temp); + l = expand_string (value, 0); temp = string_list (l); report_error ("%s: %s", name, temp ? temp : ""); /* XXX was value not "" */ FREE (temp); @@ -5454,16 +5446,9 @@ parameter_brace_patsub (varname, value, patsub, quoted) if (rep && *rep == '\0') rep = (char *)NULL; -#if 0 - /* Expand PAT and REP for command, variable and parameter, arithmetic, - and process substitution. Also perform quote removal. Do not - perform word splitting or filename generation. */ - pat = expand_string_if_necessary (lpatsub, (quoted & ~Q_DOUBLE_QUOTES), expand_string_unsplit); -#else /* Perform the same expansions on the pattern as performed by the pattern removal expansions. */ pat = getpattern (lpatsub, quoted, 1); -#endif if (rep) { @@ -6029,11 +6014,7 @@ param_expand (string, sindex, quoted, expanded_something, quote the whole string, including the separators. If IFS is unset, the parameters are separated by ' '; if $IFS is null, the parameters are concatenated. */ -#if 0 - temp = string_list_dollar_star (list); -#else temp = (quoted & Q_DOUBLE_QUOTES) ? string_list_dollar_star (list) : string_list (list); -#endif temp1 = quote_string (temp); free (temp); temp = temp1; @@ -6319,10 +6300,13 @@ expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_somethin string (e.g., "xx"ab), or is fully quoted (e.g., "xxab"). */ int quoted_state; + /* State flags */ int had_quoted_null; int has_dollar_at; int tflag; + int assignoff; /* If assignment, offset of `=' */ + register unsigned char c; /* Current character. */ int t_index; /* For calls to string_extract_xxx. */ @@ -6343,6 +6327,8 @@ expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_somethin if (contains_dollar_at) *contains_dollar_at = 0; + assignoff = -1; + /* Begin the expansion. */ for (sindex = 0; ;) @@ -6412,6 +6398,81 @@ add_string: } #endif /* PROCESS_SUBSTITUTION */ + case '=': + /* Posix.2 section 3.6.1 says that tildes following `=' in words + which are not assignment statements are not expanded. If the + shell isn't in posix mode, though, we perform tilde expansion + on `likely candidate' unquoted assignment statements (flags + include W_ASSIGNMENT but not W_QUOTED). A likely candidate + contains an unquoted :~ or =~. Something to think about: we + now have a flag that says to perform tilde expansion on arguments + to `assignment builtins' like declare and export that look like + assignment statements. We now do tilde expansion on such words + even in POSIX mode. */ + if (word->flags & (W_ASSIGNRHS|W_NOTILDE)) + goto add_character; + /* If we're not in posix mode or forcing assignment-statement tilde + expansion, note where the `=' appears in the word and prepare to + do tilde expansion following the first `='. */ + if ((word->flags & W_ASSIGNMENT) && + (posixly_correct == 0 || (word->flags & W_TILDEEXP)) && + assignoff == -1 && sindex > 0) + assignoff = sindex; + if (sindex == assignoff && string[sindex+1] == '~') /* XXX */ + word->flags |= W_ITILDE; + else if ((word->flags & W_ASSIGNMENT) && + (posixly_correct == 0 || (word->flags & W_TILDEEXP)) && + string[sindex+1] == '~') + word->flags |= W_ITILDE; + goto add_character; + + case ':': + if (word->flags & W_NOTILDE) + goto add_character; + if ((word->flags & (W_ASSIGNMENT|W_ASSIGNRHS)) && + (posixly_correct == 0 || (word->flags & W_TILDEEXP)) && + string[sindex+1] == '~') + word->flags |= W_ITILDE; + goto add_character; + + case '~': + /* If the word isn't supposed to be tilde expanded, or we're not + at the start of a word or after an unquoted : or = in an + assignment statement, we don't do tilde expansion. */ + if ((word->flags & W_NOTILDE) || + (sindex > 0 && ((word->flags & W_ITILDE) == 0)) || + (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) + { + word->flags &= ~W_ITILDE; + goto add_character; + } + + if (word->flags & W_ASSIGNRHS) + tflag = 2; + else if ((word->flags & W_ASSIGNMENT) && + (posixly_correct == 0 || (word->flags & W_TILDEEXP))) + tflag = 1; + else + tflag = 0; + + temp = bash_tilde_find_word (string + sindex, tflag, &t_index); + + word->flags &= ~W_ITILDE; + + if (temp && *temp && t_index > 0) + { + temp1 = bash_tilde_expand (temp, tflag); + free (temp); + temp = temp1; + sindex += t_index; + goto add_string; + } + else + { + FREE (temp); + goto add_character; + } + case '$': if (expanded_something) *expanded_something = 1; @@ -6498,11 +6559,7 @@ add_twochars: break; case '"': -#if 0 - if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT|Q_PATQUOTE)) -#else if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) -#endif goto add_character; t_index = ++sindex; @@ -6644,11 +6701,7 @@ add_twochars: /* break; */ case '\'': -#if 0 - if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT|Q_PATQUOTE)) -#else if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) -#endif goto add_character; t_index = ++sindex; @@ -6968,10 +7021,11 @@ setifs (v) size_t ifs_len; ifs_len = strnlen (ifs_value, MB_CUR_MAX); ifs_firstc_len = MBLEN (ifs_value, ifs_len); - if (ifs_firstc_len == 1 || MB_INVALIDCH (ifs_firstc_len)) + if (ifs_firstc_len == 1 || ifs_firstc_len == 0 || MB_INVALIDCH (ifs_firstc_len)) { ifs_firstc[0] = ifs_value[0]; ifs_firstc[1] = '\0'; + ifs_firstc_len = 1; } else memcpy (ifs_firstc, ifs_value, ifs_firstc_len); @@ -7381,29 +7435,6 @@ shell_expand_word_list (tlist, eflags) next = tlist->next; - /* Posix.2 section 3.6.1 says that tildes following `=' in words - which are not assignment statements are not expanded. If the - shell isn't in posix mode, though, we perform tilde expansion - on `likely candidate' unquoted assignment statements (flags - include W_ASSIGNMENT but not W_QUOTED). A likely candidate - contains an unquoted :~ or =~. Something to think about: we - now have a flag that says to perform tilde expansion on arguments - to `assignment builtins' like declare and export that look like - assignment statements. We now do tilde expansion on such words - even in POSIX mode. */ - if (((tlist->word->flags & (W_ASSIGNMENT|W_QUOTED)) == W_ASSIGNMENT) && - (posixly_correct == 0 || (tlist->word->flags & W_TILDEEXP)) && - (unquoted_substring ("=~", temp_string) || unquoted_substring (":~", temp_string))) - { - tlist->word->word = bash_tilde_expand (temp_string, 1); - free (temp_string); - } - else if (temp_string[0] == '~') - { - tlist->word->word = bash_tilde_expand (temp_string, 0); - free (temp_string); - } - expanded_something = 0; expanded = expand_word_internal (tlist->word, 0, 0, &has_dollar_at, &expanded_something); diff --git a/subst.h b/subst.h index c725df501..7484743de 100644 --- a/subst.h +++ b/subst.h @@ -126,6 +126,9 @@ extern int number_of_args __P((void)); takes care of quote removal. */ extern WORD_LIST *expand_string_unsplit __P((char *, int)); +/* Expand the rhs of an assignment statement. */ +extern WORD_LIST *expand_string_assignment __P((char *, int)); + /* Expand a prompt string. */ extern WORD_LIST *expand_prompt_string __P((char *, int)); diff --git a/subst.h~ b/subst.h~ index 0acfdd7c6..c725df501 100644 --- a/subst.h~ +++ b/subst.h~ @@ -231,7 +231,13 @@ extern WORD_LIST *split_at_delims __P((char *, int, char *, int, int *, int *)); extern SHELL_VAR *ifs_var; extern char *ifs_value; extern unsigned char ifs_cmap[]; + +#if defined (HANDLE_MULTIBYTE) +extern unsigned char ifs_firstc[]; +extern size_t ifs_firstc_len; +#else extern unsigned char ifs_firstc; +#endif /* Evaluates to 1 if C is a character in $IFS. */ #define isifs(c) (ifs_cmap[(unsigned char)(c)] != 0) diff --git a/tests/errors.right b/tests/errors.right index 9d8e18534..ac987fbdd 100644 --- a/tests/errors.right +++ b/tests/errors.right @@ -95,6 +95,6 @@ trap: usage: trap [-lp] [arg signal_spec ...] ./errors.tests: line 246: kill: -s: option requires an argument ./errors.tests: line 248: kill: S: invalid signal specification ./errors.tests: line 250: kill: `': not a pid or valid job spec -kill: usage: kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l [sigspec] +kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec] ./errors.tests: line 255: set: trackall: invalid option name ./errors.tests: line 262: `!!': not a valid identifier diff --git a/tests/errors.right~ b/tests/errors.right~ index 1f3487be2..9d8e18534 100644 --- a/tests/errors.right~ +++ b/tests/errors.right~ @@ -85,7 +85,7 @@ command: usage: command [-pVv] command [arg ...] ./errors.tests: line 213: /bin/sh + 0: syntax error: operand expected (error token is "/bin/sh + 0") ./errors.tests: line 216: trap: NOSIG: invalid signal specification ./errors.tests: line 219: trap: -s: invalid option -trap: usage: trap [-lp] [[arg] signal_spec ...] +trap: usage: trap [-lp] [arg signal_spec ...] ./errors.tests: line 225: return: can only `return' from a function or sourced script ./errors.tests: line 229: break: 0: loop count out of range ./errors.tests: line 233: continue: 0: loop count out of range diff --git a/tests/more-exp.right b/tests/more-exp.right index a98585656..91a375cbc 100644 --- a/tests/more-exp.right +++ b/tests/more-exp.right @@ -28,7 +28,7 @@ argv[3] = argv[4] = argv[5] = argv[1] = -argv[1] = +argv[1] = <~> argv[1] = <~> argv[1] = <\~> argv[1] = <\ \~> @@ -108,7 +108,7 @@ argv[3] = argv[4] = argv[5] = argv[6] = -./more-exp.tests: line 269: abc=def: command not found +./more-exp.tests: line 272: abc=def: command not found argv[1] = argv[1] = argv[2] = @@ -184,13 +184,13 @@ argv[1] = <1> argv[1] = <5> argv[1] = <5> argv[1] = <0> -./more-exp.tests: line 420: ${#:}: bad substitution -./more-exp.tests: line 422: ${#/}: bad substitution -./more-exp.tests: line 424: ${#%}: bad substitution -./more-exp.tests: line 426: ${#=}: bad substitution -./more-exp.tests: line 428: ${#+}: bad substitution -./more-exp.tests: line 430: ${#1xyz}: bad substitution -./more-exp.tests: line 433: #: %: syntax error: operand expected (error token is "%") +./more-exp.tests: line 423: ${#:}: bad substitution +./more-exp.tests: line 425: ${#/}: bad substitution +./more-exp.tests: line 427: ${#%}: bad substitution +./more-exp.tests: line 429: ${#=}: bad substitution +./more-exp.tests: line 431: ${#+}: bad substitution +./more-exp.tests: line 433: ${#1xyz}: bad substitution +./more-exp.tests: line 436: #: %: syntax error: operand expected (error token is "%") argv[1] = <0> argv[1] = argv[1] = <+> diff --git a/tests/more-exp.right~ b/tests/more-exp.right~ new file mode 100644 index 000000000..3c22fbbc6 --- /dev/null +++ b/tests/more-exp.right~ @@ -0,0 +1,214 @@ +argv[1] = +argv[1] = +argv[1] = +argv[1] = +argv[1] = +argv[1] = +argv[1] = +argv[1] = +argv[1] = +argv[1] = +argv[1] = +argv[1] = +argv[2] = +argv[3] = +argv[4] = +argv[5] = +argv[1] = +argv[1] = +argv[2] = +argv[1] = +argv[2] = +argv[3] = +argv[4] = +argv[5] = +argv[1] = +argv[2] = +argv[3] = +argv[4] = +argv[5] = +argv[1] = +argv[1] = <~> +argv[1] = <~> +argv[1] = <\~> +argv[1] = <\ \~> +argv[1] = <\ \ \~> +argv[1] = +argv[1] = +argv[1] = +argv[1] = <$HOME> +argv[1] = <\ $HOME> +argv[1] = <\ \ $HOME> +argv[1] = <'bar'> +argv[1] = <'bar'> +argv[1] = <*@> +argv[1] = <*@> +argv[1] = <*@> +argv[1] = <*@> +argv[1] = <*@*> +argv[1] = <*@*> +argv[1] = <*@*> +argv[1] = <*@*> +argv[1] = +argv[1] = +argv[1] = <4> +argv[2] = <2> +argv[1] = <1> +argv[1] = +argv[1] = <2> +argv[1] = +argv[1] = <2> +argv[1] = <4> +argv[1] = <--\> +argv[2] = <--> +argv[1] = <--\^J--> +argv[1] = <--+\> +argv[2] = <+--> +argv[1] = <--+\^J+--> +argv[1] = <-+\> +argv[2] = <+-\> +argv[3] = <-> +argv[1] = +argv[1] = +argv[1] = +argv[1] = +argv[1] = +argv[1] = +argv[1] = <> +argv[1] = <> +argv[1] = +argv[1] = +argv[1] = +argv[1] = +argv[1] = +argv[1] = +argv[1] = <> +argv[1] = <> +argv[1] = +argv[1] = +argv[1] = <> +argv[1] = +argv[1] = +argv[1] = +argv[1] = +argv[1] = <^?> +argv[1] = <^?> +argv[1] = +argv[1] = +argv[1] = <> +argv[2] = +argv[3] = +argv[1] = <> +argv[2] = +argv[3] = <> +argv[1] = +argv[1] = +argv[2] = +argv[3] = +argv[4] = +argv[5] = +argv[6] = +./more-exp.tests: line 272: abc=def: command not found +argv[1] = +argv[1] = +argv[2] = +argv[3] = +argv[4] = +argv[5] = +argv[1] = +argv[1] = +argv[1] = <\a> +argv[1] = <\a> +argv[1] = <\a> +argv[1] = <\a> +argv[1] = <\\a> +argv[1] = +argv[1] = <\a> +argv[1] = <\a> +argv[1] = <\a> +argv[1] = <\a> +argv[1] = <\\a> +argv[1] = +argv[1] = +argv[1] = <\a> +argv[1] = <\a> +argv[1] = <\a> +argv[1] = <\a> +argv[1] = <$a> +argv[1] = <\foo> +argv[1] = <$a> +argv[1] = <\foo> +argv[1] = <\$a> +argv[1] = <\\$a> +argv[1] = +argv[1] = +argv[1] = <\a> +argv[1] = <\a> +argv[1] = <\a> +argv[1] = <\a> +argv[1] = +argv[2] = <{> +argv[3] = +argv[4] = +argv[5] = <}> +argv[1] = +argv[2] = +argv[3] = <}> +argv[1] = +Number of args: 0 +<${*-x}>: +<${@-x}>: +Number of args: 1 +<${*-x}>: <> +<${@-x}>: <> +Number of args: 2 +<${*-x}>: < > +<${@-x}>: < > +argv[1] = <5> +argv[1] = <5> +argv[1] = <5> +argv[1] = <5> +argv[1] = <5> +argv[1] = <0> +argv[1] = <0> +argv[1] = <0> +argv[1] = <0> +argv[1] = <0> +argv[1] = <0> +argv[1] = +argv[1] = +argv[1] = <2> +argv[1] = <0> +argv[1] = <0> +argv[1] = <1> +argv[1] = <5> +argv[1] = <5> +argv[1] = <0> +./more-exp.tests: line 420: ${#:}: bad substitution +./more-exp.tests: line 422: ${#/}: bad substitution +./more-exp.tests: line 424: ${#%}: bad substitution +./more-exp.tests: line 426: ${#=}: bad substitution +./more-exp.tests: line 428: ${#+}: bad substitution +./more-exp.tests: line 430: ${#1xyz}: bad substitution +./more-exp.tests: line 433: #: %: syntax error: operand expected (error token is "%") +argv[1] = <0> +argv[1] = +argv[1] = <+> +argv[1] = <+> +argv[1] = <+> +argv[1] = +argv[2] = +argv[3] = <}> +argv[1] = +argv[2] = +argv[3] = <}> +argv[1] = +argv[2] = +1 +argv[1] = <> +argv[1] = <> +argv[1] = <> +argv[1] = <:a:> +argv[1] = <:b:> +argv[1] = <> +argv[1] = <> diff --git a/tests/more-exp.tests b/tests/more-exp.tests index 6c821a572..4a3cb7f54 100644 --- a/tests/more-exp.tests +++ b/tests/more-exp.tests @@ -65,7 +65,10 @@ HOME=/usr/homes/chet somevar= expect "<$HOME>" recho ${somevar:-~} -expect "<$HOME>" +# This changed after bash-3.0, when the tilde implementation was redone. It's +# not backward compatible, but it's very hard to be backward-compatible here, +# and I think the old behavior was a bug +expect '<~>' recho "${somevar:-~}" expect '<~>' recho "${somevar:-"~"}" diff --git a/tests/more-exp.tests~ b/tests/more-exp.tests~ new file mode 100644 index 000000000..6c821a572 --- /dev/null +++ b/tests/more-exp.tests~ @@ -0,0 +1,501 @@ +expect() +{ + echo expect "$@" +} + +tool_var() { + eval $1=\"\${$1:-$2}\" + export $1 +} + +A="aaa bbb ccc" + +unset B + +tool_var B ${B:-"$A"} + +expect '' +recho "$A" +expect '' +recho "$B" + +eto_prepend() { + eval $1=\'$2\''${'$1':+":"${'$1'}}'; export $1 +} + +foo=bar; export foo +eto_prepend foo baz +expect '' +recho $foo +expect '' +recho ${foo-"bar"} + +aa='aaa bbb ccc' + +expect '' +recho ${zzz-"$aa"} +expect '' +recho ${zzz:-"bar"} +expect '' +recho "${zzz:-bar}" +expect '' +recho "${zzz:-"bar"}" + +var=abcde +expect '' +recho "${var:-xyz}" +expect '' +recho "${var:=xyz}" +expect '' +recho "${var:+xyz}" + +set 'a b' c d e f +expect ' ' +recho ${1+"$@"} +expect '' +recho "${1-"$@"}" +expect ' ' +recho ${1-"$@"} +expect ' ' +recho "${1+$@}" +expect ' ' +recho "${1+"$@"}" + +HOME=/usr/homes/chet +somevar= +expect "<$HOME>" +recho ${somevar:-~} +expect "<$HOME>" +recho "${somevar:-~}" +expect '<~>' +recho "${somevar:-"~"}" +expect '<\~>' +recho "${somevar:-\~}" +expect '<\ \~>' +recho "${somevar:-\ \~}" +expect '<\ \ \~>' +recho "${somevar:-\ \ \~}" + +expect "<$HOME>" +recho ${somevar:-$HOME} +expect "<$HOME>" +recho "${somevar:-$HOME}" +expect "<$HOME>" +recho "${somevar:-"$HOME"}" +expect '<$HOME>' +recho "${somevar:-\$HOME}" +expect '<\ $HOME>' +recho "${somevar:-\ \$HOME}" +expect '<\ \ $HOME>' +recho "${somevar:-\ \ \$HOME}" + +foo=bar +expect "<'bar'>" +recho "${foo+'$foo'}" +expect "<'bar'>" +recho "${fox='$foo'}" + +P='*@*' +expect '<*@>' +recho "${P%"*"}" +expect '<*@>' +recho "${P%'*'}" + +expect '<*@>' +recho ${P%"*"} +expect '<*@>' +recho ${P%'*'} + +expect '<*@*>' +recho ${P%""} +expect '<*@*>' +recho ${P#""} + +expect '<*@*>' +recho ${P#"$foobar"} +expect '<*@*>' +recho ${P%"$foobar"} + +s1=abcdefghijkl +s2=efgh + +first=${s1/$s2*/} +expect '' +recho $first + +last=${s1##$first} +expect '' +recho $last + +shift $# +UNAME_RELEASE=${1:-4.2MP} + +RELEASE=`expr "$UNAME_RELEASE" : '[^0-9]*\([0-9]*\)'` # 4 +case "$RELEASE" in +"") RELEASE=0 ;; +*) RELEASE=`expr "$RELEASE" + 0` ;; +esac +REL_LEVEL=`expr "$UNAME_RELEASE" : '[^0-9]*[0-9]*.\([0-9]*\)'` # 1 +REL_SUBLEVEL=`expr "$UNAME_RELEASE" : '[^0-9]*[0-9]*.[0-9]*.\([0-9]*\)'` # 2 + +expect '<4> <2>' +recho $RELEASE $REL_LEVEL $REL_SUBLEVEL + +b1() +{ + b2 ${1+"$@"} +} + +b2() +{ + recho $* + recho $# +} + +expect '<1>' +b1 '' + +expect ' <2>' +b1 bar '' + +expect ' <2>' +b1 '' bar + +expect '<4>' +b1 '' '' '' '' + +NL="\\ +" + +NNL="+$NL+" + +expect '<--\> <-->' +recho --$NL-- +expect '<--\^J-->' +recho "--$NL--" + +expect '<--+\> <+-->' +recho --$NNL-- +expect '<--+\^J+-->' +recho "--$NNL--" + +expect '<-+\> <+-\> <->' +recho -$NNL-$NL- + +set '' +expect '' +recho "$*xy" +expect '' +recho "x$*y" +expect '' +recho "xy$*" +expect '' +recho x"$*"y +expect '' +recho xy"$*" +expect '' +recho "$*"xy +expect '<>' +recho "$*" +expect nothing +recho $* + +unset undef ; set "" + +expect '<>' +recho ${undef-"$*"} +expect '' +recho ${undef-"x$*y"} +expect '' +recho ${undef-"$*xy"} +expect '' +recho ${undef-"xy$*"} +expect '' +recho ${undef-x"$*"y} +expect '' +recho ${undef-xy"$*"} +expect '' +recho ${undef-"$*"xy} +expect '<>' +recho "${undef-$*}" +expect nothing +recho ${undef-$*} + +expect '<>' +recho ${undef-"$zzz"} +expect '' +recho x${undef-"$zzz"} +expect '' +recho x${undef-"$@"} +expect nothing +recho ${undef-"$@"} +expect '' +recho ${undef-"$zzz"}x +expect '' +recho ${undef-"$@"}x +expect '' +recho "$@"x +expect '' +recho "$zzz"x +expect '<^?>' +recho ${undef-} +expect '<^?>' +recho ${undef-""} + +yyy="" +recho "$xxx"x +recho "$yyy"x + +set "" "abd" "" +recho "$@"x +recho "$@"$xxx + +OIFS="$IFS" + +arg=a,b,c,d,e,f + +IFS=, + +export z=$arg + +eval z1=\"$arg\" + +IFS="$OIFS" + +recho $z +recho $z1 + +# should give an error +abc\=def + +zz="a b c d e" +declare a=$zz + +recho "$a" +recho $a + +recho $(echo "foo$(echo ")")") + +# test backslash escapes + +recho \a +recho \\a + +recho "\a" +recho "\\a" + +recho '\a' +recho '\\a' + +recho $(zecho \a) +recho $(zecho \\a) + +recho $(zecho "\a") +recho $(zecho "\\a") + +recho $(zecho '\a') +recho $(zecho '\\a') + +recho `zecho \a` +recho `zecho \\a` + +recho `zecho "\a"` +recho `zecho "\\a"` + +recho `zecho '\a'` +recho `zecho '\\a'` + +a=foo + +recho \$a +recho \\$a + +recho "\$a" +recho "\\$a" + +recho '\$a' +recho '\\$a' + +recho $(zecho `zecho \a`) +recho $(zecho `zecho \\a`) + +recho $(zecho `zecho "\a"`) +recho $(zecho `zecho "\\a"`) + +recho $(zecho `zecho '\a'`) +recho $(zecho `zecho '\\a'`) + +# should echo G { I K } +recho ${abc:-G { I } K } + +abc=hi + +# should echo hi K } +recho ${abc:-G { I } K } + +# should echo a* +unset foo +recho "${foo:-"a"}*" + +f () +{ + echo "Number of args: $#" + echo "<\${*-x}>: <${*-x}>" + echo "<\${@-x}>: <${@-x}>" +} + +f +f '' +f '' '' + +set 1 2 3 4 5 + +expect '<5>' +recho ${#} +expect '<5>' +recho ${#:foo} +expect '<5>' +recho ${#:-foo} +expect '<5>' +recho ${#-posparams} +expect '<5>' +recho ${#:-posparams} + +expect '<0>' +recho ${#!} + +expect nothing +recho $! +expect nothing +recho ${!} + +expect nothing +recho $8 +expect nothing +recho ${8} + +shift $# + +expect '<0>' +recho ${#} +expect '<0>' +recho ${#:foo} +expect '<0>' +recho ${#:-foo} +expect '<0>' +recho ${#-posparams} +expect '<0>' +recho ${#:-posparams} + +expect '' +recho ${!-posparams} +expect '' +recho ${!:-posparams} + +expect '<2>' +recho ${#-} + +expect '<0>' +recho ${#-posparams} + +expect '<0>' +recho ${#?:-xyz} + +expect '<1>' +recho ${#?} + +set a b c d e + +expect '<5>' +recho ${#} +expect '<5>' +recho ${#?:-xyz} + +shift $# + +expect '<0>' +recho ${#:-foo} + +expect a bad substitution error +recho ${#:} +expect a bad substitution error +recho ${#/} +expect a bad substitution error +recho ${#%} +expect a bad substitution error +recho ${#=} +expect a bad substitution error +recho ${#+} +expect a bad substitution error +recho ${#1xyz} + +expect a math syntax error +recho ${#:%} + +expect '<0>' +recho ${#:-} + +set -- +unset a b + +x=a +y=b + +IFS=+ + +expect '' +recho $x+$y +expect '<+>' +recho $a+$b + +expect '<+>' +recho + "$@" +expect '<+>' +recho +"$@" + +# variants of nested curly braces inside ${...} expressions + +# IFS is not the standard one + +expect '' '' '<}>' +recho ${gik:-G { I } K } + +abc=hi + +expect '' '' '<}>' +recho ${abc:-G { I } K } + +# reset IFS to the default +IFS=' +' + +# nested ${...} inside ${...} are handled specially +unset XXX FOO BAR +expect '' '' +XXX=xxx +FOO=${BAR:-${XXX} yyy} +recho $FOO + +# this was a bug in versions of bash prior to bash-2.04-release +set -- '' +expect 1 +echo $# +expect '<>' +recho "${@}" +expect '<>' +recho "${@-}" +expect '<>' +recho "${@:-}" + +# this was a bug in bash-2.04, fixed in 2.05 +set -- a b +expect '<:a:>' '<:b:>' +for i in "${@-}"; do recho :$i:; done + +# I believe that ksh93 does these wrong -- we're using the rhs, so shouldn't +# it behave the same as ""? +set -- +expect '<>' +recho "${@-}" +expect '<>' +recho "${@:-}" -- 2.47.3