diff options
-rw-r--r-- | CWRU/CWRU.chlog | 43 | ||||
-rw-r--r-- | CWRU/CWRU.chlog~ | 51 | ||||
-rw-r--r-- | bashline.c | 83 | ||||
-rw-r--r-- | bashline.c~ | 95 | ||||
-rw-r--r-- | bracecomp.c | 8 | ||||
-rw-r--r-- | builtins/printf.def | 2 | ||||
-rw-r--r-- | builtins/shopt.def | 2 | ||||
-rw-r--r-- | doc/bash.1 | 23 | ||||
-rw-r--r-- | doc/bashref.texi | 17 | ||||
-rw-r--r-- | doc/version.texi | 4 | ||||
-rw-r--r-- | externs.h | 2 | ||||
-rw-r--r-- | lib/sh/shquote.c | 91 | ||||
-rw-r--r-- | po/zh_CN.po | 809 | ||||
-rw-r--r-- | tests/errors.right | 4 |
14 files changed, 698 insertions, 536 deletions
diff --git a/CWRU/CWRU.chlog b/CWRU/CWRU.chlog index 9da74b20..e627c32e 100644 --- a/CWRU/CWRU.chlog +++ b/CWRU/CWRU.chlog @@ -12136,3 +12136,46 @@ lib/sh/strtrans.c code converts them to wide characters and uses iswprint to check valid wide chars. From a patch sent by Roman Rakus <rrakus@redhat.com> + + 9/7 + --- +lib/sh/shquote.c + - sh_backslash_quote: change to be table-driven so we can use a + different table if we want to + - sh_backslash_quote: takes a second char table[256] argument; + +externs.h + - sh_backslash_quote: add second argument to function prototype + +bashline.c,braces.c,parse.y,builtins/printf.def + - change callers of sh_backslash_quote to add second argument + +bashline.c + - filename_bstab: table of characters to pass to sh_backslash_quote; + characters with value 1 will be backslash-quoted + - set_filename_bstab: turn on characters in filename backslash-quote + table according to passed string argument + - call set_filename_bstab every time rl_filename_quote_characters is + assigned a value + - bash_quote_filename: call sh_backslash_quote with filename_bstab + as second argument. This allows other characters in filenames to + be quoted without quoting, for instance, a dollar sign in a shell + variable reference + + 9/8 + --- +bashline.c + - complete_fullquote: new variable, controls table passed to + sh_backslash_quote. If non-zero (the default), the standard set + of shell metacharacters -- as in bash versions up to and including + bash-4.2 -- gets backslash-quoted by the completion code. If zero, + sh_backslash_quote gets the table with the characters in the + variable reference removed, which means they are removed from the + set of characters to be quoted in filenames + + 9/10 + ---- +bashline.c + - bash_filename_stat_hook: new function, designed to expand variable + references in filenames before readline passes them to stat(2) + to determine whether or not they are a directory diff --git a/CWRU/CWRU.chlog~ b/CWRU/CWRU.chlog~ index 7fc45b7e..007fdb2d 100644 --- a/CWRU/CWRU.chlog~ +++ b/CWRU/CWRU.chlog~ @@ -12121,3 +12121,54 @@ support/shobj-conf - handle compilation on Lion (Mac OS X 10.7/darwin11) with changes to darwin stanzas. Fixes readline bug reported by Vincent Sheffer <vince.sheffer@apisphere.com> + +lib/sh/strtrans.c + - ansic_wshouldquote: check a string with multi-byte characters for + characters that needs to be backslash-octal escaped for $'...' + - ansic_shouldquote: if is_basic fails for one character, let + ansic_wshouldquote examine the rest of the string and return what + it returns. From a patch sent by Roman Rakus <rrakus@redhat.com> + + 8/30 + ---- +lib/sh/strtrans.c + - ansic_quote: changes to quote (or not) multibyte characters. New + code converts them to wide characters and uses iswprint to check + valid wide chars. From a patch sent by Roman Rakus + <rrakus@redhat.com> + + 9/7 + --- +lib/sh/shquote.c + - sh_backslash_quote: change to be table-driven so we can use a + different table if we want to + - sh_backslash_quote: takes a second char table[256] argument; + +externs.h + - sh_backslash_quote: add second argument to function prototype + +bashline.c,braces.c,parse.y,builtins/printf.def + - change callers of sh_backslash_quote to add second argument + +bashline.c + - filename_bstab: table of characters to pass to sh_backslash_quote; + characters with value 1 will be backslash-quoted + - set_filename_bstab: turn on characters in filename backslash-quote + table according to passed string argument + - call set_filename_bstab every time rl_filename_quote_characters is + assigned a value + - bash_quote_filename: call sh_backslash_quote with filename_bstab + as second argument. This allows other characters in filenames to + be quoted without quoting, for instance, a dollar sign in a shell + variable reference + + 9/8 + --- +bashline.c + - complete_fullquote: new variable, controls table passed to + sh_backslash_quote. If non-zero (the default), the standard set + of shell metacharacters -- as in bash versions up to and including + bash-4.2 -- gets backslash-quoted by the completion code. If zero, + sh_backslash_quote gets the table with the characters in the + variable reference removed, which means they are removed from the + set of characters to be quoted in filenames @@ -116,13 +116,15 @@ static int bash_backward_kill_shellword __P((int, int)); static char *restore_tilde __P((char *, char *)); static char *bash_filename_rewrite_hook __P((char *, int)); + static void bash_directory_expansion __P((char **)); +static int bash_filename_stat_hook __P((char **)); static int bash_directory_completion_hook __P((char **)); static int filename_completion_ignore __P((char **)); static int bash_push_line __P((void)); static rl_icppfunc_t *save_directory_hook __P((void)); -static void reset_directory_hook __P((rl_icppfunc_t *)); +static void restore_directory_hook __P((rl_icppfunc_t)); static void cleanup_expansion_error __P((void)); static void maybe_make_readline_line __P((char *)); @@ -151,6 +153,7 @@ static int return_zero __P((const char *)); static char *bash_dequote_filename __P((char *, int)); static char *quote_word_break_chars __P((char *)); +static void set_filename_bstab __P((const char *)); static char *bash_quote_filename __P((char *, int, char *)); static int putx __P((int)); @@ -251,12 +254,20 @@ int dircomplete_spelling = 0; /* Expand directory names during word/filename completion. */ int dircomplete_expand = 0; +/* When non-zero, perform `normal' shell quoting on completed filenames + even when the completed name contains a directory name with a shell + variable referene, so dollar signs in a filename get quoted appropriately. + Set to zero to remove dollar sign (and braces or parens as needed) from + the set of characters that will be quoted. */ +int complete_fullquote = 1; + static char *bash_completer_word_break_characters = " \t\n\"'@><=;|&(:"; static char *bash_nohostname_word_break_characters = " \t\n\"'><=;|&(:"; /* )) */ static const char *default_filename_quote_characters = " \t\n\\\"'@<>=;|&()#$`?*[!:{~"; /*}*/ static char *custom_filename_quote_characters = 0; +static char filename_bstab[256]; static rl_hook_func_t *old_rl_startup_hook = (rl_hook_func_t *)NULL; @@ -541,6 +552,7 @@ initialize_readline () /* characters that need to be quoted when appearing in filenames. */ rl_filename_quote_characters = default_filename_quote_characters; + set_filename_bstab (rl_filename_quote_characters); rl_filename_quoting_function = bash_quote_filename; rl_filename_dequoting_function = bash_dequote_filename; @@ -589,6 +601,7 @@ bashline_reset () rl_completion_entry_function = NULL; rl_ignore_some_completions_function = filename_completion_ignore; rl_filename_quote_characters = default_filename_quote_characters; + set_filename_bstab (rl_filename_quote_characters); set_directory_hook (); } @@ -1311,6 +1324,7 @@ attempt_shell_completion (text, start, end) rl_ignore_some_completions_function = filename_completion_ignore; rl_filename_quote_characters = default_filename_quote_characters; + set_filename_bstab (rl_filename_quote_characters); /* Determine if this could be a command word. It is if it appears at the start of the line (ignoring preceding whitespace), or if it @@ -2799,6 +2813,56 @@ restore_directory_hook (hookf) rl_directory_rewrite_hook = hookf; } +static int +bash_filename_stat_hook (dirname) + char **dirname; +{ + char *local_dirname, *new_dirname, *t; + int should_expand_dirname, return_value; + WORD_LIST *wl; + struct stat sb; + + local_dirname = *dirname; + should_expand_dirname = return_value = 0; + if (t = mbschr (local_dirname, '$')) + should_expand_dirname = '$'; + else if (t = mbschr (local_dirname, '`')) /* XXX */ + should_expand_dirname = '`'; + +#if defined (HAVE_LSTAT) + if (should_expand_dirname && lstat (local_dirname, &sb) == 0) +#else + if (should_expand_dirname && stat (local_dirname, &sb) == 0) +#endif + should_expand_dirname = 0; + + if (should_expand_dirname) + { + new_dirname = savestring (local_dirname); + wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB); /* does the right thing */ + if (wl) + { + free (new_dirname); + new_dirname = string_list (wl); + /* Tell the completer we actually expanded something and change + *dirname only if we expanded to something non-null -- stat + behaves unpredictably when passed null or empty strings */ + if (new_dirname && *new_dirname) + { + *dirname = new_dirname; + return_value = STREQ (local_dirname, *dirname) == 0; + } + free (local_dirname); + free (new_dirname); + dispose_words (wl); + } + else + free (new_dirname); + } + + return (return_value); +} + /* Handle symbolic link references and other directory name expansions while hacking completion. This should return 1 if it modifies the DIRNAME argument, 0 otherwise. It should make sure not to modify @@ -2872,6 +2936,7 @@ bash_directory_completion_hook (dirname) } custom_filename_quote_characters[j] = '\0'; rl_filename_quote_characters = custom_filename_quote_characters; + set_filename_bstab (rl_filename_quote_characters); } } else @@ -3494,6 +3559,20 @@ quote_word_break_chars (text) return ret; } +/* Use characters in STRING to populate the table of characters that should + be backslash-quoted. The table will be used for sh_backslash_quote from + this file. */ +static void +set_filename_bstab (string) + const char *string; +{ + const char *s; + + memset (filename_bstab, 0, sizeof (filename_bstab)); + for (s = string; s && *s; s++) + filename_bstab[*s] = 1; +} + /* Quote a filename using double quotes, single quotes, or backslashes depending on the value of completion_quoting_style. If we're completing using backslashes, we need to quote some additional @@ -3559,7 +3638,7 @@ bash_quote_filename (s, rtype, qcp) rtext = sh_single_quote (mtext); break; case COMPLETE_BSQUOTE: - rtext = sh_backslash_quote (mtext); + rtext = sh_backslash_quote (mtext, complete_fullquote ? 0 : filename_bstab); break; } diff --git a/bashline.c~ b/bashline.c~ index df48fdbe..4ea319ae 100644 --- a/bashline.c~ +++ b/bashline.c~ @@ -121,7 +121,6 @@ static int bash_directory_completion_hook __P((char **)); static int filename_completion_ignore __P((char **)); static int bash_push_line __P((void)); -static void set_directory_hook __P((void)); static rl_icppfunc_t *save_directory_hook __P((void)); static void reset_directory_hook __P((rl_icppfunc_t *)); @@ -152,6 +151,7 @@ static int return_zero __P((const char *)); static char *bash_dequote_filename __P((char *, int)); static char *quote_word_break_chars __P((char *)); +static void set_filename_bstab __P((const char *)); static char *bash_quote_filename __P((char *, int, char *)); static int putx __P((int)); @@ -250,7 +250,14 @@ int force_fignore = 1; int dircomplete_spelling = 0; /* Expand directory names during word/filename completion. */ -int dircomplete_expand = 1; +int dircomplete_expand = 0; + +/* When non-zero, perform `normal' shell quoting on completed filenames + even when the completed name contains a directory name with a shell + variable referene, so dollar signs in a filename get quoted appropriately. + Set to zero to remove dollar sign (and braces or parens as needed) from + the set of characters that will be quoted. */ +int complete_fullquote = 1; static char *bash_completer_word_break_characters = " \t\n\"'@><=;|&(:"; static char *bash_nohostname_word_break_characters = " \t\n\"'><=;|&(:"; @@ -258,6 +265,7 @@ static char *bash_nohostname_word_break_characters = " \t\n\"'><=;|&(:"; static const char *default_filename_quote_characters = " \t\n\\\"'@<>=;|&()#$`?*[!:{~"; /*}*/ static char *custom_filename_quote_characters = 0; +static char filename_bstab[256]; static rl_hook_func_t *old_rl_startup_hook = (rl_hook_func_t *)NULL; @@ -542,6 +550,7 @@ initialize_readline () /* characters that need to be quoted when appearing in filenames. */ rl_filename_quote_characters = default_filename_quote_characters; + set_filename_bstab (rl_filename_quote_characters); rl_filename_quoting_function = bash_quote_filename; rl_filename_dequoting_function = bash_dequote_filename; @@ -590,6 +599,7 @@ bashline_reset () rl_completion_entry_function = NULL; rl_ignore_some_completions_function = filename_completion_ignore; rl_filename_quote_characters = default_filename_quote_characters; + set_filename_bstab (rl_filename_quote_characters); set_directory_hook (); } @@ -1312,6 +1322,7 @@ attempt_shell_completion (text, start, end) rl_ignore_some_completions_function = filename_completion_ignore; rl_filename_quote_characters = default_filename_quote_characters; + set_filename_bstab (rl_filename_quote_characters); /* Determine if this could be a command word. It is if it appears at the start of the line (ignoring preceding whitespace), or if it @@ -2755,13 +2766,20 @@ bash_filename_rewrite_hook (fname, fnlen) } /* Functions to save and restore the appropriate directory hook */ -static void +/* This is not static so the shopt code can call it */ +void set_directory_hook () { if (dircomplete_expand) - rl_directory_completion_hook = bash_directory_completion_hook; + { + rl_directory_completion_hook = bash_directory_completion_hook; + rl_directory_rewrite_hook = (rl_icppfunc_t *)0; + } else - rl_directory_rewrite_hook = bash_directory_completion_hook; + { + rl_directory_rewrite_hook = bash_directory_completion_hook; + rl_directory_completion_hook = (rl_icppfunc_t *)0; + } } static rl_icppfunc_t * @@ -2793,6 +2811,56 @@ restore_directory_hook (hookf) rl_directory_rewrite_hook = hookf; } +static int +bash_directory_stat_hook (dirname) + char **dirname; +{ + char *local_dirname, *new_dirname, *t; + int should_expand_dirname, return_value; + WORD_LIST *wl; + struct stat sb; + + local_dirname = *dirname; + should_expand_dirname = return_value = 0; + if (t = mbschr (local_dirname, '$')) + should_expand_dirname = '$'; + else if (t = mbschr (local_dirname, '`')) /* XXX */ + should_expand_dirname = '`'; + +#if defined (HAVE_LSTAT) + if (should_expand_dirname && lstat (local_dirname, &sb) == 0) +#else + if (should_expand_dirname && stat (local_dirname, &sb) == 0) +#endif + should_expand_dirname = 0; + + if (should_expand_dirname) + { + new_dirname = savestring (local_dirname); + wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB); /* does the right thing */ + if (wl) + { + free (new_dirname); + new_dirname = string_list (wl); + /* Tell the completer we actually expanded something and change + *dirname only if we expanded to something non-null -- stat + behaves unpredictably when passed null or empty strings */ + if (new_dirname && *new_dirname) + { + *dirname = new_dirname; + return_value = STREQ (local_dirname, *dirname) == 0; + } + free (local_dirname); + free (new_dirname); + dispose_words (wl); + } + else + free (new_dirname); + } + + return (return_value); +} + /* Handle symbolic link references and other directory name expansions while hacking completion. This should return 1 if it modifies the DIRNAME argument, 0 otherwise. It should make sure not to modify @@ -2866,6 +2934,7 @@ bash_directory_completion_hook (dirname) } custom_filename_quote_characters[j] = '\0'; rl_filename_quote_characters = custom_filename_quote_characters; + set_filename_bstab (rl_filename_quote_characters); } } else @@ -3488,6 +3557,20 @@ quote_word_break_chars (text) return ret; } +/* Use characters in STRING to populate the table of characters that should + be backslash-quoted. The table will be used for sh_backslash_quote from + this file. */ +static void +set_filename_bstab (string) + const char *string; +{ + const char *s; + + memset (filename_bstab, 0, sizeof (filename_bstab)); + for (s = string; s && *s; s++) + filename_bstab[*s] = 1; +} + /* Quote a filename using double quotes, single quotes, or backslashes depending on the value of completion_quoting_style. If we're completing using backslashes, we need to quote some additional @@ -3553,7 +3636,7 @@ bash_quote_filename (s, rtype, qcp) rtext = sh_single_quote (mtext); break; case COMPLETE_BSQUOTE: - rtext = sh_backslash_quote (mtext); + rtext = sh_backslash_quote (mtext, complete_fullquote ? 0 : filename_bstab); break; } diff --git a/bracecomp.c b/bracecomp.c index cb218a2b..8698e441 100644 --- a/bracecomp.c +++ b/bracecomp.c @@ -75,8 +75,8 @@ really_munge_braces (array, real_start, real_end, gcd_zero) if (real_start == real_end) { - x = array[real_start] ? sh_backslash_quote (array[real_start] + gcd_zero) - : sh_backslash_quote (array[0]); + x = array[real_start] ? sh_backslash_quote (array[real_start] + gcd_zero, 0) + : sh_backslash_quote (array[0], 0); return x; } @@ -115,7 +115,7 @@ really_munge_braces (array, real_start, real_end, gcd_zero) if (start == end) { x = savestring (array[start] + gcd_zero); - subterm = sh_backslash_quote (x); + subterm = sh_backslash_quote (x, 0); free (x); } else @@ -126,7 +126,7 @@ really_munge_braces (array, real_start, real_end, gcd_zero) x = (char *)xmalloc (tlen + 1); strncpy (x, array[start] + gcd_zero, tlen); x[tlen] = '\0'; - subterm = sh_backslash_quote (x); + subterm = sh_backslash_quote (x, 0); free (x); result_size += strlen (subterm) + 1; result = (char *)xrealloc (result, result_size); diff --git a/builtins/printf.def b/builtins/printf.def index 04f4ebc6..58889013 100644 --- a/builtins/printf.def +++ b/builtins/printf.def @@ -553,7 +553,7 @@ printf_builtin (list) else if (ansic_shouldquote (p)) xp = ansic_quote (p, 0, (int *)0); else - xp = sh_backslash_quote (p); + xp = sh_backslash_quote (p, 0); if (xp) { /* Use printstr to get fieldwidth and precision right. */ diff --git a/builtins/shopt.def b/builtins/shopt.def index 1fa58c82..95294f03 100644 --- a/builtins/shopt.def +++ b/builtins/shopt.def @@ -100,6 +100,7 @@ extern int hist_verify, history_reediting, perform_hostname_completion; extern int no_empty_command_completion; extern int force_fignore; extern int dircomplete_spelling, dircomplete_expand; +extern int complete_fullquote; extern int enable_hostname_completion __P((int)); #endif @@ -159,6 +160,7 @@ static struct { { "compat40", &shopt_compat40, set_compatibility_level }, { "compat41", &shopt_compat41, set_compatibility_level }, #if defined (READLINE) + { "complete_fullquote", &complete_fullquote, (shopt_set_func_t *)NULL}, { "direxpand", &dircomplete_expand, shopt_set_complete_direxpand }, { "dirspell", &dircomplete_spelling, (shopt_set_func_t *)NULL }, #endif @@ -5,12 +5,12 @@ .\" Case Western Reserve University .\" chet@po.cwru.edu .\" -.\" Last Change: Fri Sep 2 14:19:38 EDT 2011 +.\" Last Change: Thu Sep 8 09:39:24 EDT 2011 .\" .\" bash_builtins, strip all but Built-Ins section .if \n(zZ=1 .ig zZ .if \n(zY=1 .ig zY -.TH BASH 1 "2011 September 2" "GNU Bash 4.2" +.TH BASH 1 "2011 September 8" "GNU Bash 4.2" .\" .\" There's some problem with having a `@' .\" in a tagged paragraph with the BSD man macros. @@ -8993,6 +8993,25 @@ parameter expansion as a special character. The single quotes must match quoted. This is the behavior of posix mode through version 4.1. The default bash behavior remains as in previous versions. .TP 8 +.B complete_fullquote +If set, +.B bash +quotes all shell metacharacters in filenames and directory names when +performing completion. +If not set, +.B bash +removes metacharacters such as the dollar sign from the set of +characters that will be quoted in completed filenames +when these metacharacters appear in shell variable references in words to be +completed. +This means that dollar signs in variable names that expand to directories +will not be quoted; +however, any dollar signs appearing in filenames will not be quoted, either. +This is active only when bash is using backslashes to quote completed +filenames. +This variable is set by default, which is the default bash behavior in +versions through 4.2. +.TP 8 .B direxpand If set, .B bash diff --git a/doc/bashref.texi b/doc/bashref.texi index 532cd3d4..814623bf 100644 --- a/doc/bashref.texi +++ b/doc/bashref.texi @@ -4562,6 +4562,23 @@ parameter expansion as a special character. The single quotes must match quoted. This is the behavior of @sc{posix} mode through version 4.1. The default Bash behavior remains as in previous versions. +@item complete_fullquote +If set, Bash +quotes all shell metacharacters in filenames and directory names when +performing completion. +If not set, Bash +removes metacharacters such as the dollar sign from the set of +characters that will be quoted in completed filenames +when these metacharacters appear in shell variable references in words to be +completed. +This means that dollar signs in variable names that expand to directories +will not be quoted; +however, any dollar signs appearing in filenames will not be quoted, either. +This is active only when bash is using backslashes to quote completed +filenames. +This variable is set by default, which is the default Bash behavior in +versions through 4.2. + @item direxpand If set, Bash replaces directory names with the results of word expansion when performing diff --git a/doc/version.texi b/doc/version.texi index 38eb8a19..55c1c660 100644 --- a/doc/version.texi +++ b/doc/version.texi @@ -2,9 +2,9 @@ Copyright (C) 1988-2011 Free Software Foundation, Inc. @end ignore -@set LASTCHANGE Fri Sep 2 14:19:16 EDT 2011 +@set LASTCHANGE Thu Sep 8 09:39:10 EDT 2011 @set EDITION 4.2 @set VERSION 4.2 -@set UPDATED 2 September 2011 +@set UPDATED 8 September 2011 @set UPDATED-MONTH September 2011 @@ -312,7 +312,7 @@ extern char *sh_single_quote __P((const char *)); extern char *sh_double_quote __P((const char *)); extern char *sh_mkdoublequoted __P((const char *, int, int)); extern char *sh_un_double_quote __P((char *)); -extern char *sh_backslash_quote __P((char *)); +extern char *sh_backslash_quote __P((char *, const char *)); extern char *sh_backslash_quote_for_double_quotes __P((char *)); extern int sh_contains_shell_metas __P((char *)); diff --git a/lib/sh/shquote.c b/lib/sh/shquote.c index a1e9146b..602ce9b9 100644 --- a/lib/sh/shquote.c +++ b/lib/sh/shquote.c @@ -32,6 +32,50 @@ #include "syntax.h" #include <xmalloc.h> +/* Default set of characters that should be backslash-quoted in strings */ +static const char bstab[256] = + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 0, /* TAB, NL */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + + 1, 1, 1, 0, 1, 0, 1, 1, /* SPACE, !, DQUOTE, DOL, AMP, SQUOTE */ + 1, 1, 1, 0, 1, 0, 0, 0, /* LPAR, RPAR, STAR, COMMA */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 0, 1, 1, /* SEMI, LESSTHAN, GREATERTHAN, QUEST */ + + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 0, /* LBRACK, BS, RBRACK, CARAT */ + + 1, 0, 0, 0, 0, 0, 0, 0, /* BACKQ */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 0, 0, /* LBRACE, BAR, RBRACE */ + + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }; + /* **************************************************************** */ /* */ /* Functions for quoting strings to be re-read as input */ @@ -165,51 +209,24 @@ sh_un_double_quote (string) going through the shell parser, which will protect the internal quoting characters. */ char * -sh_backslash_quote (string) +sh_backslash_quote (string, table) char *string; + char *table; { int c; - char *result, *r, *s; + char *result, *r, *s, *backslash_table; result = (char *)xmalloc (2 * strlen (string) + 1); + backslash_table = table ? table : bstab; for (r = result, s = string; s && (c = *s); s++) { - switch (c) - { - case ' ': case '\t': case '\n': /* IFS white space */ - case '\'': case '"': case '\\': /* quoting chars */ - case '|': case '&': case ';': /* shell metacharacters */ - case '(': case ')': case '<': case '>': - case '!': case '{': case '}': /* reserved words */ - case '*': case '[': case '?': case ']': /* globbing chars */ - case '^': - case '$': case '`': /* expansion chars */ - case ',': /* brace expansion */ - *r++ = '\\'; - *r++ = c; - break; -#if 0 - case '~': /* tilde expansion */ - if (s == string || s[-1] == '=' || s[-1] == ':') - *r++ = '\\'; - *r++ = c; - break; - - case CTLESC: case CTLNUL: /* internal quoting characters */ - *r++ = CTLESC; /* could be '\\'? */ - *r++ = c; - break; -#endif - - case '#': /* comment char */ - if (s == string) - *r++ = '\\'; - /* FALLTHROUGH */ - default: - *r++ = c; - break; - } + + if (backslash_table[c] == 1) + *r++ = '\\'; + else if (c == '#' && s == string) /* comment char */ + *r++ = '\\'; + *r++ = c; } *r = '\0'; diff --git a/po/zh_CN.po b/po/zh_CN.po index a62ce7cb..ab17b93d 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -1,16 +1,18 @@ # Chinese (Simplified) translation for bash package -# Copyright (C) 2010 Free Software Foundation, Inc. +# Copyright (C) 2010, 2011 Free Software Foundation, Inc. # This file is distributed under the same license as the bash package. -# Xin Ye <alyex.ye@gmail.com>, 2010 +# Xin Ye <alyex.ye@gmail.com>, 2010. +# Aron Xu <happyaron.xu@gmail.com>, 2011. # msgid "" msgstr "" -"Project-Id-Version: bash 4.1\n" +"Project-Id-Version: bash 4.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-01-28 22:09-0500\n" -"PO-Revision-Date: 2010-06-29 10:16+0800\n" -"Last-Translator: Alex Ye <alyex.ye@gmail.com>\n" +"PO-Revision-Date: 2011-09-07 10:32+0800\n" +"Last-Translator: Aron Xu <happyaron.xu@gmail.com>\n" "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -18,7 +20,7 @@ msgstr "" #: arrayfunc.c:50 msgid "bad array subscript" -msgstr "坏的数组下标" +msgstr "数组下标不正确" #: arrayfunc.c:313 builtins/declare.def:487 #, c-format @@ -71,7 +73,7 @@ msgstr "`%s': 无效的别名" #: builtins/bind.def:120 builtins/bind.def:123 msgid "line editing not enabled" -msgstr "行编辑未启用" +msgstr "未启用行编辑" #: builtins/bind.def:206 #, c-format @@ -119,7 +121,7 @@ msgid "" msgstr "" "返回当前子例程调用的上下文\n" " \n" -" 不带 EXPR 时, 返回" +" 不带 EXPR 时,返回" #: builtins/cd.def:235 msgid "HOME not set" @@ -245,7 +247,7 @@ msgstr "受限的" #: builtins/common.c:312 #, c-format msgid "%s: not a shell builtin" -msgstr "%s: 不是shell内建" +msgstr "%s: 不是 shell 内建" #: builtins/common.c:321 #, c-format @@ -281,7 +283,7 @@ msgstr "%s: 无效的动作名" #: builtins/complete.def:853 #, c-format msgid "%s: no completion specification" -msgstr "%s: 没有补完声明" +msgstr "%s: 没有补全声明" #: builtins/complete.def:696 msgid "warning: -F option may not work as you expect" @@ -293,7 +295,7 @@ msgstr "警告: -C 选项可能不像您预期的那样工作" #: builtins/complete.def:826 msgid "not currently executing completion function" -msgstr "目前不在执行补完功能" +msgstr "当前未执行补完功能" #: builtins/declare.def:124 msgid "can only be used in a function" @@ -311,7 +313,7 @@ msgstr "%s: 只读函数" #: builtins/declare.def:474 #, c-format msgid "%s: cannot destroy array variables in this way" -msgstr "%s: 无法以这种方式摧毁数组变量" +msgstr "%s: 无法以这种方式销毁数组变量" #: builtins/declare.def:481 #, c-format @@ -335,7 +337,7 @@ msgstr "无法在共享对象 %2$s 中找到 %1$s: %3$s" #: builtins/enable.def:459 #, c-format msgid "%s: not dynamically loaded" -msgstr "%s: 不是动态加载" +msgstr "%s: 未以动态方式加载" #: builtins/enable.def:474 #, c-format @@ -372,11 +374,11 @@ msgstr "%s: 无法执行: %s" #: builtins/exit.def:65 #, c-format msgid "logout\n" -msgstr "登出\n" +msgstr "注销\n" #: builtins/exit.def:88 msgid "not login shell: use `exit'" -msgstr "不是登录shell: 使用 `exit'" +msgstr "不是登录 shell: 使用 `exit'" #: builtins/exit.def:120 #, c-format @@ -408,7 +410,7 @@ msgstr "当前" #: builtins/fg_bg.def:158 #, c-format msgid "job %d started without job control" -msgstr "不带任务控制的情况下启动了任务 %d" +msgstr "在不带任务控制的情况下启动了任务 %d" #: builtins/getopt.c:110 #, c-format @@ -422,7 +424,7 @@ msgstr "%s: 选项需要一个参数 -- %c\n" #: builtins/hash.def:92 msgid "hashing disabled" -msgstr "哈希已禁用" +msgstr "已禁用哈希" #: builtins/hash.def:138 #, c-format @@ -438,15 +440,12 @@ msgstr "命中\t命令\n" #, c-format msgid "Shell commands matching keyword `" msgid_plural "Shell commands matching keywords `" -msgstr[0] "Shell命令匹配关键字`" +msgstr[0] "Shell 命令匹配关键字 `" #: builtins/help.def:168 #, c-format -msgid "" -"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." -msgstr "" -"没有与 `%s' 匹配的帮助主题。尝试 `help help' 或者 `man -k %s' 或者 `info %" -"s'。" +msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgstr "没有与 `%s' 匹配的帮助主题。尝试 `help help' 或 `man -k %s' 或 `info %s'。" #: builtins/help.def:185 #, c-format @@ -464,12 +463,12 @@ msgid "" "A star (*) next to a name means that the command is disabled.\n" "\n" msgstr "" -"这些 shell 命令是内部定义的。请输入 `help' 以获取一个列表.\n" -"输入 `help 名称' 以得到有关函数`名称'的更多信息.\n" -"使用 `info bash' 来获得关于 shell 的更多一般性信息\n" -"使用 `man -k' 或 `info' 来获取不在列表中的命令的更多信息.\n" +"这些 shell 命令是内部定义的。请输入 `help' 以获取一个列表。\n" +"输入 `help 名称' 以得到有关函数`名称'的更多信息。\n" +"使用 `info bash' 来获得关于 shell 的更多一般性信息。\n" +"使用 `man -k' 或 `info' 来获取不在列表中的命令的更多信息。\n" "\n" -"名称旁边的星号 (*) 意味着该命令被禁用.\n" +"名称旁边的星号(*)表示该命令被禁用。\n" "\n" #: builtins/history.def:154 @@ -505,7 +504,7 @@ msgstr "未知错误" #: builtins/let.def:95 builtins/let.def:120 expr.c:552 expr.c:567 msgid "expression expected" -msgstr "期待表达式" +msgstr "需要表达式" #: builtins/mapfile.def:172 #, c-format @@ -551,9 +550,9 @@ msgid "`%s': missing format character" msgstr "`%s': 缺少格式字符" #: builtins/printf.def:448 -#, fuzzy, c-format +#, c-format msgid "`%c': invalid time format specification" -msgstr "%s: 无效的超时声明" +msgstr "`%c': 无效的时间格式声明" #: builtins/printf.def:635 #, c-format @@ -567,12 +566,12 @@ msgstr "警告: %s: %s" #: builtins/printf.def:840 msgid "missing hex digit for \\x" -msgstr "使用了\\x但缺少十六进制数" +msgstr "使用了 \\x 但缺少十六进制数" #: builtins/printf.def:855 -#, fuzzy, c-format +#, c-format msgid "missing unicode digit for \\%c" -msgstr "使用了\\x但缺少十六进制数" +msgstr "使用了 \\%c 但缺少 unicode 数" #: builtins/pushd.def:195 msgid "no other directory" @@ -605,17 +604,15 @@ msgid "" " \twith its position in the stack\n" " \n" " Arguments:\n" -" +N\tDisplays the Nth entry counting from the left of the list shown " -"by\n" +" +N\tDisplays the Nth entry counting from the left of the list shown by\n" " \tdirs when invoked without options, starting with zero.\n" " \n" -" -N\tDisplays the Nth entry counting from the right of the list shown " -"by\n" +" -N\tDisplays the Nth entry counting from the right of the list shown by\n" "\tdirs when invoked without options, starting with zero." msgstr "" -"显示当前记住的目录列表. 目录\n" -" 通过 `pushd' 命令加入这个列表; 您可以\n" -" 使用 `popd' 命令对列表进行遍历.\n" +"显示当前记住的目录列表。 目录\n" +" 通过 `pushd' 命令加入这个列表;您可以\n" +" 使用 `popd' 命令对列表进行遍历。\n" " \n" " 选项:\n" " -c\t删除所有元素以清除目录栈\n" @@ -627,10 +624,10 @@ msgstr "" " \n" " 参数:\n" " +N\t以 dirs 不带选项输出的顺序显示列表从左起第N个条目,\n" -" \t从 0 开始.\n" +" \t从 0 开始。\n" " \n" " -N\t以 dirs 不带选项输出的顺序显示列表从右起第N个项目,\n" -"\t从 0 开始." +"\t从 0 开始。" #: builtins/pushd.def:705 msgid "" @@ -656,27 +653,27 @@ msgid "" " \n" " The `dirs' builtin displays the directory stack." msgstr "" -"在目录栈顶部加入一个目录, 或者轮转\n" -" 目录栈, 是当前工作目录成为新的栈顶\n" -" 不带参数时,交换栈顶的两个目录.\n" +"在目录栈顶部加入一个目录,或者论询\n" +" 目录栈,是当前工作目录成为新的栈顶\n" +" 不带参数时,交换栈顶的两个目录。\n" " \n" " 选项:\n" " -n\t抑制增加栈中目录时通常的改变目录的操作,\n" " \t从而只有栈被操作。\n" " \n" " 参数:\n" -" +N\t轮转栈使得第N个目录(`dirs' 的\n" -" \t输出列表中左起,从0开始)\n" +" +N\t轮转栈使得第N个目录(`dirs' 的\n" +" \t输出列表中左起,从0开始)\n" " \t升至栈顶。\n" " \n" -" -N\t轮转栈使得第N个目录(`dirs' 的\n" -" \t输出列表中右起,从0开始)\n" +" -N\t轮转栈使得第N个目录(`dirs' 的\n" +" \t输出列表中右起,从0开始)\n" " \t升至栈顶\n" " \n" " dir\t添加目录至栈顶,并\n" " \t使其成为新的当前工作目录。\n" " \n" -" `dirs' 内嵌命令显示目录栈." +" `dirs' 内建命令显示目录栈." #: builtins/pushd.def:730 msgid "" @@ -708,13 +705,13 @@ msgstr "" " 参数:\n" " +N\t从 `dirs' 输出的列表中,\n" " \t删除左起第N个条目,计数从0开始。例如:`popd +0'\n" -" \t删除第一个目录, `popd +1' 删除第二个。\n" +" \t删除第一个目录,`popd +1' 删除第二个。\n" " \n" " -N\t从 `dirs' 输出的列表中,\n" " \t删除右起第N个条目,计数从0开始,例如:`popd -0'\n" -" \t删除最后一个条目, `popd -1' 删除倒数第二个。\n" +" \t删除最后一个条目,`popd -1' 删除倒数第二个。\n" " \n" -" `dirs' 内嵌变量显示目录栈。" +" `dirs' 内建变量显示目录栈。" #: builtins/read.def:252 #, c-format @@ -728,21 +725,21 @@ msgstr "读错误: %d: %s" #: builtins/return.def:73 msgid "can only `return' from a function or sourced script" -msgstr "只能从函数或者源脚本`返回'" +msgstr "只能从函数或者源脚本返回(`return')" #: builtins/set.def:771 msgid "cannot simultaneously unset a function and a variable" -msgstr "无法同时反设定一个函数和一个变量" +msgstr "无法同时取消设定一个函数和一个变量" #: builtins/set.def:808 #, c-format msgid "%s: cannot unset" -msgstr "%s: 无法反设定" +msgstr "%s: 无法取消设定" #: builtins/set.def:815 #, c-format msgid "%s: cannot unset: readonly %s" -msgstr "%s: 无法反设定: 只读 %s" +msgstr "%s: 无法取消设定: 只读 %s" #: builtins/set.def:826 #, c-format @@ -760,7 +757,7 @@ msgstr "位移计数" #: builtins/shopt.def:264 msgid "cannot set and unset shell options simultaneously" -msgstr "无法同时设定和反设定 shell 选项" +msgstr "无法同时设定和取消设定 shell 选项" #: builtins/shopt.def:329 #, c-format @@ -774,7 +771,7 @@ msgstr "需要文件名参数" #: builtins/source.def:155 #, c-format msgid "%s: file not found" -msgstr "%s: 没有找到文件" +msgstr "%s: 文件未找到" #: builtins/suspend.def:101 msgid "cannot suspend" @@ -782,7 +779,7 @@ msgstr "无法挂起" #: builtins/suspend.def:111 msgid "cannot suspend a login shell" -msgstr "无法挂起一个登录shell" +msgstr "无法挂起一个登录 shell" #: builtins/type.def:234 #, c-format @@ -802,7 +799,7 @@ msgstr "%s 是函数\n" #: builtins/type.def:296 #, c-format msgid "%s is a shell builtin\n" -msgstr "%s 是 shell 内嵌\n" +msgstr "%s 是 shell 内建\n" #: builtins/type.def:317 builtins/type.def:391 #, c-format @@ -812,7 +809,7 @@ msgstr "%s 是 %s\n" #: builtins/type.def:337 #, c-format msgid "%s is hashed (%s)\n" -msgstr "%s 已被哈希 (%s)\n" +msgstr "%s 已经哈希操作(%s)\n" #: builtins/ulimit.def:376 #, c-format @@ -822,7 +819,7 @@ msgstr "%s: 无效的 limit 参数" #: builtins/ulimit.def:402 #, c-format msgid "`%c': bad command" -msgstr "`%c': 坏的命令" +msgstr "`%c': 命令错误" #: builtins/ulimit.def:431 #, c-format @@ -864,7 +861,7 @@ msgstr "上一个命令: %s\n" #: error.c:173 #, c-format msgid "Aborting..." -msgstr "放弃..." +msgstr "中止..." #: error.c:406 msgid "unknown command error" @@ -872,25 +869,25 @@ msgstr "未知的命令错误" #: error.c:407 msgid "bad command type" -msgstr "坏的命令类型" +msgstr "错误的命令类型" #: error.c:408 msgid "bad connector" -msgstr "坏的条件连接符" +msgstr "错误的条件连接符" #: error.c:409 msgid "bad jump" -msgstr "坏的跳转" +msgstr "错误的跳转" #: error.c:447 #, c-format msgid "%s: unbound variable" -msgstr "%s: 为绑定变量" +msgstr "%s: 未绑定的变量" #: eval.c:181 #, c-format msgid "\atimed out waiting for input: auto-logout\n" -msgstr "\a 等待输入超时:自动登出\n" +msgstr "\a 等待输入超时:自动注销\n" #: execute_cmd.c:504 #, c-format @@ -917,19 +914,19 @@ msgid "%s: command not found" msgstr "%s: 未找到命令" #: execute_cmd.c:4959 -#, fuzzy, c-format +#, c-format msgid "%s: %s" -msgstr "%s 是 %s\n" +msgstr "%s: %s" #: execute_cmd.c:4995 #, c-format msgid "%s: %s: bad interpreter" -msgstr "%s: %s: 坏的解释器" +msgstr "%s: %s: 解释器错误" #: execute_cmd.c:5144 #, c-format msgid "cannot duplicate fd %d to fd %d" -msgstr "无法复制文件描述符 %d 到 文件描述符 %d" +msgstr "无法复制文件描述符 %d 到文件描述符 %d" #: expr.c:256 msgid "expression recursion level exceeded" @@ -953,11 +950,11 @@ msgstr "除0" #: expr.c:517 msgid "bug: bad expassign token" -msgstr "错误:坏的表达式赋值符号" +msgstr "错误:表达式赋值符号错误" #: expr.c:564 msgid "`:' expected for conditional expression" -msgstr "条件表达式期待 `:'" +msgstr "条件表达式需要 `:'" #: expr.c:832 msgid "exponent less than 0" @@ -973,7 +970,7 @@ msgstr "缺少 `)'" #: expr.c:959 expr.c:1282 msgid "syntax error: operand expected" -msgstr "语法错误: 期待操作数" +msgstr "语法错误: 需要操作数" #: expr.c:1284 msgid "syntax error: invalid arithmetic operator" @@ -982,7 +979,7 @@ msgstr "语法错误: 无效的算术运算符" #: expr.c:1308 #, c-format msgid "%s%s%s: %s (error token is \"%s\")" -msgstr "%s%s%s: %s (错误符号是 \"%s\")" +msgstr "%s%s%s: %s (错误符号是 \"%s\")" #: expr.c:1366 msgid "invalid arithmetic base" @@ -1052,7 +1049,7 @@ msgstr "信号 %d" #: jobs.c:1459 jobs.c:1484 msgid "Done" -msgstr "完成" +msgstr "已完成" #: jobs.c:1464 siglist.c:123 msgid "Stopped" @@ -1061,7 +1058,7 @@ msgstr "已停止" #: jobs.c:1468 #, c-format msgid "Stopped(%s)" -msgstr "已停止 (%s)" +msgstr "已停止(%s)" #: jobs.c:1472 msgid "Running" @@ -1070,7 +1067,7 @@ msgstr "运行中" #: jobs.c:1486 #, c-format msgid "Done(%d)" -msgstr "完成 (%d)" +msgstr "已完成(%d)" #: jobs.c:1488 #, c-format @@ -1084,12 +1081,12 @@ msgstr "未知状态" #: jobs.c:1578 #, c-format msgid "(core dumped) " -msgstr "(吐核)" +msgstr "(核心已转储)" #: jobs.c:1597 #, c-format msgid " (wd: %s)" -msgstr "(工作目录:%s)" +msgstr " (工作目录: %s)" #: jobs.c:1805 #, c-format @@ -1133,7 +1130,7 @@ msgstr "%s: 行 %d: " #: jobs.c:3552 nojobs.c:814 #, c-format msgid " (core dumped)" -msgstr "(吐核)" +msgstr " (核心已转储)" #: jobs.c:3564 jobs.c:3577 #, c-format @@ -1155,7 +1152,7 @@ msgstr "initialize_job_control: setpgid" #: jobs.c:3707 #, c-format msgid "cannot set terminal process group (%d)" -msgstr "无法设定终端进程组 (%d)" +msgstr "无法设定终端进程组(%d)" #: jobs.c:3712 msgid "no job control in this shell" @@ -1193,11 +1190,11 @@ msgstr "free: 用未分配的块作为参数被调用" #: lib/malloc/malloc.c:896 msgid "free: underflow detected; mh_nbytes out of range" -msgstr "free: 检测到下溢; mh_nbytes越界" +msgstr "free: 检测到下溢;mh_nbytes 越界" #: lib/malloc/malloc.c:902 msgid "free: start and end chunk sizes differ" -msgstr "free: 起始和终结块大小不一致" +msgstr "free: 其实和末尾块大小不一致" #: lib/malloc/malloc.c:1001 msgid "realloc: called with unallocated block argument" @@ -1205,26 +1202,26 @@ msgstr "realloc: 用未分配的块作为参数被调用" #: lib/malloc/malloc.c:1016 msgid "realloc: underflow detected; mh_nbytes out of range" -msgstr "realloc: 检测到下溢; mh_nbytes越界" +msgstr "realloc: 检测到下溢;mh_nbytes 越界" #: lib/malloc/malloc.c:1022 msgid "realloc: start and end chunk sizes differ" -msgstr "realloc: 起始和终结块大小不一致" +msgstr "realloc: 其实和末尾块大小不一致" #: lib/malloc/table.c:177 #, c-format msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" -msgstr "register_alloc: 分配表已经充满了 FIND_ALLOC?\n" +msgstr "register_alloc: 分配表已经充满了 FIND_ALLOC?\n" #: lib/malloc/table.c:184 #, c-format msgid "register_alloc: %p already in table as allocated?\n" -msgstr "register_alloc: %p 在表中显示为已分配?\n" +msgstr "register_alloc: %p 在表中显示为已分配?\n" #: lib/malloc/table.c:220 #, c-format msgid "register_free: %p already in table as free?\n" -msgstr "register_free: %p 在表中显示为已释放?\n" +msgstr "register_free: %p 在表中显示为已释放?\n" #: lib/sh/fmtulong.c:101 msgid "invalid base" @@ -1243,7 +1240,7 @@ msgstr "%s: 无效的服务" #: lib/sh/netopen.c:306 #, c-format msgid "%s: bad network path specification" -msgstr "%s: 坏的网络路径声明" +msgstr "%s: 错误的网络路径声明" #: lib/sh/netopen.c:346 msgid "network operations not supported" @@ -1288,7 +1285,7 @@ msgstr "语法错误: 需要算数表达式" #: make_cmd.c:325 msgid "syntax error: `;' unexpected" -msgstr "语法错误: 期待 `;'" +msgstr "语法错误: 需要 `;'" #: make_cmd.c:326 #, c-format @@ -1298,7 +1295,7 @@ msgstr "语法错误: `((%s))'" #: make_cmd.c:575 #, c-format msgid "make_here_document: bad instruction type %d" -msgstr "make_here_document: 坏的指令类型 %d" +msgstr "make_here_document: 错误的指令类型 %d" #: make_cmd.c:659 #, c-format @@ -1331,11 +1328,11 @@ msgstr "条件表达式中有语法错误" #: parse.y:4112 #, c-format msgid "unexpected token `%s', expected `)'" -msgstr "未预期的符号 `%s' ,期待 `)'" +msgstr "未预期的符号 `%s' ,需要 `)'" #: parse.y:4116 msgid "expected `)'" -msgstr "期待 `)'" +msgstr "需要 `)'" #: parse.y:4144 #, c-format @@ -1349,11 +1346,11 @@ msgstr "一元条件运算符使用了未预期的参数" #: parse.y:4194 #, c-format msgid "unexpected token `%s', conditional binary operator expected" -msgstr "未预期的符号 `%s',期待二元条件运算符" +msgstr "未预期的符号 `%s',需要二元条件运算符" #: parse.y:4198 msgid "conditional binary operator expected" -msgstr "期待二元条件运算符" +msgstr "需要二元条件运算符" #: parse.y:4220 #, c-format @@ -1419,7 +1416,7 @@ msgstr "progcomp_insert: %s: 空的补完声明" #: print_cmd.c:296 #, c-format msgid "print_command: bad connector `%d'" -msgstr "print_command: 坏的条件连接符 `%d'" +msgstr "print_command: 错误的条件连接符 `%d'" #: print_cmd.c:368 #, c-format @@ -1533,7 +1530,7 @@ msgstr "请输入`%s -c \"help set\"' 以获得关于 shell 选项的更多信 #: shell.c:1825 #, c-format msgid "Type `%s -c help' for more information about shell builtin commands.\n" -msgstr "请输入 `%s -c help' 以获得关于 shell 内嵌命令的更多信息.\n" +msgstr "请输入 `%s -c help' 以获得关于 shell 内建命令的更多信息.\n" #: shell.c:1826 #, c-format @@ -1595,11 +1592,11 @@ msgstr "段错误" #: siglist.c:99 msgid "Bad system call" -msgstr "坏的系统调用" +msgstr "错误的系统调用" #: siglist.c:103 msgid "Broken pipe" -msgstr "破裂的管道" +msgstr "管道破裂" #: siglist.c:107 msgid "Alarm clock" @@ -1611,7 +1608,7 @@ msgstr "已终止" #: siglist.c:115 msgid "Urgent IO condition" -msgstr "紧急输入输出情形" +msgstr "紧急 I/O 状况" #: siglist.c:119 msgid "Stopped (signal)" @@ -1627,15 +1624,15 @@ msgstr "子进程已死或者停止" #: siglist.c:139 msgid "Stopped (tty input)" -msgstr "已停止 (tty 输入)" +msgstr "已停止(tty 输入)" #: siglist.c:143 msgid "Stopped (tty output)" -msgstr "已停止 (tty 输出)" +msgstr "已停止(tty 输出)" #: siglist.c:147 msgid "I/O ready" -msgstr "输入输出准备完毕" +msgstr "I/O 就绪" #: siglist.c:151 msgid "CPU limit" @@ -1650,12 +1647,13 @@ msgid "Alarm (virtual)" msgstr "报警(虚拟)" #: siglist.c:163 +#, fuzzy msgid "Alarm (profile)" msgstr "报警(总结)" #: siglist.c:167 msgid "Window changed" -msgstr "窗口改变" +msgstr "窗口已改变" #: siglist.c:171 msgid "Record lock" @@ -1663,15 +1661,15 @@ msgstr "记录锁" #: siglist.c:175 msgid "User signal 1" -msgstr "用户定义信号1" +msgstr "用户信号1" #: siglist.c:179 msgid "User signal 2" -msgstr "用户定义信号2" +msgstr "用户信号2" #: siglist.c:183 msgid "HFT input data pending" -msgstr "HFT输入数据挂起" +msgstr "HFT 待输入数据" #: siglist.c:187 msgid "power failure imminent" @@ -1683,27 +1681,27 @@ msgstr "系统即将崩溃" #: siglist.c:195 msgid "migrate process to another CPU" -msgstr "迁移进程至另一个CPU" +msgstr "迁移进程至另一个 CPU" #: siglist.c:199 msgid "programming error" -msgstr "程序错误" +msgstr "编程错误" #: siglist.c:203 msgid "HFT monitor mode granted" -msgstr "HFT显示器模式授与" +msgstr "已授予 HFT 监视模式" #: siglist.c:207 msgid "HFT monitor mode retracted" -msgstr "HFT显示器模式撤销" +msgstr "已撤销 HFT 监视模式" #: siglist.c:211 msgid "HFT sound sequence has completed" -msgstr "HFT声音序列已完成" +msgstr "已完成 HFT 声音序列" #: siglist.c:215 msgid "Information request" -msgstr "状态请求" +msgstr "信息请求" #: siglist.c:223 msgid "Unknown Signal #" @@ -1717,7 +1715,7 @@ msgstr "未知信号 #%d" #: subst.c:1333 subst.c:1502 #, c-format msgid "bad substitution: no closing `%s' in %s" -msgstr "坏的替换:在 %2$s 中没有闭合的 `%1$s'" +msgstr "错误的替换: 在 %2$s 中没有闭合的 `%1$s'" #: subst.c:2795 #, c-format @@ -1772,7 +1770,7 @@ msgstr "%s: 子串表达式 < 0" #: subst.c:7271 #, c-format msgid "%s: bad substitution" -msgstr "%s: 坏的替换" +msgstr "%s: 错误的替换" #: subst.c:7347 #, c-format @@ -1780,48 +1778,46 @@ msgid "$%s: cannot assign in this way" msgstr "$%s: 无法这样赋值" #: subst.c:7684 -msgid "" -"future versions of the shell will force evaluation as an arithmetic " -"substitution" +msgid "future versions of the shell will force evaluation as an arithmetic substitution" msgstr "未来版本的 shell 会强制估值为算数替换" #: subst.c:8149 #, c-format msgid "bad substitution: no closing \"`\" in %s" -msgstr "坏的替换:在 %s 中没有闭合的 \"`\"" +msgstr "错误的替换: 在 %s 中没有闭合的 \"`\"" #: subst.c:9036 #, c-format msgid "no match: %s" -msgstr "没有匹配: %s" +msgstr "无匹配: %s" #: test.c:146 msgid "argument expected" -msgstr "期待参数" +msgstr "需要参数" #: test.c:155 #, c-format msgid "%s: integer expression expected" -msgstr "%s: 期待整数表达式" +msgstr "%s: 需要整数表达式" #: test.c:263 msgid "`)' expected" -msgstr "期待 `)'" +msgstr "需要 `)'" #: test.c:265 #, c-format msgid "`)' expected, found %s" -msgstr "期待`)' , 得到 %s" +msgstr "需要`)',得到 %s" #: test.c:280 test.c:698 test.c:701 #, c-format msgid "%s: unary operator expected" -msgstr "%s: 期待一元表达式" +msgstr "%s: 需要一元表达式" #: test.c:449 test.c:741 #, c-format msgid "%s: binary operator expected" -msgstr "%s: 期待二元表达式" +msgstr "%s: 需要二元表达式" #: test.c:816 msgid "missing `]'" @@ -1829,23 +1825,22 @@ msgstr "缺少 `]'" #: trap.c:207 msgid "invalid signal number" -msgstr "无效的信号编号" +msgstr "无效的信号数" #: trap.c:337 #, c-format msgid "run_pending_traps: bad value in trap_list[%d]: %p" -msgstr "run_pending_traps: trap_list[%d] 中的坏值: %p" +msgstr "run_pending_traps: trap_list[%d] 中的错误值: %p" #: trap.c:341 #, c-format -msgid "" -"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" -msgstr "run_pending_traps: 信号处理器是 SIG_DFL, 重新发送 %d (%s) 给自己" +msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgstr "run_pending_traps: 信号处理器是 SIG_DFL,重新发送 %d (%s) 给自己" #: trap.c:393 #, c-format msgid "trap_handler: bad signal %d" -msgstr "trap_handler: 坏的信号 %d" +msgstr "trap_handler: 错误的信号 %d" #: variables.c:363 #, c-format @@ -1855,7 +1850,7 @@ msgstr "`%s' 函数定义导入错误" #: variables.c:755 #, c-format msgid "shell level (%d) too high, resetting to 1" -msgstr "shell 层次 (%d) 太高, 重置为 1" +msgstr "shell 层次 (%d) 太高,重置为 1" #: variables.c:1932 msgid "make_local_variable: no function context at current scope" @@ -1903,51 +1898,42 @@ msgid "%s: %s: invalid value for trace file descriptor" msgstr "%s: %s: 追踪文件描述符的值无效" #: version.c:46 -#, fuzzy msgid "Copyright (C) 2011 Free Software Foundation, Inc." -msgstr "自由软件基金会 版权所有 2009" +msgstr "版权所有 (C) 2011 自由软件基金会" #: version.c:47 -msgid "" -"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." -"html>\n" -msgstr "" -"许可证 GPLv3+: GNU GPL 许可证版本3或者更高 <http://gnu.org/licenses/gpl." -"html>\n" +msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" +msgstr "许可证 GPLv3+: GNU GPL 许可证第三版或者更新版本 <http://gnu.org/licenses/gpl.html>\n" #: version.c:86 version2.c:83 #, c-format msgid "GNU bash, version %s (%s)\n" -msgstr "GNU bash, 版本 %s (%s)\n" +msgstr "GNU bash,版本 %s (%s)\n" #: version.c:91 version2.c:88 #, c-format msgid "This is free software; you are free to change and redistribute it.\n" -msgstr "这是自由软件,您可以自由地更改和重新发布。\n" +msgstr "本软件是自由软件,您可以自由地更改和重新发布。\n" #: version.c:92 version2.c:89 #, c-format msgid "There is NO WARRANTY, to the extent permitted by law.\n" -msgstr "在法律允许的范围内没有担保.\n" +msgstr "在法律许可的情况下特此明示,本软件不提供任何担保。\n" #: version2.c:86 #, c-format msgid "Copyright (C) 2009 Free Software Foundation, Inc.\n" -msgstr "自由软件基金会 版权所有 2009\n" +msgstr "版权所有 (C) 2009 自由软件基金会\n" #: version2.c:87 #, c-format -msgid "" -"License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl." -"html>\n" -msgstr "" -"许可证 GPLv2+: GNU GPL 许可证版本2或者更高 <http://gnu.org/licenses/gpl." -"html>\n" +msgid "License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>\n" +msgstr "许可证 GPLv2+: GNU GPL 许可证第二版或者更新版本 <http://gnu.org/licenses/gpl.html>\n" #: xmalloc.c:91 #, c-format msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)" -msgstr "%s: 无法分配 %lu 字节 (%lu 字节已分配)" +msgstr "%s: 无法分配 %lu 字节(已分配 %lu 字节)" #: xmalloc.c:93 #, c-format @@ -1957,7 +1943,7 @@ msgstr "%s: 无法分配 %lu 字节" #: xmalloc.c:163 #, c-format msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" -msgstr "%s: %s:%d: 无法分配 %lu 字节 (%lu 字节已分配)" +msgstr "%s: %s:%d: 无法分配 %lu 字节(已分配 %lu 字节)" #: xmalloc.c:165 #, c-format @@ -1973,12 +1959,8 @@ msgid "unalias [-a] name [name ...]" msgstr "unalias [-a] 名称 [名称 ...]" #: builtins.c:51 -msgid "" -"bind [-lpvsPVS] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-" -"x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "" -"bind [-lpvsPVS] [-m 键映射] [-f 文件名] [-q 名称] [-u 名称] [-r 键序列] [-x " -"键序列:shell命令] [键序列:行读取函数 或 行读取命令]" +msgid "bind [-lpvsPVS] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" +msgstr "bind [-lpvsPVS] [-m 键映射] [-f 文件名] [-q 名称] [-u 名称] [-r 键序列] [-x 键序列:shell命令] [键序列:行读取函数 或 行读取命令]" #: builtins.c:54 msgid "break [n]" @@ -1990,16 +1972,15 @@ msgstr "continue [n]" #: builtins.c:58 msgid "builtin [shell-builtin [arg ...]]" -msgstr "builtin [shell 内嵌 [参数 ...]]" +msgstr "builtin [shell 内建 [参数 ...]]" #: builtins.c:61 msgid "caller [expr]" msgstr "caller [表达式]" #: builtins.c:64 -#, fuzzy msgid "cd [-L|[-P [-e]]] [dir]" -msgstr "cd [-L|-P] [目录]" +msgstr "cd [-L|[-P [-e]]] [目录]" #: builtins.c:66 msgid "pwd [-LP]" @@ -2011,25 +1992,23 @@ msgstr ":" #: builtins.c:70 msgid "true" -msgstr "真" +msgstr "true" #: builtins.c:72 msgid "false" -msgstr "伪" +msgstr "false" #: builtins.c:74 msgid "command [-pVv] command [arg ...]" msgstr "command [-pVv] 命令 [参数 ...]" #: builtins.c:76 -#, fuzzy msgid "declare [-aAfFgilrtux] [-p] [name[=value] ...]" -msgstr "declare [-aAfFilrtux] [-p] [名称[=值] ...]" +msgstr "declare [-aAfFgilrtux] [-p] [名称[=值] ...]" #: builtins.c:78 -#, fuzzy msgid "typeset [-aAfFgilrtux] [-p] name[=value] ..." -msgstr "typeset [-aAfFilrtux] [-p] 名称[=值] ..." +msgstr "typeset [-aAfFgilrtux] [-p] 名称[=值] ..." #: builtins.c:80 msgid "local [option] name[=value] ..." @@ -2088,12 +2067,8 @@ msgid "help [-dms] [pattern ...]" msgstr "help [-dms] [模式 ...]" #: builtins.c:121 -msgid "" -"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg " -"[arg...]" -msgstr "" -"history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 history -ps 参数 " -"[参数...]" +msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" +msgstr "history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 history -ps 参数 [参数...]" #: builtins.c:125 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2104,33 +2079,24 @@ msgid "disown [-h] [-ar] [jobspec ...]" msgstr "disown [-h] [-ar] [任务声明 ...]" #: builtins.c:132 -msgid "" -"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l " -"[sigspec]" -msgstr "" -"kill [-s 信号声明 | -n 信号编号 | -信号声明] 进程号 | 任务声明 ... 或 kill -" -"l [信号声明]" +msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]" +msgstr "kill [-s 信号声明 | -n 信号编号 | -信号声明] 进程号 | 任务声明 ... 或 kill -l [信号声明]" #: builtins.c:134 msgid "let arg [arg ...]" msgstr "let 参数 [参数 ...]" #: builtins.c:136 -msgid "" -"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p " -"prompt] [-t timeout] [-u fd] [name ...]" -msgstr "" -"read [-ers] [-a 数组] [-d 分隔符] [-i 缓冲区文字] [-n 读取字符数] [-N 读取字" -"符数] [-p 提示符] [-t 超时] [-u 文件描述符] [名称 ...]" +msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" +msgstr "read [-ers] [-a 数组] [-d 分隔符] [-i 缓冲区文字] [-n 读取字符数] [-N 读取字符数] [-p 提示符] [-t 超时] [-u 文件描述符] [名称 ...]" #: builtins.c:138 msgid "return [n]" msgstr "return [n]" #: builtins.c:140 -#, fuzzy msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]" -msgstr "set [--abefhkmnptuvxBCHP] [-o 选项名] [参数 ...]" +msgstr "set [--abefhkmnptuvxBCHP] [-o 选项名] [--] [参数 ...]" #: builtins.c:142 msgid "unset [-f] [-v] [name ...]" @@ -2141,9 +2107,8 @@ msgid "export [-fn] [name[=value] ...] or export -p" msgstr "export [-fn] [名称[=值] ...] 或 export -p" #: builtins.c:146 -#, fuzzy msgid "readonly [-aAf] [name[=value] ...] or readonly -p" -msgstr "readonly [-af] [名称[=值] ...] 或 readonly -p" +msgstr "readonly [-aAf] [名称[=值] ...] 或 readonly -p" #: builtins.c:148 msgid "shift [n]" @@ -2218,9 +2183,7 @@ msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" msgstr "case 词 in [模式 [| 模式]...) 命令 ;;]... esac" #: builtins.c:192 -msgid "" -"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else " -"COMMANDS; ] fi" +msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi" msgstr "if 命令; then 命令; [ elif 命令; then 命令; ]... [ else 命令; ] fi" #: builtins.c:194 @@ -2280,41 +2243,24 @@ msgid "printf [-v var] format [arguments]" msgstr "printf [-v var] 格式 [参数]" #: builtins.c:229 -msgid "" -"complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat] [-" -"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S " -"suffix] [name ...]" -msgstr "" -"complete [-abcdefgjksuv] [-pr] [-DE] [-o 选项] [-A 动作] [-G 全局模式] [-W 词" -"语列表] [-F 函数] [-C 命令] [-X 过滤模式] [-P 前缀] [-S 后缀] [名称 ...]" +msgid "complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]" +msgstr "complete [-abcdefgjksuv] [-pr] [-DE] [-o 选项] [-A 动作] [-G 全局模式] [-W 词语列表] [-F 函数] [-C 命令] [-X 过滤模式] [-P 前缀] [-S 后缀] [名称 ...]" #: builtins.c:233 -msgid "" -"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] " -"[-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" -msgstr "" -"compgen [-abcdefgjksuv] [-o 选项] [-A 动作] [-G 全局模式] [-W 词语列表] [-" -"F 函数] [-C 命令] [-X 过滤模式] [-P 前缀] [-S 后缀] [词语]" +msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" +msgstr "compgen [-abcdefgjksuv] [-o 选项] [-A 动作] [-G 全局模式] [-W 词语列表] [-F 函数] [-C 命令] [-X 过滤模式] [-P 前缀] [-S 后缀] [词语]" #: builtins.c:237 msgid "compopt [-o|+o option] [-DE] [name ...]" msgstr "compopt [-o|+o 选项] [-DE] [名称 ...]" #: builtins.c:240 -msgid "" -"mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c " -"quantum] [array]" -msgstr "" -"mapfile [-n 计数] [-O 起始序号] [-s 计数] [-t] [-u fd] [-C 回调] [-c 量子] " -"[数组]" +msgid "mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" +msgstr "mapfile [-n 计数] [-O 起始序号] [-s 计数] [-t] [-u fd] [-C 回调] [-c 量子] [数组]" #: builtins.c:242 -msgid "" -"readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c " -"quantum] [array]" -msgstr "" -"readarray [-n 计数] [-O 起始序号] [-s 计数] [-t] [-u fd] [-C 回调] [-c 量子] " -"[数组]" +msgid "readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]" +msgstr "readarray [-n 计数] [-O 起始序号] [-s 计数] [-t] [-u fd] [-C 回调] [-c 量子] [数组]" #: builtins.c:254 msgid "" @@ -2331,13 +2277,12 @@ msgid "" " -p\tPrint all defined aliases in a reusable format\n" " \n" " Exit Status:\n" -" alias returns true unless a NAME is supplied for which no alias has " -"been\n" +" alias returns true unless a NAME is supplied for which no alias has been\n" " defined." msgstr "" "定义或显示别名。\n" " \n" -" 不带参数时, `alias' 以可重用的格式\n" +" 不带参数时,`alias' 以可重用的格式\n" " `alias 名称=值'在标准输出设备上打印别名列表。\n" " \n" " 否则,对于每个给定值的名称定义一个别名。\n" @@ -2360,10 +2305,10 @@ msgid "" " \n" " Return success unless a NAME is not an existing alias." msgstr "" -"从别名定义列表中删除每一个“名字‘。\n" +"从别名定义列表中删除每一个“名字”。\n" " \n" " 选项:\n" -" -a\t删除所有的别名定义.\n" +" -a\t删除所有的别名定义。\n" " \n" " 返回成功,除非“名字“不是一个已存在的别名。" @@ -2379,24 +2324,20 @@ msgid "" " Options:\n" " -m keymap Use KEYMAP as the keymap for the duration of this\n" " command. Acceptable keymap names are emacs,\n" -" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-" -"move,\n" +" emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n" " vi-command, and vi-insert.\n" " -l List names of functions.\n" " -P List function names and bindings.\n" " -p List functions and bindings in a form that can be\n" " reused as input.\n" -" -S List key sequences that invoke macros and their " -"values\n" -" -s List key sequences that invoke macros and their " -"values\n" +" -S List key sequences that invoke macros and their values\n" +" -s List key sequences that invoke macros and their values\n" " in a form that can be reused as input.\n" " -V List variable names and values\n" " -v List variable names and values in a form that can\n" " be reused as input.\n" " -q function-name Query about which keys invoke the named function.\n" -" -u function-name Unbind all keys which are bound to the named " -"function.\n" +" -u function-name Unbind all keys which are bound to the named function.\n" " -r keyseq Remove the binding for KEYSEQ.\n" " -f filename Read key bindings from FILENAME.\n" " -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n" @@ -2449,7 +2390,7 @@ msgid "" msgstr "" "退出 for、while、或 until 循环\n" " \n" -" 退出一个 FOR、WHILE 或 UNTIL 循环。如果指定了N,则打破N重\n" +" 退出一个 FOR、WHILE 或 UNTIL 循环。如果指定了N,则跳出N重\n" " 循环\n" " \n" " 退出状态:\n" @@ -2479,22 +2420,20 @@ msgid "" " \n" " Execute SHELL-BUILTIN with arguments ARGs without performing command\n" " lookup. This is useful when you wish to reimplement a shell builtin\n" -" as a shell function, but need to execute the builtin within the " -"function.\n" +" as a shell function, but need to execute the builtin within the function.\n" " \n" " Exit Status:\n" " Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n" " not a shell builtin.." msgstr "" -"执行 shell 内嵌。\n" +"执行 shell 内建。\n" " \n" -" 带参数 ARGs 执行 SHELL-BUILTIN 内嵌,并且不做命令查询\n" -" 在希望以 shell 函数的形式来重新实现 shell 内嵌,\n" -" 并且希望在函数之内执行该 shell 内嵌的情况下有用处。\n" +" 带参数 ARGs 执行 SHELL-BUILTIN 内建,并且不做命令查询\n" +" 在希望以 shell 函数的形式来重新实现 shell 内建,\n" +" 并且希望在函数之内执行该 shell 内建的情况下有用处。\n" " \n" " 退出状态:\n" -" 以 SHELL-BUILTIN 内嵌的退出状态为准,或者如果 SHELL-BUILTIN不是一个 " -"shell 内嵌时\n" +" 以 SHELL-BUILTIN 内建的退出状态为准,或者如果 SHELL-BUILTIN不是一个 shell 内建时\n" " 为假。." #: builtins.c:365 @@ -2526,26 +2465,19 @@ msgstr "" " 果为0。" #: builtins.c:383 -#, fuzzy msgid "" "Change the shell working directory.\n" " \n" -" Change the current directory to DIR. The default DIR is the value of " -"the\n" +" Change the current directory to DIR. The default DIR is the value of the\n" " HOME shell variable.\n" " \n" -" The variable CDPATH defines the search path for the directory " -"containing\n" -" DIR. Alternative directory names in CDPATH are separated by a colon " -"(:).\n" -" A null directory name is the same as the current directory. If DIR " -"begins\n" +" The variable CDPATH defines the search path for the directory containing\n" +" DIR. Alternative directory names in CDPATH are separated by a colon (:).\n" +" A null directory name is the same as the current directory. If DIR begins\n" " with a slash (/), then CDPATH is not used.\n" " \n" -" If the directory is not found, and the shell option `cdable_vars' is " -"set,\n" -" the word is assumed to be a variable name. If that variable has a " -"value,\n" +" If the directory is not found, and the shell option `cdable_vars' is set,\n" +" the word is assumed to be a variable name. If that variable has a value,\n" " its value is used for DIR.\n" " \n" " Options:\n" @@ -2558,8 +2490,7 @@ msgid "" " The default is to follow symbolic links, as if `-L' were specified.\n" " \n" " Exit Status:\n" -" Returns 0 if the directory is changed, and if $PWD is set successfully " -"when\n" +" Returns 0 if the directory is changed, and if $PWD is set successfully when\n" " -P is used; non-zero otherwise." msgstr "" "改变 shell 工作目录。\n" @@ -2570,7 +2501,7 @@ msgstr "" " 变量 CDPATH 定义了含有 DIR 的目录的搜索路径。\n" " CDPATH 变量中不同的目录名称由分号(:)分隔。\n" " 一个空的目录名称和当前目录是一样的。如果 DIR 变量由\n" -" 斜杠 (/) 打头,则 CDPATH 变量不会被使用。\n" +" 斜杠(/) 打头,则 CDPATH 变量不会被使用。\n" " \n" " 如果路径找不到,并且 shell 选项`cdable_vars' 被设定,\n" " 则参数词被假定为一个变量名。如果该变量有值,则它的值\n" @@ -2579,12 +2510,13 @@ msgstr "" " 选项:\n" " -L\t强制跟随符号链接。\n" " -P\t使用物理目录结构而不跟随符号链接\n" -" \n" +" -e\t如果使用了 -P 参数,但不能成功确定当前工作目录时,\n" +" \t返回非零的返回值。 \n" " \n" " 默认情况下跟随符号链接,如同指定 `-L'。\n" " \n" " 退出状态:\n" -" 如果目录改变则返回0,否则非零。" +" 如果目录改变,或在使用 -P 选项时 $PWD 修改成功时返回0,否则非零。" #: builtins.c:414 msgid "" @@ -2659,8 +2591,7 @@ msgid "" "Execute a simple command or display information about commands.\n" " \n" " Runs COMMAND with ARGS suppressing shell function lookup, or display\n" -" information about the specified COMMANDs. Can be used to invoke " -"commands\n" +" information about the specified COMMANDs. Can be used to invoke commands\n" " on disk when a function with the same name exists.\n" " \n" " Options:\n" @@ -2681,7 +2612,7 @@ msgstr "" " 选项:\n" " -p\t使用 PATH 变量的一个默认值以确保所有的标准工具\n" " \t都能被找到。\n" -" -v\t打印 COMMAND 命令的描述,和 `type' 内嵌相似\n" +" -v\t打印 COMMAND 命令的描述,和 `type' 内建相似\n" " -V\t打印每个 COMMAND 命令的详细描述\n" " \n" " 退出状态\n" @@ -2718,8 +2649,7 @@ msgid "" " Variables with the integer attribute have arithmetic evaluation (see\n" " the `let' command) performed when the variable is assigned a value.\n" " \n" -" When used in a function, `declare' makes NAMEs local, as with the " -"`local'\n" +" When used in a function, `declare' makes NAMEs local, as with the `local'\n" " command. The `-g' option suppresses this behavior.\n" " \n" " Exit Status:\n" @@ -2732,24 +2662,24 @@ msgstr "" " \n" " 选项:\n" " -f\t限制动作或显示函数名称和定义\n" -" -F\t限制仅显示函数名称(以及行号和调试时\n" -" \t源文件名)\n" +" -F\t限制仅显示函数名称(以及行号和调试时\n" +" \t源文件名)\n" " -p\t显示每个 NAME 变量的属性和值\n" " \n" " 设定属性的选项:\n" -" -a\t使 NAME 成为下标数组(如果支持)\n" -" -A\t使 NAME 成为关联数组 (如果支持)\n" -" -i\t使 NAME 带有 `integer' (整数)属性\n" +" -a\t使 NAME 成为下标数组(如果支持)\n" +" -A\t使 NAME 成为关联数组 (如果支持)\n" +" -i\t使 NAME 带有 `integer' (整数)属性\n" " -l\t将 NAME 在赋值时转为小写\n" " -r\t将 NAME 变为只读\n" -" -t\t使 NAME 带有 `trace' (追踪)属性\n" +" -t\t使 NAME 带有 `trace' (追踪)属性\n" " -u\t将 NAME 在赋值时转为大写\n" " -x\t将 NAME 导出\n" " \n" " 用 `+' 代替 `-' 会关闭指定选项。\n" " \n" -" 带有整数属性的变量在赋值时将使用算术估值(见\n" -" `let' 命令)\n" +" 带有整数属性的变量在赋值时将使用算术估值(见\n" +" `let' 命令)\n" " \n" " 在函数中使用时,`declare' 使 NAME 成为本地变量,和 `local'\n" " 命令一致。\n" @@ -2833,7 +2763,7 @@ msgstr "" " -E\t显式地抑制对于反斜杠转义的解释\n" " \n" " `echo' 对下列反斜杠字符进行转义:\n" -" \\a\t警告(响铃)\n" +" \\a\t警告(响铃)\n" " \\b\t退格\n" " \\c\t抑制更多的输出\n" " \\e\t转义字符\n" @@ -2843,9 +2773,9 @@ msgstr "" " \\t\t横向制表符\n" " \\v\t纵向制表符\n" " \\\\\t反斜杠\n" -" \\0nnn\t以 NNN (八进制)为 ASCII 码的字符。 NNN 可以是\n" +" \\0nnn\t以 NNN (八进制)为 ASCII 码的字符。 NNN 可以是\n" " \t0到3个八进制数字\n" -" \\xHH\t以 HH (十六进制)为值的八比特字符。HH可以是\n" +" \\xHH\t以 HH (十六进制)为值的八比特字符。HH可以是\n" " \t一个或两个十六进制数字\n" " \n" " 退出状态:\n" @@ -2899,36 +2829,35 @@ msgid "" " Exit Status:\n" " Returns success unless NAME is not a shell builtin or an error occurs." msgstr "" -"启用和禁用 shell 内嵌。\n" +"启用和禁用 shell 内建。\n" " \n" -" 启用和禁用 shell 的内嵌命令。禁用使您能够执行一个和内嵌\n" +" 启用和禁用 shell 的内建命令。禁用使您能够执行一个和内建\n" " 命令同名的磁盘上的命令,而无须使用完整的路径名。\n" " \n" " \n" " 选项:\n" -" -a\t打印一个内嵌的列表,并显示其中每一个是否启用\n" -" -n\t禁用每一个 NAME 内嵌或者显示一个被禁用的内嵌的列表\n" -" -p\t以可重用的格式打印一个内嵌的列表\n" -" -s\t仅打印Posix `special' 内嵌的名称\n" +" -a\t打印一个内建的列表,并显示其中每一个是否启用\n" +" -n\t禁用每一个 NAME 内建或者显示一个被禁用的内建的列表\n" +" -p\t以可重用的格式打印一个内建的列表\n" +" -s\t仅打印Posix `special' 内建的名称\n" " \n" " 控制动态加载的选项:\n" -" -f\t从共享对象 FILENAME 文件中加载 NAME 内嵌\n" -" -d\t删除以 -f 选项加载的内嵌\n" +" -f\t从共享对象 FILENAME 文件中加载 NAME 内建\n" +" -d\t删除以 -f 选项加载的内建\n" " \n" -" 不带选项时,每一个 NAME 内嵌都被启用。\n" +" 不带选项时,每一个 NAME 内建都被启用。\n" " \n" -" 如果要使用 $PATH 中找到的 `test' 而不是 shell 内嵌的版本,\n" +" 如果要使用 $PATH 中找到的 `test' 而不是 shell 内建的版本,\n" " 输入 `enable -n test'。\n" " \n" " 退出状态:\n" -" 返回成功,除非 NAME 不是一个 shell 内嵌或者有错误发生。" +" 返回成功,除非 NAME 不是一个 shell 内建或者有错误发生。" #: builtins.c:619 msgid "" "Execute arguments as a shell command.\n" " \n" -" Combine ARGs into a single string, use the result as input to the " -"shell,\n" +" Combine ARGs into a single string, use the result as input to the shell,\n" " and execute the resulting commands.\n" " \n" " Exit Status:\n" @@ -2988,7 +2917,7 @@ msgstr "" " \n" " \n" " OPTSTRING 字符串包含待识别的选项字母;如果一个字母后面跟\n" -" 着分号,则该选项期待一个参数,而该参数应用空格与选项分开。\n" +" 着分号,则该选项需要一个参数,而该参数应用空格与选项分开。\n" " \n" " \n" " 每次启动时,getopts 会将下一个选项放到 shell 变量 $name\n" @@ -3005,15 +2934,15 @@ msgstr "" " 须的选项没有找到,getopts 放一个 ':' 到 NAME 变量中并且设\n" " 置 OPTARG 变量为找到的选项字符。如果 getopts 不在沉默模\n" " 式中,并且遇到了一个无效的选项,getopts 放置一个 '?' 到 NAME \n" -" 变量中并且反设定 OPTARG变量。如果必须的选项没有找到,\n" -" 一个'?'会被放入 NAME变量中,OPTARG 将被反设定,并且会\n" +" 变量中并且取消设定 OPTARG变量。如果必须的选项没有找到,\n" +" 一个'?'会被放入 NAME变量中,OPTARG 将被取消设定,并且会\n" " 打印一个诊断信息。\n" " \n" " 如果 shell 变量 OPTERR 的值为0,getopts 禁用\n" " 错误信息的打印,即使 OPTSTRING 变量的第一个字符不是一\n" " 个冒号。OPTERR 的默认值为1.\n" " \n" -" Getopts 通常解析可定位的参数($0 - $9),不过如果提供了\n" +" Getopts 通常解析可定位的参数($0 - $9),不过如果提供了\n" " 更多的参数,它们反而会被解析。\n" " \n" " 退出状态:\n" @@ -3025,8 +2954,7 @@ msgid "" "Replace the shell with the given command.\n" " \n" " Execute COMMAND, replacing this shell with the specified program.\n" -" ARGUMENTS become the arguments to COMMAND. If COMMAND is not " -"specified,\n" +" ARGUMENTS become the arguments to COMMAND. If COMMAND is not specified,\n" " any redirections take effect in the current shell.\n" " \n" " Options:\n" @@ -3034,13 +2962,11 @@ msgid "" " -c\t\texecute COMMAND with an empty environment\n" " -l\t\tplace a dash in the zeroth argument to COMMAND\n" " \n" -" If the command cannot be executed, a non-interactive shell exits, " -"unless\n" +" If the command cannot be executed, a non-interactive shell exits, unless\n" " the shell option `execfail' is set.\n" " \n" " Exit Status:\n" -" Returns success unless COMMAND is not found or a redirection error " -"occurs." +" Returns success unless COMMAND is not found or a redirection error occurs." msgstr "" "使用指定命令替换 shell。\n" " \n" @@ -3075,8 +3001,7 @@ msgstr "" msgid "" "Exit a login shell.\n" " \n" -" Exits a login shell with exit status N. Returns an error if not " -"executed\n" +" Exits a login shell with exit status N. Returns an error if not executed\n" " in a login shell." msgstr "" "退出一个登录 shell.\n" @@ -3088,15 +3013,13 @@ msgstr "" msgid "" "Display or execute commands from the history list.\n" " \n" -" fc is used to list or edit and re-execute commands from the history " -"list.\n" +" fc is used to list or edit and re-execute commands from the history list.\n" " FIRST and LAST can be numbers specifying the range, or FIRST can be a\n" " string, which means the most recent command beginning with that\n" " string.\n" " \n" " Options:\n" -" -e ENAME\tselect which editor to use. Default is FCEDIT, then " -"EDITOR,\n" +" -e ENAME\tselect which editor to use. Default is FCEDIT, then EDITOR,\n" " \t\tthen vi\n" " -l \tlist lines instead of editing\n" " -n\tomit line numbers when listing\n" @@ -3110,8 +3033,7 @@ msgid "" " the last command.\n" " \n" " Exit Status:\n" -" Returns success or status of executed command; non-zero if an error " -"occurs." +" Returns success or status of executed command; non-zero if an error occurs." msgstr "" "从历史列表中显示或者执行命令。\n" " \n" @@ -3125,7 +3047,7 @@ msgstr "" " \t\t然后是 vi\n" " -l \t列出行而不编辑\n" " -n\t列举时省略行号\n" -" -r\t反转行的顺序(最新行在前)\n" +" -r\t反转行的顺序(最新行在前)\n" " \n" " 用 `fc -s [模式=替换 ...] [命令]' 的格式,COMMAND 命令会在 OLD=NEW\n" " 替换之后被重新执行。\n" @@ -3161,10 +3083,8 @@ msgstr "" msgid "" "Move jobs to the background.\n" " \n" -" Place the jobs identified by each JOB_SPEC in the background, as if " -"they\n" -" had been started with `&'. If JOB_SPEC is not present, the shell's " -"notion\n" +" Place the jobs identified by each JOB_SPEC in the background, as if they\n" +" had been started with `&'. If JOB_SPEC is not present, the shell's notion\n" " of the current job is used.\n" " \n" " Exit Status:\n" @@ -3184,8 +3104,7 @@ msgid "" "Remember or display program locations.\n" " \n" " Determine and remember the full pathname of each command NAME. If\n" -" no arguments are given, information about remembered commands is " -"displayed.\n" +" no arguments are given, information about remembered commands is displayed.\n" " \n" " Options:\n" " -d\t\tforget the remembered location of each NAME\n" @@ -3240,12 +3159,11 @@ msgid "" " PATTERN\tPattern specifiying a help topic\n" " \n" " Exit Status:\n" -" Returns success unless PATTERN is not found or an invalid option is " -"given." +" Returns success unless PATTERN is not found or an invalid option is given." msgstr "" -"显示内嵌命令的相关信息。\n" +"显示内建命令的相关信息。\n" " \n" -" 显示内嵌命令的简略信息。如果指定了 PATTERN 模式,\n" +" 显示内建命令的简略信息。如果指定了 PATTERN 模式,\n" " 给出所有匹配 PATTERN 模式的命令的详细帮助,否则打\n" " 印一个帮助主题列表\n" " \n" @@ -3288,8 +3206,7 @@ msgid "" " \n" " If the $HISTTIMEFORMAT variable is set and not null, its value is used\n" " as a format string for strftime(3) to print the time stamp associated\n" -" with each displayed history entry. No time stamps are printed " -"otherwise.\n" +" with each displayed history entry. No time stamps are printed otherwise.\n" " \n" " Exit Status:\n" " Returns success unless an invalid option is given or an error occurs." @@ -3429,7 +3346,7 @@ msgstr "" " -l\t列出信号名称;如果参数后跟 `-l'则被假设为信号编号,\n" " \t而相应的信号名称会被列出\n" " \n" -" Kill 成为 shell 内嵌有两个理由:它允许使用任务编号而不是进程号,\n" +" Kill 成为 shell 内建有两个理由:它允许使用任务编号而不是进程号,\n" " 并且在可以创建的进程数上限达到是允许进程被杀死。\n" " \n" " 退出状态:\n" @@ -3443,8 +3360,7 @@ msgid "" " Evaluate each ARG as an arithmetic expression. Evaluation is done in\n" " fixed-width integers with no check for overflow, though division by 0\n" " is trapped and flagged as an error. The following list of operators is\n" -" grouped into levels of equal-precedence operators. The levels are " -"listed\n" +" grouped into levels of equal-precedence operators. The levels are listed\n" " in order of decreasing precedence.\n" " \n" " \tid++, id--\tvariable post-increment, post-decrement\n" @@ -3510,7 +3426,7 @@ msgstr "" " \t&=, ^=, |=\t赋值\n" " \n" " Shell 变量允许作为操作数。表达式中的变量的名称会被取代\n" -" 以值(强制转换为等宽的整数)。表达式中的变量不需要打开\n" +" 以值(强制转换为等宽的整数)。表达式中的变量不需要打开\n" " 整数属性。\n" " \n" " \n" @@ -3526,16 +3442,13 @@ msgid "" "Read a line from the standard input and split it into fields.\n" " \n" " Reads a single line from the standard input, or from file descriptor FD\n" -" if the -u option is supplied. The line is split into fields as with " -"word\n" +" if the -u option is supplied. The line is split into fields as with word\n" " splitting, and the first word is assigned to the first NAME, the second\n" " word to the second NAME, and so on, with any leftover words assigned to\n" -" the last NAME. Only the characters found in $IFS are recognized as " -"word\n" +" the last NAME. Only the characters found in $IFS are recognized as word\n" " delimiters.\n" " \n" -" If no NAMEs are supplied, the line read is stored in the REPLY " -"variable.\n" +" If no NAMEs are supplied, the line read is stored in the REPLY variable.\n" " \n" " Options:\n" " -a array\tassign the words read to sequential indices of the array\n" @@ -3547,15 +3460,13 @@ msgid "" " -n nchars\treturn after reading NCHARS characters rather than waiting\n" " \t\tfor a newline, but honor a delimiter if fewer than NCHARS\n" " \t\tcharacters are read before the delimiter\n" -" -N nchars\treturn only after reading exactly NCHARS characters, " -"unless\n" +" -N nchars\treturn only after reading exactly NCHARS characters, unless\n" " \t\tEOF is encountered or read times out, ignoring any delimiter\n" " -p prompt\toutput the string PROMPT without a trailing newline before\n" " \t\tattempting to read\n" " -r\t\tdo not allow backslashes to escape any characters\n" " -s\t\tdo not echo input coming from a terminal\n" -" -t timeout\ttime out and return failure if a complete line of input " -"is\n" +" -t timeout\ttime out and return failure if a complete line of input is\n" " \t\tnot read withint TIMEOUT seconds. The value of the TMOUT\n" " \t\tvariable is the default timeout. TIMEOUT may be a\n" " \t\tfractional number. If TIMEOUT is 0, read returns success only\n" @@ -3564,8 +3475,7 @@ msgid "" " -u fd\t\tread from file descriptor FD instead of the standard input\n" " \n" " Exit Status:\n" -" The return code is zero, unless end-of-file is encountered, read times " -"out,\n" +" The return code is zero, unless end-of-file is encountered, read times out,\n" " or an invalid file descriptor is supplied as the argument to -u." msgstr "" "从标准输入读取一行并将其分为不同的域。\n" @@ -3669,8 +3579,7 @@ msgid "" " physical same as -P\n" " pipefail the return value of a pipeline is the status of\n" " the last command to exit with a non-zero status,\n" -" or zero if no command exited with a non-zero " -"status\n" +" or zero if no command exited with a non-zero status\n" " posix change the behavior of bash where the default\n" " operation differs from the Posix standard to\n" " match the standard\n" @@ -3710,7 +3619,7 @@ msgid "" " Exit Status:\n" " Returns success unless an invalid option is given." msgstr "" -"设定或反设定 shell 选项和位置参数的值。\n" +"设定或取消设定 shell 选项和位置参数的值。\n" " \n" " 改变 shell 选项和位置参数的值,或者显示 shell 变量的\n" " 名称和值。\n" @@ -3719,7 +3628,7 @@ msgstr "" " -a 标记修改的或者创建的变量为导出。\n" " -b 立即通告任务终结。\n" " -e 如果一个命令以非零状态退出,则立即退出。\n" -" -f 禁用文件名生成(模式匹配)。\n" +" -f 禁用文件名生成(模式匹配)。\n" " -h 当查询命令时记住它们的位置\n" " -k 所有的赋值参数被放在命令的环境中,而不仅仅是\n" " 命令名称之前的参数。\n" @@ -3796,8 +3705,7 @@ msgid "" " -f\ttreat each NAME as a shell function\n" " -v\ttreat each NAME as a shell variable\n" " \n" -" Without options, unset first tries to unset a variable, and if that " -"fails,\n" +" Without options, unset first tries to unset a variable, and if that fails,\n" " tries to unset a function.\n" " \n" " Some variables cannot be unset; also see `readonly'.\n" @@ -3805,7 +3713,7 @@ msgid "" " Exit Status:\n" " Returns success unless an invalid option is given or a NAME is read-only." msgstr "" -"反设定 shell 变量和函数的值和属性。\n" +"取消设定 shell 变量和函数的值和属性。\n" " \n" " 对每一个 NAME 名称,删除对应的变量或函数。\n" " \n" @@ -3813,10 +3721,10 @@ msgstr "" " -f\t将每个 NAME 名称当作函数对待\n" " -v\t将每个 NAME 名称当作变量对待\n" " \n" -" 不带选项时,unset 首先尝试反设定一个变量,如果\n" -" 失败,再尝试反设定一个函数。\n" +" 不带选项时,unset 首先尝试取消设定一个变量,如果\n" +" 失败,再尝试取消设定一个函数。\n" " \n" -" 某些变量不可以被反设定;请查看 `readonly'。\n" +" 某些变量不可以被取消设定;请查看 `readonly'。\n" " \n" " 退出状态:\n" " 返回成功,除非使用了无效的选项或者 NAME 名称为只读。" @@ -3826,8 +3734,7 @@ msgid "" "Set export attribute for shell variables.\n" " \n" " Marks each NAME for automatic export to the environment of subsequently\n" -" executed commands. If VALUE is supplied, assign VALUE before " -"exporting.\n" +" executed commands. If VALUE is supplied, assign VALUE before exporting.\n" " \n" " Options:\n" " -f\trefer to shell functions\n" @@ -3988,8 +3895,7 @@ msgid "" " -x FILE True if the file is executable by you.\n" " -O FILE True if the file is effectively owned by you.\n" " -G FILE True if the file is effectively owned by your group.\n" -" -N FILE True if the file has been modified since it was last " -"read.\n" +" -N FILE True if the file has been modified since it was last read.\n" " \n" " FILE1 -nt FILE2 True if file1 is newer than file2 (according to\n" " modification date).\n" @@ -4010,8 +3916,7 @@ msgid "" " STRING1 != STRING2\n" " True if the strings are not equal.\n" " STRING1 < STRING2\n" -" True if STRING1 sorts before STRING2 " -"lexicographically.\n" +" True if STRING1 sorts before STRING2 lexicographically.\n" " STRING1 > STRING2\n" " True if STRING1 sorts after STRING2 lexicographically.\n" " \n" @@ -4036,7 +3941,7 @@ msgid "" msgstr "" "对条件表达式进行估值。\n" " \n" -" 根据 EXPR 表达式的估值以状态0(真)或1(伪)退出。\n" +" 根据 EXPR 表达式的估值以状态0(真)或1(伪)退出。\n" " 表达式可以是一元或者二元的。一元表达式通常用于检测\n" " 文件状态。同时还有字符串操作符和数字比较操作符。\n" " \n" @@ -4064,8 +3969,8 @@ msgstr "" " -G 文件 如果文件被您的组所有则为真。\n" " -N 文件 如果文件上次被读取之后修改过则为真。\n" " \n" -" FILE1 -nt FILE2 如果 file1 文件新于 file2 文件则为真(根据\n" -" 修改日期)。\n" +" FILE1 -nt FILE2 如果 file1 文件新于 file2 文件则为真(根据\n" +" 修改日期)。\n" " \n" " FILE1 -ot FILE2 如果 file1 文件旧于 file2 文件则为真。\n" " \n" @@ -4113,15 +4018,14 @@ msgid "" msgstr "" "估值条件表达式。\n" " \n" -" 是内嵌命令 \"test\" 的同义词,但是最后一个参数必须是\n" +" 是内建命令 \"test\" 的同义词,但是最后一个参数必须是\n" " 字符 `]',以匹配起始的 `['。" #: builtins.c:1320 msgid "" "Display process times.\n" " \n" -" Prints the accumulated user and system times for the shell and all of " -"its\n" +" Prints the accumulated user and system times for the shell and all of its\n" " child processes.\n" " \n" " Exit Status:\n" @@ -4140,8 +4044,7 @@ msgstr "" msgid "" "Trap signals and other events.\n" " \n" -" Defines and activates handlers to be run when the shell receives " -"signals\n" +" Defines and activates handlers to be run when the shell receives signals\n" " or other conditions.\n" " \n" " ARG is a command to be read and executed when the shell receives the\n" @@ -4150,41 +4053,33 @@ msgid "" " value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n" " shell and by the commands it invokes.\n" " \n" -" If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell. " -"If\n" -" a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command. " -"If\n" -" a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or " -"a\n" -" script run by the . or source builtins finishes executing. A " -"SIGNAL_SPEC\n" -" of ERR means to execute ARG each time a command's failure would cause " -"the\n" +" If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell. If\n" +" a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command. If\n" +" a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or a\n" +" script run by the . or source builtins finishes executing. A SIGNAL_SPEC\n" +" of ERR means to execute ARG each time a command's failure would cause the\n" " shell to exit when the -e option is enabled.\n" " \n" -" If no arguments are supplied, trap prints the list of commands " -"associated\n" +" If no arguments are supplied, trap prints the list of commands associated\n" " with each signal.\n" " \n" " Options:\n" " -l\tprint a list of signal names and their corresponding numbers\n" " -p\tdisplay the trap commands associated with each SIGNAL_SPEC\n" " \n" -" Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal " -"number.\n" +" Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal number.\n" " Signal names are case insensitive and the SIG prefix is optional. A\n" " signal may be sent to the shell with \"kill -signal $$\".\n" " \n" " Exit Status:\n" -" Returns success unless a SIGSPEC is invalid or an invalid option is " -"given." +" Returns success unless a SIGSPEC is invalid or an invalid option is given." msgstr "" "对信号和其他事件设陷阱。\n" " \n" " 定义一个处理器,在 shell 接收到信号和其他条件下执行。\n" " \n" " ARG 参数是当 shell 接收到 SIGNAL_SPEC 信号时读取和执行的命令。\n" -" 如果没有指定 ARG 参数(并且只给出一个 SIGNAL_SPEC 信号)或者\n" +" 如果没有指定 ARG 参数(并且只给出一个 SIGNAL_SPEC 信号)或者\n" " 或者 ARG 参数为 `-',每一个指定的参数会被重置为原始值。如果 ARG 参数\n" " 是一个空串,则每一个 SIGNAL_SPEC 信号会被 shell 和它启动的命令忽略。\n" " \n" @@ -4232,8 +4127,7 @@ msgid "" " NAME\tCommand name to be interpreted.\n" " \n" " Exit Status:\n" -" Returns success if all of the NAMEs are found; fails if any are not " -"found." +" Returns success if all of the NAMEs are found; fails if any are not found." msgstr "" "显示命令类型的信息。\n" " \n" @@ -4241,15 +4135,15 @@ msgstr "" " \n" " 选项:\n" " -a\t显示所有包含名称为 NAME 的可执行文件的位置;\n" -" \t包括别名、内嵌和函数。仅当 `-p' 选项没有使用时\n" +" \t包括别名、内建和函数。仅当 `-p' 选项没有使用时\n" " -f\t抑制 shell 函数查询\n" " -P\t为每个 NAME 名称惊醒 PATH 路径搜索,即使它是别名、\n" -" \t内嵌或函数,并且返回将被执行的磁盘上文件的名称。\n" +" \t内建或函数,并且返回将被执行的磁盘上文件的名称。\n" " -p\t返回将被执行的磁盘上文件的名称,或者当 `type -t NAME'\n" " \t不返回 `file' 时,不返回任何值。\n" " -t\t返回下列词中的任何一个`alias'、`keyword'、\n" " \t`function'、`builtin'、`file'或者`',如果 NAME 是相应的\n" -" \t一个别名、shell 保留字、shell 函数、shell 内嵌、\n" +" \t一个别名、shell 保留字、shell 函数、shell 内建、\n" " \t磁盘文件或没有找到。\n" " \n" " 参数:\n" @@ -4262,8 +4156,7 @@ msgstr "" msgid "" "Modify shell resource limits.\n" " \n" -" Provides control over the resources available to the shell and " -"processes\n" +" Provides control over the resources available to the shell and processes\n" " it creates, on systems that allow such control.\n" " \n" " Options:\n" @@ -4307,13 +4200,13 @@ msgstr "" " 资源的控制。\n" " \n" " 选项:\n" -" -S\t使用 `soft'(软)资源限制\n" -" -H\t使用 `hard'(硬)资源限制\n" +" -S\t使用 `soft'(软)资源限制\n" +" -H\t使用 `hard'(硬)资源限制\n" " -a\t所有当前限制都被报告\n" " -b\t套接字缓存尺寸\n" " -c\t创建的核文件的最大尺寸\n" " -d\t一个进程的数据区的最大尺寸\n" -" -e\t最高的调度优先级(`nice')\n" +" -e\t最高的调度优先级(`nice')\n" " -f\t有 shell 及其子进程可以写的最大文件尺寸\n" " -i\t最多的可以挂起的信号数\n" " -l\t一个进程可以锁定的最大内存尺寸\n" @@ -4377,13 +4270,11 @@ msgid "" " Waits for the process identified by ID, which may be a process ID or a\n" " job specification, and reports its termination status. If ID is not\n" " given, waits for all currently active child processes, and the return\n" -" status is zero. If ID is a a job specification, waits for all " -"processes\n" +" status is zero. If ID is a a job specification, waits for all processes\n" " in the job's pipeline.\n" " \n" " Exit Status:\n" -" Returns the status of ID; fails if ID is invalid or an invalid option " -"is\n" +" Returns the status of ID; fails if ID is invalid or an invalid option is\n" " given." msgstr "" "等待任务完成并返回退出状态。\n" @@ -4405,8 +4296,7 @@ msgid "" " and the return code is zero. PID must be a process ID.\n" " \n" " Exit Status:\n" -" Returns the status of ID; fails if ID is invalid or an invalid option " -"is\n" +" Returns the status of ID; fails if ID is invalid or an invalid option is\n" " given." msgstr "" "等待进程完成并且返回退出状态。\n" @@ -4553,17 +4443,12 @@ msgstr "" msgid "" "Execute commands based on conditional.\n" " \n" -" The `if COMMANDS' list is executed. If its exit status is zero, then " -"the\n" -" `then COMMANDS' list is executed. Otherwise, each `elif COMMANDS' list " -"is\n" +" The `if COMMANDS' list is executed. If its exit status is zero, then the\n" +" `then COMMANDS' list is executed. Otherwise, each `elif COMMANDS' list is\n" " executed in turn, and if its exit status is zero, the corresponding\n" -" `then COMMANDS' list is executed and the if command completes. " -"Otherwise,\n" -" the `else COMMANDS' list is executed, if present. The exit status of " -"the\n" -" entire construct is the exit status of the last command executed, or " -"zero\n" +" `then COMMANDS' list is executed and the if command completes. Otherwise,\n" +" the `else COMMANDS' list is executed, if present. The exit status of the\n" +" entire construct is the exit status of the last command executed, or zero\n" " if no condition tested true.\n" " \n" " Exit Status:\n" @@ -4643,8 +4528,7 @@ msgid "" "Define shell function.\n" " \n" " Create a shell function named NAME. When invoked as a simple command,\n" -" NAME runs COMMANDs in the calling shell's context. When NAME is " -"invoked,\n" +" NAME runs COMMANDs in the calling shell's context. When NAME is invoked,\n" " the arguments are passed to the function as $1...$n, and the function's\n" " name is in $FUNCNAME.\n" " \n" @@ -4725,12 +4609,9 @@ msgstr "" msgid "" "Execute conditional command.\n" " \n" -" Returns a status of 0 or 1 depending on the evaluation of the " -"conditional\n" -" expression EXPRESSION. Expressions are composed of the same primaries " -"used\n" -" by the `test' builtin, and may be combined using the following " -"operators:\n" +" Returns a status of 0 or 1 depending on the evaluation of the conditional\n" +" expression EXPRESSION. Expressions are composed of the same primaries used\n" +" by the `test' builtin, and may be combined using the following operators:\n" " \n" " ( EXPRESSION )\tReturns the value of EXPRESSION\n" " ! EXPRESSION\t\tTrue if EXPRESSION is false; else false\n" @@ -4751,13 +4632,12 @@ msgstr "" "执行条件命令。\n" " \n" " 根据条件表达式 EXPRESSION 的估值返回状态0或1。表达式按照\n" -" `test' 内嵌的相同条件组成,或者可以有下列操作符连接而成:\n" +" `test' 内建的相同条件组成,或者可以有下列操作符连接而成:\n" " \n" " ( EXPRESSION )\t返回 EXPRESSION 表达式的值\n" " ! EXPRESSION\t\t如果 EXPRESSION表达式为假则为真,否则为假\n" " EXPR1 && EXPR2\t如果 EXPR1 和 EXPR2 表达式均为真则为真,否则为假\n" -" EXPR1 || EXPR2\t如果 EXPR1 和 EXPR2 表达式中有一个为真则为真,否则为" -"假\n" +" EXPR1 || EXPR2\t如果 EXPR1 和 EXPR2 表达式中有一个为真则为真,否则为假\n" " \n" " 当使用 `==' 和 `!=' 操作符时,操作符右边的字符串被用作模式并且执行一个\n" " 匹配。当使用 `=~' 操作符时,操作符右边的字符串被当作正则表达式来进行\n" @@ -4836,7 +4716,7 @@ msgstr "" " HOSTTYPE\t当前版本的 BASH 在其之上运行的 CPU 类型。\n" " IGNOREEOF\t控制 shell 收到文件结束符作为单一输入后的\n" " \t\t动作。如果设定这个变量,则它的值是 shell 退出之前在\n" -" \t\t一个空行上可以连续看到的文件结束符数量(默认为10)。\n" +" \t\t一个空行上可以连续看到的文件结束符数量(默认为10)。\n" " \t\t未设定时,文件结束符标志着输入的结束。\n" " MACHTYPE\t描述当前运行 Bash 的系统的字符串。\n" " MAILCHECK\tBash 检测新邮件的频率,以秒为单位。\n" @@ -4904,15 +4784,15 @@ msgstr "" " \t进行操作。\n" " \n" " 参数:\n" -" +N\t旋转栈从而第 N 个目录(`dirs' 显示的列表中左起,从零开始)\n" +" +N\t旋转栈从而第 N 个目录(`dirs' 显示的列表中左起,从零开始)\n" " \t将移动到栈顶。\n" " \n" -" -N\t旋转栈从而第 N 个目录(`dirs' 显示的列表中右起,从零开始)\n" +" -N\t旋转栈从而第 N 个目录(`dirs' 显示的列表中右起,从零开始)\n" " \t将移动到栈顶。\n" " \n" " dir\t将 DIR 目录添加到栈顶,并且使其成为当前工作目录。\n" " \n" -" `dirs' 内嵌显示目录栈。\n" +" `dirs' 内建显示目录栈。\n" " \n" " 退出状态:\n" " 返回成功,除非使用了无效的参数或者目录转换失败。" @@ -4953,13 +4833,13 @@ msgstr "" " \t进行操作。\n" " \n" " 参数:\n" -" +N\t删除第 N 个目录(`dirs' 显示的目录列表中左起,从零开始)。\n" +" +N\t删除第 N 个目录(`dirs' 显示的目录列表中左起,从零开始)。\n" " \t例如: `popd +0' 删除第一个目录,popd +1' 删除第二个。\n" " \n" -" -N\t删除第 N 个目录(`dirs' 显示的目录列表中右起,从零开始)。\n" +" -N\t删除第 N 个目录(`dirs' 显示的目录列表中右起,从零开始)。\n" " \t例如: `popd -0'删除最后一个目录,,`popd -1' 删除倒数第二个。\n" " \n" -" `dirs' 内嵌显示目录栈。\n" +" `dirs' 内建显示目录栈。\n" " \n" " 退出状态:\n" " 返回成功,除非使用了无效的参数或者目录变换失败。" @@ -4981,12 +4861,10 @@ msgid "" " \twith its position in the stack\n" " \n" " Arguments:\n" -" +N\tDisplays the Nth entry counting from the left of the list shown " -"by\n" +" +N\tDisplays the Nth entry counting from the left of the list shown by\n" " \tdirs when invoked without options, starting with zero.\n" " \n" -" -N\tDisplays the Nth entry counting from the right of the list shown " -"by\n" +" -N\tDisplays the Nth entry counting from the right of the list shown by\n" " \tdirs when invoked without options, starting with zero.\n" " \n" " Exit Status:\n" @@ -5018,8 +4896,7 @@ msgid "" "Set and unset shell options.\n" " \n" " Change the setting of each shell option OPTNAME. Without any option\n" -" arguments, list all shell options with an indication of whether or not " -"each\n" +" arguments, list all shell options with an indication of whether or not each\n" " is set.\n" " \n" " Options:\n" @@ -5033,7 +4910,7 @@ msgid "" " Returns success if OPTNAME is enabled; fails if an invalid option is\n" " given or OPTNAME is disabled." msgstr "" -"设定和反设定 shell 选项。\n" +"设定和取消设定 shell 选项。\n" " \n" " 改变每个 shell 选项 OPTNAME的设定。不带参数\n" " 时,列出所有 shell 选项并标注每一个选项是否被\n" @@ -5043,8 +4920,8 @@ msgstr "" " -o\t限制 OPTNAME 为定义用于`set -o' 的选项\n" " -p\t打印每个 shell 选项并标注它的状态。\n" " -q\t抑制输出\n" -" -s\t启用(设定)每个 OPTNAME 选项\n" -" -u\t禁用(反设定)每个 OPTNAME 选项\n" +" -s\t启用(设定)每个 OPTNAME 选项\n" +" -u\t禁用(取消设定)每个 OPTNAME 选项\n" " \n" " 退出状态:\n" " 如果 OPTNAME 选项被启用则返回成功;如果是\n" @@ -5059,28 +4936,22 @@ msgid "" " -v var\tassign the output to shell variable VAR rather than\n" " \t\tdisplay it on the standard output\n" " \n" -" FORMAT is a character string which contains three types of objects: " -"plain\n" -" characters, which are simply copied to standard output; character " -"escape\n" +" FORMAT is a character string which contains three types of objects: plain\n" +" characters, which are simply copied to standard output; character escape\n" " sequences, which are converted and copied to the standard output; and\n" -" format specifications, each of which causes printing of the next " -"successive\n" +" format specifications, each of which causes printing of the next successive\n" " argument.\n" " \n" -" In addition to the standard format specifications described in printf" -"(1)\n" +" In addition to the standard format specifications described in printf(1)\n" " and printf(3), printf interprets:\n" " \n" " %b\texpand backslash escape sequences in the corresponding argument\n" " %q\tquote the argument in a way that can be reused as shell input\n" -" %(fmt)T output the date-time string resulting from using FMT as a " -"format\n" +" %(fmt)T output the date-time string resulting from using FMT as a format\n" " string for strftime(3)\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or a write or " -"assignment\n" +" Returns success unless an invalid option is given or a write or assignment\n" " error occurs." msgstr "" "在 FORMAT 变量的控制下格式化并打印 ARGUMENTS 参数。\n" @@ -5089,8 +4960,7 @@ msgstr "" " -v var\t将输出赋值给 shell 变量 VAR 而不显示在标准输出上\n" " \n" " FORMAT 变量是包含三种对象的字符串:简单地被拷贝到标准输出的普通字符;\n" -" 被变换之后拷贝到标准输入的转义字符;以及每个都会影响到下个参数的打印" -"的 格式化声明。\n" +" 被变换之后拷贝到标准输入的转义字符;以及每个都会影响到下个参数的打印的 格式化声明。\n" " \n" " 在 printf(1)、printf(3) 中描述的标准控制声明之外,printf解析:\n" "、 \n" @@ -5104,10 +4974,8 @@ msgstr "" msgid "" "Specify how arguments are to be completed by Readline.\n" " \n" -" For each NAME, specify how arguments are to be completed. If no " -"options\n" -" are supplied, existing completion specifications are printed in a way " -"that\n" +" For each NAME, specify how arguments are to be completed. If no options\n" +" are supplied, existing completion specifications are printed in a way that\n" " allows them to be reused as input.\n" " \n" " Options:\n" @@ -5149,8 +5017,7 @@ msgid "" "Display possible completions depending on the options.\n" " \n" " Intended to be used from within a shell function generating possible\n" -" completions. If the optional WORD argument is supplied, matches " -"against\n" +" completions. If the optional WORD argument is supplied, matches against\n" " WORD are generated.\n" " \n" " Exit Status:\n" @@ -5170,12 +5037,9 @@ msgstr "" msgid "" "Modify or display completion options.\n" " \n" -" Modify the completion options for each NAME, or, if no NAMEs are " -"supplied,\n" -" the completion currently being executed. If no OPTIONs are given, " -"print\n" -" the completion options for each NAME or the current completion " -"specification.\n" +" Modify the completion options for each NAME, or, if no NAMEs are supplied,\n" +" the completion currently being executed. If no OPTIONs are given, print\n" +" the completion options for each NAME or the current completion specification.\n" " \n" " Options:\n" " \t-o option\tSet completion option OPTION for each NAME\n" @@ -5211,7 +5075,7 @@ msgstr "" " \n" " 参数:\n" " \n" -" 每个 NAME 名称都对应一个之前以通过 `complete' 内嵌定义了补完声明的\n" +" 每个 NAME 名称都对应一个之前以通过 `complete' 内建定义了补完声明的\n" " 命令。如果不提供 NAME 名称,当前生成补完的函数必须调用 compopt,\n" " 并且当前执行的补完生成器选项会被修改。\n" " \n" @@ -5223,24 +5087,18 @@ msgstr "" msgid "" "Read lines from the standard input into an indexed array variable.\n" " \n" -" Read lines from the standard input into the indexed array variable " -"ARRAY, or\n" -" from file descriptor FD if the -u option is supplied. The variable " -"MAPFILE\n" +" Read lines from the standard input into the indexed array variable ARRAY, or\n" +" from file descriptor FD if the -u option is supplied. The variable MAPFILE\n" " is the default ARRAY.\n" " \n" " Options:\n" -" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are " -"copied.\n" -" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default " -"index is 0.\n" +" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied.\n" +" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0.\n" " -s count \tDiscard the first COUNT lines read.\n" " -t\t\tRemove a trailing newline from each line read.\n" -" -u fd\t\tRead lines from file descriptor FD instead of the standard " -"input.\n" +" -u fd\t\tRead lines from file descriptor FD instead of the standard input.\n" " -C callback\tEvaluate CALLBACK each time QUANTUM lines are read.\n" -" -c quantum\tSpecify the number of lines read between each call to " -"CALLBACK.\n" +" -c quantum\tSpecify the number of lines read between each call to CALLBACK.\n" " \n" " Arguments:\n" " ARRAY\t\tArray variable name to use for file data.\n" @@ -5250,13 +5108,11 @@ msgid "" " element to be assigned and the line to be assigned to that element\n" " as additional arguments.\n" " \n" -" If not supplied with an explicit origin, mapfile will clear ARRAY " -"before\n" +" If not supplied with an explicit origin, mapfile will clear ARRAY before\n" " assigning to it.\n" " \n" " Exit Status:\n" -" Returns success unless an invalid option is given or ARRAY is readonly " -"or\n" +" Returns success unless an invalid option is given or ARRAY is readonly or\n" " not an indexed array." msgstr "" "从标准输入读取行到下表数组变量中。\n" @@ -5305,8 +5161,7 @@ msgstr "" #~ "; this extra information can be used to\n" #~ " provide a stack trace.\n" #~ " \n" -#~ " The value of EXPR indicates how many call frames to go back before " -#~ "the\n" +#~ " The value of EXPR indicates how many call frames to go back before the\n" #~ " current one; the top frame is frame 0." #~ msgstr "" #~ "; 这个额外信息可被用于\n" diff --git a/tests/errors.right b/tests/errors.right index b3e0125f..07c95de9 100644 --- a/tests/errors.right +++ b/tests/errors.right @@ -101,10 +101,6 @@ kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill ./errors1.sub: line 1: .: -i: invalid option .: usage: . filename [arguments] ./errors1.sub: line 9: shift: -4: shift count out of range -./errors1.sub: line 5: return: -1: invalid option -return: usage: return [n] ./errors1.sub: line 14: break: -1: loop count out of range -./errors1.sub: line 20: return: -2: invalid option -return: usage: return [n] after f ./errors.tests: line 264: `!!': not a valid identifier |